Description
In the Linux kernel, the following vulnerability has been resolved:

namespace: check the mounts before reading their parents in pivot_root()

path_pivot_root() reads the parents of new_root and of the caller's root
and checks whether they are shared before it checks that either mount is
in the caller's mount namespace. Only namespace_sem is held. That's fine
for a mount that is in the caller's mount namespace.

But new_root can be a file descriptor to a mount that has been unmounted
and that only the file descriptor keeps alive. If that mount stayed
attached to its parent when it was unmounted nothing pins the parent for
it. The final mntput() of the parent unhooks the children under
mount_lock alone and frees the parent afterwards:

pivot_root() close(fd), last ref on the parent
------------ ---------------------------------
ex_parent = new_mnt->mnt_parent
mntput_no_expire_slowpath()
__umount_mnt(new_mnt)
cleanup_mnt()
call_rcu()
IS_MNT_SHARED(ex_parent)

BUG: KASAN: slab-use-after-free in path_pivot_root+0xf1a/0x1840
Read of size 4 at addr ffff8881047382f8 by task pivot_widen/157
path_pivot_root+0xf1a/0x1840
__x64_sys_pivot_root+0x165/0x190

The same goes for the caller's root via chroot(). Both outcomes of the
check end in EINVAL so nothing but the read itself goes wrong. It's the
same thing commit bb4609405752 ("statmount: read the parent of an
unmounted mount under mount_lock") fixed for statmount().

Check that both mounts are in the caller's namespace before their
parents are read. Every path returns EINVAL either way.
Published: 2026-10-23
Score: 5.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Use-After-Use Leading to Kernel Crash or Privilege Escalation
Action: Apply Patch
AI Analysis

Impact

In the Linux kernel, the path_pivot_root routine incorrectly reads the parent mounts of a new_root or the caller’s root before validating that those mounts belong to the caller’s mount namespace. This ordering creates a use‑after‑free scenario when a mount is unmounted but a file descriptor still references it. The stale read causes a kernel panic or memory corruption. The weakness is captured by CWE-825: Use After Free and manifests as an unintended kernel crash or potential privilege escalation.

Affected Systems

The flaw exists in all versions of the Linux kernel preceding the inclusion of commit bb4609405752. Both the pivot_root and chroot system calls are affected. Commonly impacted scenarios include container initialization, initramfs setups, and scripts that modify the root filesystem. Specific version numbers are not supplied; however, any kernel built before the fix is potentially vulnerable.

Risk and Exploitability

The CVSS score of 5.5 points to a moderate severity, while the EPSS score of <1% indicates a very low likelihood of widespread exploitation. It is not listed in the CISA Known Exploited Vulnerabilities catalog. Based on the description, it is inferred that the attack requires local privileged code that can invoke pivot_root or chroot and manipulate mounts via file descriptors. The attacker would create a mount that becomes unmounted while still referenced, then call pivot_root or chroot, causing the kernel to read freed memory. Although the function returns EINVAL, the underlying memory corruption could lead to a crash or, in worst cases, arbitrary code execution.

Generated by OpenCVE AI on October 29, 2026 at 22:36 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to a release that includes commit bb4609405752 or any later stable release.
  • If an immediate upgrade is not possible, avoid using pivot_root or chroot with file descriptors that point to mounts that can be unmounted; ensure mounts remain mounted and not manipulated during the call.
  • Enable kernel logging or a watchdog so that any KASAN hit or kernel panic triggers an automatic reboot or alert.
  • If you maintain a custom kernel, cherry-pick commit bb4609405752 from the kernel repository and rebuild the kernel.

Generated by OpenCVE AI on October 29, 2026 at 22:36 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Ubuntu USN Ubuntu USN USN-9018-1 Linux kernel vulnerabilities
Ubuntu USN Ubuntu USN USN-9018-2 Linux kernel (HWE) vulnerabilities
Ubuntu USN Ubuntu USN USN-9019-1 Linux kernel (Azure) vulnerabilities
Ubuntu USN Ubuntu USN USN-9020-1 Linux kernel vulnerabilities
History

Fri, 30 Oct 2026 13:00:00 +0000


Thu, 29 Oct 2026 20:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Thu, 29 Oct 2026 12:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-825
References
Metrics threat_severity

None

cvssV3_1

{'score': 5.5, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Moderate


Sat, 24 Oct 2026 01:15:00 +0000

Type Values Removed Values Added
First Time appeared Linux linux
Vendors & Products Linux linux

Fri, 23 Oct 2026 15:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Fri, 23 Oct 2026 12:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: namespace: check the mounts before reading their parents in pivot_root() path_pivot_root() reads the parents of new_root and of the caller's root and checks whether they are shared before it checks that either mount is in the caller's mount namespace. Only namespace_sem is held. That's fine for a mount that is in the caller's mount namespace. But new_root can be a file descriptor to a mount that has been unmounted and that only the file descriptor keeps alive. If that mount stayed attached to its parent when it was unmounted nothing pins the parent for it. The final mntput() of the parent unhooks the children under mount_lock alone and frees the parent afterwards: pivot_root() close(fd), last ref on the parent ------------ --------------------------------- ex_parent = new_mnt->mnt_parent mntput_no_expire_slowpath() __umount_mnt(new_mnt) cleanup_mnt() call_rcu() IS_MNT_SHARED(ex_parent) BUG: KASAN: slab-use-after-free in path_pivot_root+0xf1a/0x1840 Read of size 4 at addr ffff8881047382f8 by task pivot_widen/157 path_pivot_root+0xf1a/0x1840 __x64_sys_pivot_root+0x165/0x190 The same goes for the caller's root via chroot(). Both outcomes of the check end in EINVAL so nothing but the read itself goes wrong. It's the same thing commit bb4609405752 ("statmount: read the parent of an unmounted mount under mount_lock") fixed for statmount(). Check that both mounts are in the caller's namespace before their parents are read. Every path returns EINVAL either way.
Title namespace: check the mounts before reading their parents in pivot_root()
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-30T12:40:43.386Z

Reserved: 2026-09-25T10:25:14.384Z

Link: CVE-2026-98985

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-23T13:17:20.420

Modified: 2026-10-30T13:21:34.310

Link: CVE-2026-98985

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-10-23T00:00:00Z

Links: CVE-2026-98985 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-29T22:45:03Z

Weaknesses
  • CWE-825

    Expired Pointer Dereference