CVE-2026-43472
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
08/05/2026
Last modified:
12/05/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
unshare: fix unshare_fs() handling<br />
<br />
There&#39;s an unpleasant corner case in unshare(2), when we have a<br />
CLONE_NEWNS in flags and current->fs hadn&#39;t been shared at all; in that<br />
case copy_mnt_ns() gets passed current->fs instead of a private copy,<br />
which causes interesting warts in proof of correctness]<br />
<br />
> I guess if private means fs->users == 1, the condition could still be true.<br />
<br />
Unfortunately, it&#39;s worse than just a convoluted proof of correctness.<br />
Consider the case when we have CLONE_NEWCGROUP in addition to CLONE_NEWNS<br />
(and current->fs->users == 1).<br />
<br />
We pass current->fs to copy_mnt_ns(), all right. Suppose it succeeds and<br />
flips current->fs->{pwd,root} to corresponding locations in the new namespace.<br />
Now we proceed to copy_cgroup_ns(), which fails (e.g. with -ENOMEM).<br />
We call put_mnt_ns() on the namespace created by copy_mnt_ns(), it&#39;s<br />
destroyed and its mount tree is dissolved, but... current->fs->root and<br />
current->fs->pwd are both left pointing to now detached mounts.<br />
<br />
They are pinning those, so it&#39;s not a UAF, but it leaves the calling<br />
process with unshare(2) failing with -ENOMEM _and_ leaving it with<br />
pwd and root on detached isolated mounts. The last part is clearly a bug.<br />
<br />
There is other fun related to that mess (races with pivot_root(), including<br />
the one between pivot_root() and fork(), of all things), but this one<br />
is easy to isolate and fix - treat CLONE_NEWNS as "allocate a new<br />
fs_struct even if it hadn&#39;t been shared in the first place". Sure, we could<br />
go for something like "if both CLONE_NEWNS *and* one of the things that might<br />
end up failing after copy_mnt_ns() call in create_new_namespaces() are set,<br />
force allocation of new fs_struct", but let&#39;s keep it simple - the cost<br />
of copy_fs_struct() is trivial.<br />
<br />
Another benefit is that copy_mnt_ns() with CLONE_NEWNS *always* gets<br />
a freshly allocated fs_struct, yet to be attached to anything. That<br />
seriously simplifies the analysis...<br />
<br />
FWIW, that bug had been there since the introduction of unshare(2) ;-/
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/42e21e74061b0ebbd859839f81acf10efad02a27
- https://git.kernel.org/stable/c/6c4b2243cb6c0755159bd567130d5e12e7b10d9f
- https://git.kernel.org/stable/c/845bf3c6963a52096d0d3866e4a92db77a0c03d8
- https://git.kernel.org/stable/c/aa9ebc084505fb26dd90f4d7a249045aad152043
- https://git.kernel.org/stable/c/af8f4be3b68ac8caa41c8e5ead0eeaf5e85e42d0
- https://git.kernel.org/stable/c/d0d99f60538ddb4a62ccaac2168d8f448965f083
- https://git.kernel.org/stable/c/d3ffc8f13034af895531a02c30b1fe3a34b46432
- https://git.kernel.org/stable/c/d7963d6997fea86a6def242ac36198b86655f912



