KernelScan.io

CRITICAL Introduced in 6.6

qla2xxx LsReject Race

CVE-2026-89857

CVSS 9.8 / 10.0 NVD

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

KernelScan AI7.5HIGH

01

In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject qla_nvme_ls_reject_iocb() allocates from and advances the request ring through __qla2x00_alloc_iocbs() (which assumes the hardware_lock is held) and qla2x00_start_iocbs() (which advances the ring and rings the request-in doorbell), but takes no lock itself. Two of its callers invoke it without the producer lock held: - qla_nvme_xmt_ls_rsp(), the NVMe-FC .xmt_ls_rsp transport callback, on its error path, and - qla2xxx_process_purls_pkt(), run from the purex work/DPC context. Both use ha->base_qpair, whose qp_lock_ptr is hardware_lock, so they can run concurrently with normal I/O submission on the base ring and corrupt the ring producer state, leading to duplicated or dropped commands. The third caller, qla2xxx_process_purls_iocb(), runs inside qla24xx_process_response_queue() with the qpair lock already held and is safe; that is also why the lock cannot be taken inside the helper itself (it would recursively re-acquire hardware_lock on the response path). Take qp_lock_ptr around the two unlocked callers and document the helper as caller-locked. Both run in process context, so spin_lock_irqsave() is used and nothing in the locked region sleeps.

02

Engine v0.6.0

Risk summary

A missing lock in the QLogic qla2xxx Fibre Channel driver allows concurrent access to the hardware request ring when sending NVMe-FC Link Service reject responses, corrupting ring producer state. An attacker on the same Fibre Channel fabric can trigger this by sending unsolicited LS requests, potentially causing memory corruption, duplicated or dropped I/O commands, and system instability. Systems without a QLogic FC HBA or with no FC fabric connectivity are not affected.

Affecteddrivers/scsi/qla2xxx/qla_nvme.c (qla2xxx FC/NVMe-FC driver)

Vulnerability analysis

The qla2xxx Fibre Channel driver sends NVMe-FC Link Service reject responses through a helper that allocates from and advances the hardware request ring, but two call sites invoke that helper without holding the lock that protects the ring. This allows the reject path to run concurrently with normal I/O submission on the same base ring, corrupting the ring producer state and leading to duplicated or dropped commands. The fix wraps the two unlocked callers with the qpair spinlock (the third caller already holds it), and documents the helper as requiring the caller to hold the lock. The vulnerable path is reachable from the Fibre Channel fabric—an attacker on the same SAN can send unsolicited LS requests to trigger the receive-side path—or locally through NVMe-FC operations that hit the error path, but only on systems equipped with a QLogic FC HBA and active FC connectivity.

03

BranchIntroducedFixed inPatch commit
6.126.66.12.110b3a362466db6
6.186.66.18.5111834e5773e2
6.66.66.6.1577eb618877503
7.26.67.2.5b02ff132017b
mainline6.67.3f743488e4a20
cip/6.126.66.12.111-cip32b3a362466db6

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32