CVE-2026-99170

EUVD-2026-111922
In the Linux kernel, the following vulnerability has been resolved:

namespace: a mount that copy_tree() leaves out can't take over a lock

Since commit c62a4766937e ("move_mount: transfer MNT_LOCKED") a mount
can be moved beneath a locked mount. The lock moves from the old cover
to the new mount which takes over the job of hiding what's under it and
the old cover can be unmounted. That works as long as the new mount
stays. But the caller picks the new mount and copy_tree() leaves a
mount of a mount namespace file out of every copy made without
CL_COPY_MNT_NS_FILE, together with everything mounted on it, and never
looks at MNT_LOCKED. unshare(CLONE_NEWNS) and mount propagation make
such copies.

So a task that is root in its own user namespace gets rid of a locked
cover on a file without a race and without touching the filesystem
below it. It makes a child with a mount namespace of its own, binds the
child's /proc/<pid>/ns/mnt beneath the cover with MOVE_MOUNT_BENEATH,
which hands the lock to that bind, and calls unshare(CLONE_NEWNS). The
new mount namespace has nothing on the file. That's the usual way to
mask a single file, a bind of /dev/null or of an empty file. With a
bind of an ordinary file the file stays covered.

copy_tree() already refuses to leave out a locked unbindable mount with
-EPERM since commit df7342b24018 ("mount: Don't allow copying
MNT_UNBINDABLE|MNT_LOCKED mounts"). Do the same for a locked mount of a
mount namespace file. That also covers a tree copied with
CL_COPY_MNT_NS_FILE and attached into a mount namespace of another user
namespace where lock_mnt_tree() locks it. Note that unshare(CLONE_NEWNS)
and clone(CLONE_NEWNS) fail with EPERM from such a mount namespace from
then on. The mount can't be left out and it can't be unmounted.

And refuse to move a mount of a mount namespace file beneath a locked
mount in the first place. Otherwise the task ends up with a mount it
can't unmount and an unshare() that fails for good.

Chris also found a second mount that goes away by itself, a clone of an
automounted mount that shrink_submounts() took along with its parent.
Commit f78ddcc87224 ("namespace: never expire a locked mount") took
care of that one.

Chris's reproducer is appended. Mode nsfile reads SECRET after the
unshare() on 7.3-rc7, with this patch the move_mount() fails with
EINVAL and the file stays covered. nsfile-control uses an ordinary file
and reads MASK both ways.

  // SPDX-License-Identifier: GPL-2.0
  /*
   * Get rid of a locked cover with MOVE_MOUNT_BENEATH.
   *
   * The "admin" (root) makes a tmpfs W:
   *     W/D         file, holds SECRET, covered by a bind of a file with MASK
   *     W/Dd/inner  file, holds SECRET, Dd is covered by a bind of a directory
   *                 whose "inner" holds MASK
   *     W/own       directory of uid 1000 with the file "mine" and the
   *                 directory "minedir", whose "inner" holds MINE
   *     W/dbg       debugfs, mode 755. dbg/tracing is an automount point
   * The "attacker" is uid 1000. It enters a new user namespace with a new mount
   * namespace, so W and both covers are locked there.
   *
   * usage: prog MODE
   *   plain      put a bind of own/mine beneath the cover of D, unmount the cover
   *   nsfile     put a bind of the mount namespace file of a child beneath the
   *              cover of D, then unshare(CLONE_NEWNS)
   *   nsfile-control    the same with a bind of own/mine
   *   shrink     put a bind of the automounted tracefs beneath the cover of Dd,
   *              unmount the cover, put a tmpfs beneath W, call umount(W), which fails
   *   shrink-control    the same with a bind of own/minedir
   * The environment variable AUTOMOUNT_DIR names another automount point for "shrink".
   */
  #define _GNU_SOURCE
  #include <errno.h>
  #include <fcntl.h>
  #include <grp.h>
  #include <sched.h>
  #include <signal.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
 
---truncated---
ProviderTypeBase ScoreAtk. VectorAtk. ComplexityPriv. RequiredVector
NISTPrimary
UNKNOWN
---
Awaiting analysis
This vulnerability is currently awaiting analysis.
Base Score
CVSS 3.x
EPSS Score
Percentile: Unknown
Debian logo
Debian Releases
Debian Product
Codename
linux
bookworm
6.1.176-1
fixed
bookworm (security)
6.1.190-1
fixed
forky
vulnerable
sid
7.2.13-1
fixed
trixie
6.12.107-1
fixed
trixie (security)
6.12.113-1
fixed
Ubuntu logo
Ubuntu Releases
Ubuntu Product
Codename
linux
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-hwe
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
xenial
needs-triage
linux-hwe-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-hwe-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-hwe-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-hwe-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-hwe-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-hwe-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-hwe-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-hwe-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
xenial
ignored
linux-lts-xenial
jammy
dne
noble
dne
resolute
dne
stonking
dne
trusty
needs-triage
linux-kvm
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
xenial
needs-triage
linux-allwinner-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-aws
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-aws-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-aws-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-aws-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-aws-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-aws-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-aws-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-aws-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-aws-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-aws-hwe
jammy
dne
noble
dne
resolute
dne
stonking
dne
xenial
needs-triage
linux-azure
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-azure-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-azure-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-azure-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-azure-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-azure-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-azure-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-fde
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
linux-azure-fde-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-fde-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-azure-fde-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-azure-fde-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-azure-fde-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-fde-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-fde-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-nvidia
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-azure-nvidia-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-bluefield
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
xenial
needs-triage
linux-aws-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-azure-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
xenial
needs-triage
linux-gcp-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gcp-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-gcp-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-gcp-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-gcp-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-gcp-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-gcp-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-gcp-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-gcp-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-gke
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
dne
linux-gke-4.15
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gke-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gke-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gkeop
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
dne
stonking
dne
linux-gkeop-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-gkeop-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-ibm
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
dne
linux-ibm-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-ibm-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-ibm-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-intel-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-intel-iotg
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-intel-iotg-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-iot
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-intel-iot-realtime
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-lowlatency
jammy
needs-triage
noble
needs-triage
resolute
dne
stonking
dne
linux-lowlatency-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-lowlatency-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-lowlatency-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-lowlatency-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-lowlatency-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-lowlatency-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-nvidia
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
dne
linux-nvidia-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-nvidia-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-nvidia-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-nvidia-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-nvidia-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-nvidia-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-nvidia-bos
jammy
dne
noble
dne
resolute
needs-triage
stonking
dne
linux-nvidia-lowlatency
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-nvidia-tegra
jammy
needs-triage
noble
needs-triage
resolute
dne
stonking
dne
linux-nvidia-tegra-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-nvidia-tegra-igx
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-oracle
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
xenial
needs-triage
linux-oracle-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oracle-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-oracle-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-oracle-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-oracle-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-oracle-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-oem
bionic
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oem-5.6
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oem-5.10
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oem-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oem-5.14
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-oem-5.17
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-oem-6.0
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-oem-6.1
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-oem-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-oem-6.8
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-oem-6.11
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-oem-6.14
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-oem-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-oem-7.0
jammy
dne
noble
dne
resolute
needs-triage
stonking
dne
linux-raspi
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
linux-raspi2
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-raspi-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-raspi-realtime
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-realtime
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
stonking
needs-triage
linux-realtime-6.8
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-realtime-6.14
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-riscv
focal
ignored
jammy
ignored
noble
ignored
resolute
needs-triage
stonking
needs-triage
linux-riscv-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-riscv-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-riscv-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
stonking
dne
linux-riscv-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-riscv-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-riscv-6.8
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-riscv-6.14
jammy
dne
noble
ignored
resolute
dne
stonking
dne
linux-riscv-6.17
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-riscv-7.0
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-starfive-5.19
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-starfive-6.2
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-starfive-6.5
jammy
ignored
noble
dne
resolute
dne
stonking
dne
linux-vmware
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-xilinx
jammy
dne
noble
needs-triage
resolute
dne
stonking
dne
linux-xilinx-zynqmp
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
stonking
dne
linux-realtime-6.17
jammy
dne
noble
dne
resolute
dne
stonking
dne