{
  "cveId": "CVE-2026-98980",
  "url": "https://patchblox.com/security/cve/CVE-2026-98980",
  "summary": "CVE-2026-98980 is fixed in 19 products on 1 platform, first by DEBIAN-CVE-2026-98980, released October 24, 2026. It is not reported as exploited. Patch Radar priority: High.",
  "title": "namei: don\u0027t reveal overmounted entries in refwalk",
  "description": "In the Linux kernel, the following vulnerability has been resolved:  namei: don\u0027t reveal overmounted entries in refwalk  In rcuwalk the dentry is validated before it is accepted. step_into() step_into() rechecks d_seq and __follow_mount_rcu() rechecks mount_lock. An entry that gets unlinked in between causes the lookup to retry and miss.  A refwalk doesn\u0027t do this. lookup_fast() takes a reference on the hashed dentry and simply accepts it. So an unlink that happens after the reference was taken isn\u0027t seen by refwalk. That\u0027s fine for a simple file. We just happened to open it before it was unlinked, no problem.  For a mountpoint and specifically a locked mountpoint it very much isn\u0027t. The unlink detaches all mounts and then removes the name. Any refwalk that hasn\u0027t traversed the mounts yet simply reveals the underlying entry. It\u0027s a very narrow window but it can be hit:    reads of a covered file in 60 s, 3 walkers, ~15000 unlinks     no widening            27     that step \u002B 200 us   3741  See the appended patch for a more reliable reproducer.  So check the entry after step_into(). unlink(), rmdir() and rename() mark the dentry with dont_mount() before they detach the mounts and remove the dentry.  So a dentry that is marked with DCACHE_CANT_MOUNT and is unhashed by the time its mounts were looked at is a name that was unlinked under the refwalk. DCACHE_CANT_MOUNT is read after the mounts were looked up and it is set before they are detached by detach_mounts(). A refwalk that missed the mounts will see DCACHE_CANT_MOUNT.  Plain d_unlinked() is fine. A rename takes the dentry off its hash chain but ___d_drop() leaves d_hash.pprev set. So only __d_drop() and a rename over the dentry unhash it. The only move that flips IS_ROOT splices in a disconnected alias. That doesn\u0027t have DCACHE_CANT_MOUNT set.  Add the to step_into_slowpath(). \u0022..\u0022 and LOOKUP_DOWN may legitimately land on an unhashed directory. A refwalk that crossed onto a mount has path.mnt different from nd-\u003Epath.mnt. A dentry that a filesystem dropped on its own (d_invalidate(), d_drop()) doesn\u0027t have the flag set and is treated as before.    // SPDX-License-Identifier: GPL-2.0   /*    * unlink_covered: unlink a file that is a mountpoint in a detached copy of    * its mount, against walkers that open it through that copy.    *    * A is a tmpfs with the file f1 (content SECRET_F) and the plain file    * MARK_A. A\u0027 is an open_tree(OPEN_TREE_CLONE) copy of A with MARK_A bound    * on A\u0027/f1, held through an O_PATH fd on its root once the tree fd is    * closed. Walkers open f1 through that fd while the driver unlinks A/f1,    * where nothing is mounted on it. A walker may read MARK_A or get ENOENT.    * A read of SECRET_F is a hit: the name was found after its mount was    * gone. The lockless walks use openat2(RESOLVE_CACHED).    *    * usage: unlink_covered [-t seconds] [-w walkers]    */   #ifndef _GNU_SOURCE   #define _GNU_SOURCE   #endif   #include \u003Cerrno.h\u003E   #include \u003Cfcntl.h\u003E   #include \u003Cpthread.h\u003E   #include \u003Cstdatomic.h\u003E   #include \u003Cstdio.h\u003E   #include \u003Cstdlib.h\u003E   #include \u003Cstring.h\u003E   #include \u003Cunistd.h\u003E   #include \u003Csys/mount.h\u003E   #include \u003Csys/stat.h\u003E   #include \u003Csys/syscall.h\u003E   #include \u003Clinux/openat2.h\u003E    #ifndef __NR_open_tree   #define __NR_open_tree 428   #endif   #ifndef __NR_move_mount   #define __NR_move_mount 429   #endif   #ifndef __NR_openat2   #define __NR_openat2 437   #endif   #ifndef OPEN_TREE_CLONE   #define OPEN_TREE_CLONE 1   #endif   #ifndef OPEN_TREE_CLOEXEC   #define OPEN_TREE_CLOEXEC O_CLOEXEC   #endif   #ifndef MOVE_MOUNT_F_EMPTY_PATH   #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004   #endif    #define WORK \u0022/tmp/uc\u0022   #define ADIR WORK \u0022/A\u0022    static int duration = 60, nwalkers = 3;   static atomic_int stop, writer_waiting;   static pthread_rwlock_t cur_lock = PTHREAD_RWLOCK_INITIALIZER;   static int cur_fd = -1;\t\t/* the root of A\u0027, -1 while there is none */   static atomic_long n_unlink, n_walk, n_mark, n_enoent, n_othe ---truncated---",
  "published": "2026-10-23T13:17:19Z",
  "severity": "Moderate",
  "cvss": 8.8,
  "cvssVector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
  "epss": 0.00175,
  "epssPercentile": 0.07055,
  "priority": "High",
  "priorityTier": 3,
  "exploited": false,
  "vendorExploited": false,
  "disclosed": false,
  "vendorAdvisory": "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-98980",
  "fixes": [
    {
      "platform": "linux",
      "product": "bpftool6.12",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "bpftool6.12-debuginfo",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel-livepatch-6.12.113-138.209",
      "release": "amzn 2023",
      "fixedVersion": "1:1.0-0.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-debuginfo",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-debuginfo-common-aarch64",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-debuginfo-common-x86_64",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-devel",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-headers",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-modules-extra",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-modules-extra-common",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-tools",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-tools-debuginfo",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "kernel6.12-tools-devel",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 13.5 (trixie)",
      "fixedVersion": "6.12.113-1",
      "fix": "DEBIAN-CVE-2026-98980",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2026-98980",
      "released": "2026-10-24T13:25:57Z"
    },
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 14",
      "fixedVersion": "7.2.11-1",
      "fix": "DEBIAN-CVE-2026-98980",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2026-98980",
      "released": "2026-10-24T13:25:57Z"
    },
    {
      "platform": "linux",
      "product": "perf6.12",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "perf6.12-debuginfo",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "python3-perf6.12",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    },
    {
      "platform": "linux",
      "product": "python3-perf6.12-debuginfo",
      "release": "amzn 2023",
      "fixedVersion": "1:6.12.113-138.209.amzn2023",
      "fix": "ALAS2023-2026-3335",
      "url": "https://patchblox.com/security/fix/linux/alas2023-2026-3335",
      "released": "2026-11-07T01:06:52Z"
    }
  ],
  "noFixYet": [],
  "dataAsOf": "2026-11-08T19:12:23Z",
  "attribution": {
    "text": "Data: Patchblox Patch Radar",
    "url": "https://patchblox.com/security/patch-radar",
    "terms": "https://patchblox.com/security/patch-radar/use-the-data"
  }
}