KernelScan.io

HIGH Introduced in 6.6

qla2xxx UnsolCtx Race

CVE-2026-97527

CVSS 8.8 / 10.0 NVD

CVSS:3.1/AV:A/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: Serialize NVMe unsol ctx list with a per-fcport lock The fcport->unsol_ctx_head list is modified from several contexts without a common lock. Entries are added in qla2xxx_process_purls_iocb() from the response queue ISR (under the qpair qp_lock), while they are removed from qla2xxx_process_purls_pkt() (DPC/purex worker), qla_nvme_xmt_ls_rsp() (NVMe-FC transport callback) and qla_nvme_release_lsrsp_cmd_kref() (SRB completion). The qpair qp_lock cannot serialize this per-fcport list since multiqueue adapters add entries through different qpairs, so a concurrent add and delete (or two concurrent deletes) can corrupt the list pointers. Introduce a dedicated per-fcport spinlock, unsol_ctx_lock, initialized in qla2x00_alloc_fcport(), and take it around every list_add_tail()/list_del() on unsol_ctx_head. The add nests under the existing qp_lock; no delete path takes qp_lock, so the lock order is consistent and deadlock free.

02

Engine v0.6.0

Risk summary

An attacker on the same Fibre Channel fabric can send unsolicited NVMe LS requests that trigger concurrent list add and delete operations on a per-fcport context list, corrupting linked-list pointers. This can lead to kernel memory corruption, information disclosure, or a system crash. The vulnerability requires a QLogic Fibre Channel adapter and connectivity to an FC fabric where an attacker can inject frames.

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

Vulnerability analysis

A linked list that tracks unsolicited NVMe link-service contexts for each port is modified from several execution contexts—including an interrupt handler, a worker thread, a transport callback, and command completion—without any common lock. On adapters with multiple queues, entries can be added through different queues at the same time deletions happen on other paths, corrupting the list pointers and leading to memory corruption. The fix adds a dedicated spinlock for each port that serializes every list insertion and removal, nesting consistently under the existing queue lock on the add path and taken independently on all removal paths. The vulnerable code is reached when the host receives unsolicited NVMe link-service requests over the Fibre Channel fabric, so an attacker needs access to the same fabric and a vulnerable adapter must be present, but no privileges on the target system are required.

03

BranchIntroducedFixed inPatch commit
6.126.66.12.112c1ee12eecbab
6.186.66.18.53b211d138cad8
6.66.66.6.1606c71726cdfda
7.26.67.2.74d8ad6bc8cc5
mainline6.67.376da0c43c63e
cip/6.126.66.12.112-cip33c1ee12eecbab

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.112-cip33