Look up another CVE · open CVE-2026-90007 in the interactive tracker
CVE-2026-90007
scsi: pm8001: Use rollback index when freeing MSI-X vectors
Published 2026-09-16 (33 days ago) by the Linux kernel CNA. Subsystem drivers/scsi. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-90007 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | fixedDLA-4841-1 · 2026-10-17 · text | 6.1.190-1 | Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
pm8001_request_msix() unwinds previously registered handlers with free_irq() when request_irq() fails. The rollback loop uses the failing index i for every iteration instead of the already registered vector index j. That passes the wrong IRQ/dev_id pair to free_irq() and leaves the earlier handlers installed. Use j for both pci_irq_vector() and the matching irq_vector entry in the rollback loop.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
drivers/scsi/pm8001/pm8001_init.c
- What this is
- PMC SIERRA PM8001 DRIVERMAINTAINERS section matched on drivers/scsi/pm8001/ · linux-scsi@vger.kernel.org · Supported
- Kernel module
- pm80xx
Check it on the machine
grep -w CONFIG_SCSI_PM8001 /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
lsmod | grep -w pm80xxPrints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.
Show whether Debian builds this, per release
Debian builds this, but not on every flavour. At least one release below builds the code on some of its kernel flavours and not on others, so the answer depends on the architecture and flavour installed.
- bookwormMnot built on amd64/cloud-amd64, arm64/cloud-arm64
- trixieMnot built on amd64/cloud-amd64, arm64/cloud-arm64, armel/rpi
- forky, sid, bookworm · linux-6.12Mnot built on amd64/cloud-amd64, arm64/cloud-arm64
- M
- a module where it is built at all; some flavours do not build it
- Build switch
- CONFIG_SCSI_PM8001
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-09-16 (33 days ago)source
- CVSS
- 7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.16%, higher than 5.3% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- drivers/scsi
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 4.11 | 5.10.270 | f39e3ca1f688 |
| 4.11 | 5.15.221 | a980dec7c699 |
| 4.11 | 6.1.188 | 0205db768570 |
| 4.11 | 6.6.157 | 2853ce9c88e0 |
| 4.11 | 6.12.110 | fb22a8d2f3ac |
| 4.11 | 6.18.51 | dd817463c9b4 |
| 4.11 | 7.2.5 | e20b16aa3b49 |
| 4.11 | 7.3 | 3f92a6454516 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4841-1 | 2026-10-17 | bookworm 6.1.190-1 | tracker |
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:LAttack vector, local
- The bug is in pm8001_request_msix() on the PCI SAS HBA probe and resume path (pm8001_pci_probe/pm8001_pci_resume → pm8001_alloc/pm8001_request_irq), not in network, FC, or USB packet processing; PMC-Sierra/Microchip/ATTO/Adaptec SPCv controllers are local PCI devices in storage servers and workstations.
- AC:LAttack complexity, low
- Once request_irq() fails after any earlier MSI-X vector succeeded, rollback always free_irq()s the failing index i instead of registered index j, then pci_free_irq_vectors() and kfree of the HBA; a local attacker can induce that partial failure with memory or IRQ exhaustion and does not depend on an uncontrolled race.
- PR:LPrivileges required, low
- An unprivileged local user on a machine with a multi-vector SPCv pm8001 HBA can apply memory pressure during probe, deferred probe, or resume so a later request_irq() fails, then spray the heap against the leftover IRQ handler; PCI bind/unbind needs init-namespace root but is not required to exploit the planted UAF.
- UI:NUser interaction, none
- No victim must mount a filesystem, open a device, or plug hardware; the attacker induces the MSI-X request failure and consumes the leftover handler without another user's action.
- S:UScope, unchanged
- The leftover irqaction and use-after-free of pm8001_hba_info stay in the host kernel IRQ/SCSI path and do not cross a VM, IOMMU, or other security-authority boundary.
- C:HConfidentiality impact, high
- Failed MSI-X registration leaves pm8001_interrupt_handler_msix installed with dev_id pointing into pm8001_ha, which pm8001_free() then kfree()s, a use-after-free that per kernel CNA guidance enables arbitrary kernel memory disclosure via slab reuse.
- I:HIntegrity impact, high
- The same dangling MSI-X handler reads irq_vector->drv_inst and invokes isr/tasklet on the freed HBA object; reclaiming that heap allocation yields write and control-flow hijack primitives, so integrity impact is High.
- A:HAvailability impact, high
- Wrong-index free_irq() hits WARN on an already-free IRQ, pci_free_irq_vectors() tears down descriptors with live irqactions, and a later IRQ or panic_on_warn can oops or panic the kernel, fully denying availability.