{"schema":"threatline.record/2","record":{"id":"CVE-2026-98982","aliases":[],"summary":"namespace: don't let a pseudo dentry become the root of a mount","details":"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 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.","categories":["Operating systems"],"product":"Linux","vendor":"Linux","ecosystem":null,"affected_ranges":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-98982","source_modified_at":"2026-10-23T12:19:59.784Z","fetched_at":"2026-10-23T18:42:43.628194Z","product":"Linux","vendor":"Linux","versions":[{"version":"35f96de04127d332a5c5e8a155d31f452f88c76d","lessThan":"a256e31e0c54c4c37d2523aa52faabdcdd2ebc07","status":"affected","versionType":"git"},{"version":"35f96de04127d332a5c5e8a155d31f452f88c76d","lessThan":"7e1c466011ba9e64d43075396badc03191bcee44","status":"affected","versionType":"git"},{"version":"35f96de04127d332a5c5e8a155d31f452f88c76d","lessThan":"00287afa7cd989efdbf5822b7efac33cce7d489a","status":"affected","versionType":"git"},{"version":"35f96de04127d332a5c5e8a155d31f452f88c76d","lessThan":"b138e16fb1e81376cea89f727dda7bfccd140de4","status":"affected","versionType":"git"}],"defaultStatus":"unaffected"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-98982","source_modified_at":"2026-10-23T12:19:59.784Z","fetched_at":"2026-10-23T18:42:43.628194Z","product":"Linux","vendor":"Linux","versions":[{"version":"6.9","status":"affected"},{"version":"0","lessThan":"6.9","status":"unaffected","versionType":"semver"},{"version":"6.12.113","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.57","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.11","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}],"defaultStatus":"affected"}],"fixed_versions":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-98982","source_modified_at":"2026-10-23T12:19:59.784Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"7e1c466011ba9e64d43075396badc03191bcee44","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-98982","source_modified_at":"2026-10-23T12:19:59.784Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"00287afa7cd989efdbf5822b7efac33cce7d489a","basis":"first unaffected version stated in the CVE record"}],"cvss":null,"severity":null,"kev":{"listed":false},"epss":{"probability":null,"percentile":null,"score_date":null},"published_at":"2026-10-23T12:19:59.784Z","modified_at":"2026-10-23T12:19:59.784Z","provenance":[{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-98982","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23T12:19:59.784Z"}],"sources":["CVE List"],"references":[{"source":"CVE List","url":"https://git.kernel.org/stable/c/a256e31e0c54c4c37d2523aa52faabdcdd2ebc07"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/7e1c466011ba9e64d43075396badc03191bcee44"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/00287afa7cd989efdbf5822b7efac33cce7d489a"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/b138e16fb1e81376cea89f727dda7bfccd140de4"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"product","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-23T12:19:59.784Z","content_hash":"45d6654a053d6285885a363005730a889e35106bf3c4954bc4ab932d0452d53d"}}
