{"id":"CVE-2026-98982","title":"namespace: don't let a pseudo dentry become the root of a mount","summary":"In the Linux kernel, the following vulnerability has been resolved:\n\nnamespace: don't let a pseudo dentry become the root of a mount\n\nd_alloc_pseudo() hands out dentries for pipes, sockets and other files\nthat are never anyone's child or…","severity":"none","vendor":"Linux","product":"Linux","affected":["Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < a256e31e0c54c4c37d2523aa52faabdcdd2ebc07","Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < 7e1c466011ba9e64d43075396badc03191bcee44","Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < 00287afa7cd989efdbf5822b7efac33cce7d489a","Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < b138e16fb1e81376cea89f727dda7bfccd140de4","Linux 6.9"],"published":"2026-10-23","updated":"2026-10-23","sourceUpdated":"2026-10-23T12:19:59.784Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-98982","references":[{"url":"https://git.kernel.org/stable/c/a256e31e0c54c4c37d2523aa52faabdcdd2ebc07"},{"url":"https://git.kernel.org/stable/c/7e1c466011ba9e64d43075396badc03191bcee44"},{"url":"https://git.kernel.org/stable/c/00287afa7cd989efdbf5822b7efac33cce7d489a"},{"url":"https://git.kernel.org/stable/c/b138e16fb1e81376cea89f727dda7bfccd140de4"}],"tags":["cve.org"],"ingestedAt":"2026-10-23T13:24:55.548Z","slug":"CVE-2026-98982","body":"## Overview\n\nIn the Linux kernel, the following vulnerability has been resolved:\n\nnamespace: don't let a pseudo dentry become the root of a mount\n\nd_alloc_pseudo() hands out dentries for pipes, sockets and other files\nthat are never anyone's child or parent. They carry DCACHE_NORCU and\ndentry_free() frees them right away because no lockless path walk can\never reach them. That holds as long as such a dentry isn't the root of\na mount. But bind mounting /proc/self/fd/<fd> of such a file does\nexactly that.\n\nMost callers of alloc_file_pseudo() put their files on kernel-internal\nmounts and may_copy_tree() refuses those. bpf_token_create() doesn't. It\nplaces the token file on the bpffs mount the caller handed it and that\nmount is in the caller's mount namespace so the clone goes through:\n\n  mount --bind /proc/self/fd/<token> <file>\n  open_tree(tokfd, \"\", AT_EMPTY_PATH | OPEN_TREE_CLONE) + move_mount()\n\n__follow_mount_rcu() then loads ->mnt_root of that mount, reads d_seq\nand d_flags of the dentry and only then checks mount_lock. The dentry\ncan be gone by then. The final mntput() of an unmounted parent unhooks\na child that stayed attached to it under mount_lock alone. When the\nchild's holder does the final put right after that the root is dput()\nand freed immediately while a walker that found the mount hashed still\nlooks at it.\n\nRefuse to clone a mount with a DCACHE_NORCU dentry as its root. Nothing\nsensible can be done with a bind mount of a bpf token anyway.\n\n## Affected\n\n- `Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < a256e31e0c54c4c37d2523aa52faabdcdd2ebc07`\n- `Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < 7e1c466011ba9e64d43075396badc03191bcee44`\n- `Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < 00287afa7cd989efdbf5822b7efac33cce7d489a`\n- `Linux >= 35f96de04127d332a5c5e8a155d31f452f88c76d < b138e16fb1e81376cea89f727dda7bfccd140de4`\n- `Linux 6.9`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.","depth":"sunlit","depthScore":3,"depthScoreParts":{"impact":2.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}