data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-89861 in the interactive tracker

CVE-2026-89861

scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition()

8.1 EPSS 0.6% AV:N

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-89861 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

ReleaseStatus VersionWhat this means
Debian 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update 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 13trixiefixedDSA-6528-1 · 2026-09-29 · text6.12.111-1Update 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 14forkyfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.6-1Update 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.12fixedDLA-4817-1 · 2026-10-04 · text6.12.111-1~deb12u1Update 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

In the format 1 path, the virtual port is located on ha->vp_list while holding vport_slock, but the lock is dropped before vp is used: qla_update_host_map() is called and VP_IDX_ACQUIRED/REGISTER_FC4_NEEDED/ REGISTER_FDMI_NEEDED are set on vp. No reference is taken across that window, so a concurrent qla24xx_deallocate_vp_id() can tear the vport down and free it, leading to a use-after-free. Take a vport reference (vref_count) under vport_slock when the matching vp is found, and drop it after the last use of vp. qla24xx_deallocate_vp_id() waits for vref_count to reach zero before unlinking and freeing the vport, so the pointer stays valid. This matches the reference idiom already used by the other ha->vp_list traversals.

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/qla2xxx/qla_mbx.c

What this is
QLOGIC QLA2XXX FC-SCSI DRIVERMAINTAINERS section matched on drivers/scsi/qla2xxx/ · linux-scsi@vger.kernel.org · Supported
Kernel module
qla2xxx

Check it on the machine

grep -w CONFIG_SCSI_QLA_FC /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 qla2xxx

Prints 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, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp
  • trixieMnot built on amd64/cloud-amd64, arm64/cloud-arm64, armel/rpi, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp, s390x/s390x
  • forky, sidMnot built on amd64/cloud-amd64, arm64/cloud-arm64, armhf/armmp, armhf/armmp-lpae, s390x/s390x
  • bookworm · linux-6.12Mnot built on amd64/cloud-amd64, arm64/cloud-arm64, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp
M
a module where it is built at all; some flavours do not build it
Build switch
CONFIG_SCSI_QLA_FC

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
8.1 high
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.57%, higher than 46.1% 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

IntroducedFixed inCommit
2.6.235.10.270d09ef32af1e0
2.6.235.15.2214b7f0a95bfeb
2.6.236.1.188267533b28ddf
2.6.236.6.157f8d2eb510c06
2.6.236.12.110f6b3bcc7cb2f
2.6.236.18.5147272152a13d
2.6.237.2.5d556f899964d
2.6.237.3793cedee296f

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
DLA-4817-12026-10-04bookworm 6.12.111-1~deb12u1tracker
DSA-6528-12026-09-29trixie 6.12.111-1tracker

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:NAttack vector, network
qla24xx_report_id_acquisition() runs from qla24xx_process_response_queue() and the ATIO MSI-X path on firmware VP_RPT_ID IOCBs after fabric FDISC or VP_STAT_ID_CHG. QLogic CNAs speak FCoE and SANs are stretched via FCIP, so a remote SAN peer drives this without a local syscall, matching sibling CVE-2026-89848.
AC:HAttack complexity, high
The use-after-free requires qla24xx_deallocate_vp_id() to unlink the vport and scsi_host_put() it after the ISR drops vport_slock, which occurs only during NPIV vport deletion or failed vport create, a victim state a fabric attacker cannot initiate.
PR:NPrivileges required, none
Report-ID IOCBs are firmware completions of unauthenticated Fibre Channel fabric login and N_Port ID assignment. The interrupt path performs no Linux credential or capability check, so a fabric peer needs no account on the victim host.
UI:NUser interaction, none
VP_RPT_ID handling runs automatically from the HBA interrupt and qla_do_work paths when the fabric assigns or changes an NPIV port ID. Concurrent vport teardown occurs during routine NPIV delete or driver remove, without a mount, open, or other interactive victim step.
S:UScope, unchanged
The use-after-free is of scsi_qla_host inside the host kernel qla2xxx driver and does not cross a VM, IOMMU, or other separate security-authority boundary.
C:HConfidentiality impact, high
After scsi_host_put() frees the vport, the ISR still calls qla_update_host_map() and set_bit() on the dangling scsi_qla_host. That kernel heap use-after-free enables disclosure of reused object contents.
I:HIntegrity impact, high
qla_update_host_map() writes the freed vport's d_id and inserts the dangling vha pointer into ha->host_map, and set_bit() writes vp_flags/dpc_flags on the freed object, yielding a kernel write and control-flow hijack primitive.
A:HAvailability impact, high
Use-after-free of scsi_qla_host from interrupt or qla_do_work context produces a kernel oops or panic even when not fully exploited, taking down storage served by the adapter.