{
  "affected": [
    {
      "ranges": [
        {
          "events": [
            {
              "introduced": "35f96de04127d332a5c5e8a155d31f452f88c76d"
            },
            {
              "fixed": "a256e31e0c54c4c37d2523aa52faabdcdd2ebc07"
            },
            {
              "fixed": "7e1c466011ba9e64d43075396badc03191bcee44"
            },
            {
              "fixed": "00287afa7cd989efdbf5822b7efac33cce7d489a"
            },
            {
              "fixed": "b138e16fb1e81376cea89f727dda7bfccd140de4"
            }
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "type": "GIT"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "Linux",
        "name": "Kernel"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "6.9.0"
            },
            {
              "fixed": "6.12.113"
            }
          ],
          "type": "ECOSYSTEM"
        },
        {
          "events": [
            {
              "introduced": "6.13.0"
            },
            {
              "fixed": "6.18.57"
            }
          ],
          "type": "ECOSYSTEM"
        },
        {
          "events": [
            {
              "introduced": "6.19.0"
            },
            {
              "fixed": "7.2.11"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "database_specific": {
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98982.json"
  },
  "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/\u003cfd\u003e 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/\u003ctoken\u003e \u003cfile\u003e\n  open_tree(tokfd, \"\", AT_EMPTY_PATH | OPEN_TREE_CLONE) + move_mount()\n\n__follow_mount_rcu() then loads -\u003emnt_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.",
  "id": "CVE-2026-98982",
  "modified": "2026-10-28T02:31:08.677866951Z",
  "published": "2026-10-23T12:19:59.784Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/00287afa7cd989efdbf5822b7efac33cce7d489a"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/7e1c466011ba9e64d43075396badc03191bcee44"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/a256e31e0c54c4c37d2523aa52faabdcdd2ebc07"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/b138e16fb1e81376cea89f727dda7bfccd140de4"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98982.json"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-98982"
    },
    {
      "type": "PACKAGE",
      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
    }
  ],
  "schema_version": "1.9.2",
  "severity": [
    {
      "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ],
  "summary": "namespace: don't let a pseudo dentry become the root of a mount"
}