CVE-2026-89861
nicheUse-after-free in Linux kernel qla2xxx NPIV vport handling
CVE-2026-89861 is a race-condition use-after-free in the Linux kernel's qla2xxx Fibre Channel host bus adapter driver (Marvell/QLogic). In qla24xx_report_id_acquisition(), the driver finds a virtual port (NPIV vport) on ha->vp_list while holding vport_slock, but then drops the lock and continues using the pointer; because no reference (vref_count) is held across that window, a concurrent qla24xx_deallocate_vp_id() can tear down and free the vport mid-use, causing a use-after-free. An attacker who can trigger vport acquisition events (fabric/switch-driven format 1 reports) at the same moment a vport is being deleted can corrupt kernel memory, leading to denial of service and potentially privilege escalation or kernel memory disclosure (CVSS 8.1). Affected systems are Linux servers with QLogic/Marvell FC HBAs running the qla2xxx driver, particularly those using NPIV virtual ports. No public proof-of-concept is known and the issue is not listed in CISA's KEV, with no confirmed exploitation in the wild.
What to do: Apply kernel updates that include the fix commit, which takes a vport reference under vport_slock in qla24xx_report_id_acquisition(); track your distribution's kernel advisory for the backported patch since no fixed version numbers are given here. Check whether the qla2xxx module is loaded and whether NPIV vports exist (e.g., /sys/class/fc_vports) — systems without qla2xxx FC HBAs or without vports are not practically exposed. Avoid concurrent vport creation/deletion operations during fabric reconfiguration events as an interim risk reduction, and monitor Marvell/QLogic and distribution advisories.
| Linux kernel (scsi/qla2xxx driver) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition() 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.
- Vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.