CVE-2026-89849 PUBLISHED

scsi: qla2xxx: Reject non-SCSI SRB on status IOCB fast path

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: Reject non-SCSI SRB on status IOCB fast path

qla2x00_status_entry() filters out non-TYPE_SRB entries and the SRB_NVME_CMD, SRB_BIDI_CMD and SRB_TM_CMD types, then falls through to a SCSI fast path that assumes the command is an SRB_SCSI_CMD. The first thing on that path, qla_chk_edif_rx_sa_delete_pending(), and the subsequent handling both evaluate GET_CMD_SP(sp), i.e. sp->u.scmd.cmd.

The srb u union overlays the SCSI command pointer with other command layouts (bsg_job, iocb_cmd). If firmware delivers an unexpected STATUS_TYPE IOCB for a non-SCSI handle, sp->u.scmd.cmd can read as a non-NULL garbage pointer, bypassing the NULL checks in qla_chk_edif_rx_sa_delete_pending() and at the cp == NULL test, and leading to a wild pointer dereference.

Reject any SRB whose type is not SRB_SCSI_CMD before entering the fast path. The outstanding_cmds slot is left untouched so a genuinely non-SCSI command still completes through its proper handler.

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 - qla2xxx processes STATUS_TYPE IOCBs from the Fibre Channel/FCoE HBA response queue in interrupt context. A peer on the same SAN fabric can keep non-SCSI SRBs (login, CT, NACK, NVMe LS) outstanding and drive firmware completions; FC is a non-routable fabric, so Adjacent is the highest defensible vector. AC:L - Firmware already completes several non-SCSI types (NVMe, bidirectional, task-management) via STATUS_TYPE, and the SCSI fast path was an unguarded fall-through. Once a STATUS_TYPE IOCB names a non-SCSI handle, the type confusion is deterministic, with no race or layout outside attacker influence. PR:N - Fibre Channel has no host authentication by default. Fabric login, nameserver CT, target-mode NACK, and I/O completions are handled in the HBA ISR/DPC with no Linux account or capability required on the victim. UI:N - Response-queue processing runs automatically from the HBA interrupt and qla_do_work paths. No victim mount, open, or other user action is required. S:U - The type confusion and wild-pointer access occur in the host kernel that owns the qla2xxx driver. This is not a VM escape, IOMMU bypass, or other cross-authority impact. C:H - GET_CMD_SP(sp) overlays scsi_cmnd with other SRB union members (bsg_job, ctarg.iocb, ntfy, sa_ctl). Treating those live kernel pointers as scsi_cmnd yields wild reads of command and sense fields, a type-confusion primitive that can be leveraged for kernel memory disclosure. I:H - The same type confusion writes through the forged scsi_cmnd via scsi_set_resid and memset/memcpy of firmware sense data into cp->sense_buffer. Type confusion with those kernel writes is High integrity and can hijack control flow. A:H - Dereferencing the overlaid non-SCSI pointer as scsi_cmnd in interrupt/completion context causes a kernel oops or panic, matching related qla_chk_edif_rx_sa_delete_pending crashes on this path.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to 9204fb0888374083be74f799049649a17eab4191 (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to b7418198b45b327194b97f856fe8ea8daa91f3fd (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to 8f0e31e7a41376abe7d6ca7cbee07fcf9de071e6 (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to e38041b47c29316ba79b645e2ae0b713d216b1db (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to e93aa3c5125d9a4352ac0fa8ba4a7f8f87881805 (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to 29f1f9ad9e354cd0b6e4f6fc75ba09162d6a04d9 (excl.)
  • affected from dd30706e73b70d67e88fdaca688db7a3374fd5de to 0f41d07d72f2245208c45374ca8d0a1846cad667 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 5.15 is affected
  • unaffected from 0 to 5.15 (excl.)
  • unaffected from 5.15.221 to 5.15.* (incl.)
  • unaffected from 6.1.188 to 6.1.* (incl.)
  • 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