All vulnerabilities
CVE-2026-98056

Linux: nvme: remove stale namespaces by NSID range during scan

Linux LinuxOperating systems
CVSS
7.5High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.60%Chance of exploitation activity in the next 30 days, higher than 48% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in52200fc41a79da430ccf7c126ed837535b087ea2Also 4ed7f3d7d435bf5b63da2814dc9270f5ba896011CVE List
Published25 Sep 2026Updated 21 Oct 2026CVE List

What fixes it

  • 52200fc41a79da430ccf7c126ed837535b087ea2LinuxCVE List
  • 4ed7f3d7d435bf5b63da2814dc9270f5ba896011LinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

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

nvme: remove stale namespaces by NSID range during scan

nvme_scan_ns_list() drops the stale namespaces in each gap in the reported NSID list one NSID at a time. Every iteration calls nvme_find_get_ns() to look the namespace up and removes it if it is present. The loop runs once per NSID in the gap rather than once per namespace actually present.

NSIDs are 32-bit, so a target with a sparse NSID space can make a single gap spin the loop billions of times with nothing to remove.

watchdog: BUG: soft lockup - CPU#4 stuck for 26s! Workqueue: nvme-wq nvme_scan_work [nvme_core] RIP: 0010:__srcu_read_unlock+0xb/0x20 Call Trace: nvme_find_get_ns+0x7d/0xb0 [nvme_core] nvme_scan_ns_list+0xe8/0x280 [nvme_core] nvme_scan_work+0x18a/0x280 [nvme_core] process_one_work+0x197/0x380 worker_thread+0x2fe/0x410 kthread+0xe0/0x100

Rename nvme_remove_invalid_namespaces() to nvme_remove_nsid_range() and give it an open (start, end) NSID range. ctrl->namespaces is sorted by NSID, so the whole gap is dropped in a single walk that stops once end is reached. This bounds the work by the namespaces that are present instead of by the size of the gap.

Text from CVE List

Affected versions 12

  • Linuxaffected: 540c801c65eb58e05e0ca38b6fd644a83d7e2b33 before e6a94b2c4c80a38002346ce915a9b9a3d478a3e6CVE List
  • Linuxaffected: 540c801c65eb58e05e0ca38b6fd644a83d7e2b33 before c84ad7407fb16b92d9b7a649cc304a9cf3757897CVE List
  • Linuxaffected: 540c801c65eb58e05e0ca38b6fd644a83d7e2b33 before f56b2bb4b18b017b056c4c17c66b2c4c54bf6ee4CVE List
  • Linuxaffected: 540c801c65eb58e05e0ca38b6fd644a83d7e2b33 before 52200fc41a79da430ccf7c126ed837535b087ea2CVE List
  • Linuxaffected: 540c801c65eb58e05e0ca38b6fd644a83d7e2b33 before 4ed7f3d7d435bf5b63da2814dc9270f5ba896011CVE List
  • Linuxaffected: 4.5CVE List
  • Linuxunaffected: all versions before 4.5CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.111 through 6.12.*CVE List
  • Linuxunaffected: 6.18.53 through 6.18.*CVE List
  • Linuxunaffected: 7.2.7 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 5