CVE-2026-89860 PUBLISHED

scsi: qla2xxx: Initialize NVMe abort_work once at submission

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

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

scsi: qla2xxx: Initialize NVMe abort_work once at submission

qla_nvme_fcp_abort() and qla_nvme_ls_abort() ran INIT_WORK() on priv->abort_work immediately before schedule_work(). INIT_WORK() reinitializes the work_struct, resetting its list head and clearing the pending bit. If an abort is issued more than once for the same command (for example, concurrent transport teardown and a timeout-driven abort), the second INIT_WORK() reinitializes a work item that is already queued, which can corrupt the workqueue list and lead to crashes or a looping worker.

Initialize priv->abort_work once at command submission, next to the existing per-command spin_lock_init(&priv->cmd_lock), and leave only schedule_work() in the abort paths. schedule_work() already does nothing when the work item is still pending, so a repeated abort no longer disturbs an in-flight work item. The command is not returned to the transport until the final kref_put()/release callback runs after abort_work has completed, so the work item is idle before priv is reused and the single submission-time INIT_WORK() is safe.

Metrics

CVSS Vector: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 8.8

AV:A - The bug is in the QLogic qla2xxx NVMe-FC initiator abort callbacks. A Fibre Channel peer (compromised NVMe-FC target or zoned SAN device) can stall commands to force timeouts and concurrently drop the link or send LOGO/RSCN so nvme_fc tears down, both of which call ls_abort/fcp_abort. FC is a non-IP fabric, so the vector is adjacent. AC:L - A malicious NVMe-FC target controls both sides of the documented race: delaying completions triggers timeout-driven abort while a concurrent link-down or logout triggers teardown abort. INIT_WORK() on still-queued abort_work is then attacker-influenceable under I/O load, so complexity is low. PR:N - The attacker is a Fibre Channel peer and needs no host credentials or capabilities. Fabric zoning/WWPN is a topology restriction captured by Adjacent, not an OS privilege, and NVMe in-band authentication is optional and off by default. UI:N - With ql2xnvmeenable defaulting to on, an established NVMe-FC association issues keepalives and I/O without user action. The target can stall those commands and flap the link without anyone mounting a volume or running a tool. S:U - Impact is kernel workqueue list corruption in the same host kernel that runs qla2xxx. That is ordinary kernel memory-corruption impact, not a VM escape, IOMMU bypass, or other crossed security authority. C:H - INIT_WORK() on a queued work_struct resets its list head without unlinking it, corrupting the workqueue and creating a use-after-free of work items. That UAF can be used to read kernel memory, so confidentiality is high. I:H - The same workqueue UAF can overwrite adjacent objects and hijack work->func when the worker runs a freed item, yielding an arbitrary-write / control-flow primitive, so integrity is high. A:H - The corrupted workqueue can oops, panic, or run a looping worker, crashing or hanging the kernel, so availability is high.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from e473b3074104ee09227cfbba5f872e3ea15dd280 to b403700ac62fbf3c310196386e125879a182efcf (excl.)
  • affected from e473b3074104ee09227cfbba5f872e3ea15dd280 to 6a1b50c4879c2e6a034e8e85f9c055f0eea157c7 (excl.)
  • affected from e473b3074104ee09227cfbba5f872e3ea15dd280 to 67f0d5187c29360388f7e1e503c627ec45d01089 (excl.)
  • affected from e473b3074104ee09227cfbba5f872e3ea15dd280 to f4aaa4a4e6f1da6f3abfd80e1917bef922287177 (excl.)
  • affected from e473b3074104ee09227cfbba5f872e3ea15dd280 to 7e85f6dbc85616de2172bce8eaf84b387a723cd1 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.17 is affected
  • unaffected from 0 to 4.17 (excl.)
  • unaffected from 6.6.157 to 6.6.* (incl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc1 to * (incl.)

References