CVE-2026-89857

CVE-2026-89857

Critical · published September 16, 2026

CVSS v3.1
9.8
EPSS
1%
Percentile
48.9
In the wild
Unconfirmed
What it is

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.

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00618 · 48.9th percentile
Published
2026-09-16T15:16Z
References (5)
EPSS history
Timeline
  • 18 SEP 04:02Z
    EPSS moved — → 1%
    epss
  • 16 SEP 10:31Z
    scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject
    cvelistv5