public inbox for [email protected]
 help / color / mirror / Atom feed
This is experimental automated Linux kernel CVE triage research. Results are heuristic and may be incorrect. This site is not an official vendor advisory or severity source.
* [CVE-2026-89857][MODERATE 7.0] scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject
@ 2026-09-16 18:05 AL-KERNEL
  0 siblings, 0 replies; only message in thread
From: AL-KERNEL @ 2026-09-16 18:05 UTC (permalink / raw)
  To: kernel-cve

CVE: CVE-2026-89857
Priority: MODERATE 7.0
AL-KERNEL base severity: MODERATE
KPANIC flag: YES
Patch: scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject
Commit: 7eb618877503edbf17aa65e357a81bda1fc8f163
Upstream patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7eb618877503edbf17aa65e357a81bda1fc8f163
Original CVE announcement: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-89857
Analysis date: Wed, 16 Sep 2026 14:05:38 -0400
ActionableScore: 6
ActionableScore lower bound: 5
Actionable bucket: Actionable Moderate / Strong Important candidate requiring manual review
Manual review required: YES

Summary:
No one-sentence report phrase was found.

======================================================================
ABOUT THIS REPORT
======================================================================

The original Linux kernel CVE announcement for CVE-2026-89857 is available here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-89857

The original announcement does not normally provide a security severity
estimate, CVSS assessment, or enough information to determine whether the
reported kernel bug represents a practically relevant security issue.

This report was generated by AL-KERNEL, an AI-assisted Linux kernel
vulnerability analysis system developed by Alexander Larkin. It combines
an autonomous classifier with LLM-assisted technical analysis and a
separate ActionableScore mechanism.

The purpose of this report is to prioritize Linux kernel CVEs before
manual review, identify cases that require prompt investigation, and
support automatic closure of issues that are unlikely to have meaningful
security impact.

Published priority for this report: MODERATE 7.0
Manual review required: YES

A detailed explanation of the methodology and priority rules is included
at the end of this message.

======================================================================
AL-KERNEL CLASSIFICATION RESULT
======================================================================

CVE-2026-89857	MODERATE	https://www.kernelcve.org/list/?q=CVE-2026-89857 CHECK WITH IMPACT FROM ORIG NN LOW	Maybe valid. Check manually. Hints by AL-KERNEL: The best (paranoid) CVSS is 'AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:H';CWE-362;CWE-667;CWE-662;Other CVSS 'AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H';BEST CVSS score: '7.1';DESCR 'A race condition in the qla2xxx NVMe FC path can occur because qla_nvme_ls_reject_iocb allocates from and advances the request ring without taking the qpair producer lock in two caller paths. Concurrent execution with normal I/O submission on the base request ring can corrupt the ring producer state and may lead to duplicated or dropped commands. For the CVSS the PR:N is used for the paranoid score because an attacker with access to the same Fibre Channel or NVMe FC fabric may not need a local account on the victim host. The issue is adjacent network reachable rather than Internet reachable, because practical triggering requires access to the storage fabric where the affected adapter and NVMe FC traffic are present. Impact includes denial of service and potential storage I/O integrity impact due to lost or duplicated commands. YES REQUIRES MANUAL CHECK.';YES REQUIRES MANUAL CHECK; ,and ActionableScore result is Actionable Moderate / Strong Important candidate requiring manual review (with actual score 6)	YES	LOCK NVME ERRORPATH HARDWARE LINUS  KPANIC INCREASED_TO_MODERATE7_FROM_LOW_BASED_ON_GUESSCVSS_AND_ACTIONABLESCOREHIGHER4 KPANIC INCREASED_TO_HIGH_BASED_ON_ACTIONABLESCOREHIGHERTHAN5 DECREASED_TO_MODERATE7_BASED_ON_FALSEPOSCHECKOFKP	NO	NO	checked

======================================================================
ACTIONABLESCORE ANALYSIS
======================================================================

ActionableScore=6
ActionableScoreLower=5
PrimitiveClass=CLASS_B
RealUAF=NO
HostAdminRequired=NO
NamespaceScopedPrivilege=NO
ImportantCandidate=YES
ManualReview=REQUIRED
AutoDowngradeAllowed=NO

1. ActionableScore

* Raw conservative score: 5
* Conservative score: 5. No floor or cap applied.
* Raw paranoid score: 6
* Paranoid score: 6. No floor or cap applied.
* Final recommended bucket: **Actionable Moderate / Strong Important candidate requiring manual review**::

2. Signal breakdown

Conservative positive signals:

* +1 Adjacent fabric reachable. The vulnerable paths are NVMe-FC / Fibre Channel request handling paths, including an NVMe-FC transport callback and purex work context. An attacker with access to the same storage fabric may be able to trigger LS reject handling without a local account on the victim host.
* +1 Active request-ring corruption candidate. The missing qpair producer lock allows concurrent modification of the base request ring producer state.
* +1 Important storage path. The affected state is in a SCSI / NVMe-FC host adapter submission path, not a diagnostic-only path.
* +1 Integrity impact plausible. The commit explicitly says corrupted producer state can lead to duplicated or dropped commands.
* +1 Availability impact plausible. Dropped commands or corrupted submission-ring state can disrupt storage I/O and cause denial of service at the storage path level.

Paranoid additional signal:

* +1 Stronger adjacent-trigger interpretation. If malicious or malformed NVMe-FC fabric traffic can repeatedly force LS reject paths while normal I/O is active, the externally triggered storage integrity and availability impact is more actionable. This still does not establish arbitrary kernel memory corruption or privilege escalation.

Negative signals:

* 0 No race penalty applied. The issue is a race, but the patch does not establish a narrow one-shot timing window. Repeated fabric events plus ongoing I/O can make attempts repeatable.
* 0 No rare-hardware penalty applied. qla2xxx is hardware-specific, but the evidence does not prove rare or physical-only attacker requirements beyond storage-fabric access.
* 0 No host-admin penalty applied. The evaluated attacker is a fabric-adjacent actor, not a local administrator.
* 0 No extra availability point. The availability consequence is already counted once through storage disruption.
* 0 No confidentiality point. The previous C:L hint is not independently supported by a disclosure path in the supplied patch.
* 0 No UAF or repeated refcount signal. The patch establishes missing synchronization and ring producer corruption, not a stale object lifetime bug.
* 0 No controlled reclaim, arbitrary write, callback control, or LPE signal demonstrated.

3. Reachability analysis

The likely attacker is an adjacent storage-fabric actor able to influence NVMe-FC LS / unsolicited request handling. The vulnerable operations occur in qla_nvme_xmt_ls_rsp on an error path and in qla2xxx_process_purls_pkt from purex work / DPC context. Both can run without the qpair producer lock and can race with normal I/O submission on the base request ring.

This is not Internet-reachable TCP/IP exposure. It is adjacent-network or fabric-reachable exposure in environments where the attacker has access to the same Fibre Channel / NVMe-FC fabric. No local host account is required in that model, so HostAdminRequired=NO. NamespaceScopedPrivilege=NO because Linux namespaces are not the relevant boundary for Fibre Channel fabric access.

Prior host setup is required in the operational sense that the host must have a qla2xxx adapter and NVMe-FC support configured, but that is the vulnerable deployment state, not an attacker privilege requirement. The race requires overlap with normal I/O submission or related request-ring activity, but it is not proven to be a rare one-shot race.

4. Primitive and severity interpretation

The exact primitive is a missing producer lock around request-ring allocation and submission in two qla2xxx NVMe-FC LS reject paths. The helper qla_nvme_ls_reject_iocb allocates IOCBs, advances the request ring, and rings the doorbell, while normal I/O submission may concurrently manipulate the same base qpair state.

This is not a Real UAF. It is not a concrete double release or repeated refcount mutation. It is an active synchronization bug affecting a storage request ring. The demonstrated consequence is corruption of ring producer state, leading to duplicated or dropped commands.

PrimitiveClass=CLASS_B because this is active kernel/device request-ring state corruption with meaningful storage integrity and availability consequences, but no controlled reclaim, arbitrary kernel write, function-pointer influence, or demonstrated privilege escalation is established. ImportantCandidate=YES because active storage submission-ring corruption reachable from an adjacent fabric should not be automatically downgraded as an ordinary Moderate issue. AutoDowngradeAllowed=NO because the unresolved impact on storage I/O integrity and availability would be lost by treating this as a simple crash-only or warning-only bug.

Likely operational severity is Actionable Moderate at minimum, with Strong Important review warranted if product exposure includes untrusted or semi-trusted NVMe-FC initiators on the same fabric.

5. One-sentence report phrase

A race in qla2xxx NVMe-FC LS reject handling can corrupt the base request ring producer state when LS reject submission runs without the qpair lock, allowing a fabric-adjacent attacker to potentially cause duplicated or dropped storage commands and storage I/O denial of service.

6. Manual review recommendation

MANUAL CHECK REQUIRED

Reason: the patch establishes active storage request-ring state corruption with potential command duplication or loss, adjacent-fabric reachability, and meaningful integrity/availability impact, but the exact attacker control and deployment exposure require human validation.

7. Call-site confidence

Call-site confidence: high

======================================================================
UPSTREAM PATCH SUMMARY
======================================================================

Patch: scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject
Commit: 7eb618877503edbf17aa65e357a81bda1fc8f163
Upstream URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7eb618877503edbf17aa65e357a81bda1fc8f163

Commit description:

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.

Fixes: 875386b ("scsi: qla2xxx: Add Unsolicited LS Request and Response Support for NVMe")
Cc: [email protected]
Signed-off-by: Nilesh Javali <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Martin K. Petersen (Oracle) <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

Changed files:
  drivers/scsi/qla2xxx/qla_nvme.c

Diff excerpt:

Not included in this email. See the upstream URL for the full patch.

Full patch:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7eb618877503edbf17aa65e357a81bda1fc8f163

======================================================================
DETAILED REPORT METHODOLOGY
======================================================================

The original Linux kernel CVE announcement for CVE-2026-89857 can be found here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-89857

The original CVE announcement normally does not include a security-level
estimate. In particular, it may not contain a CVSS assessment, an impact
level, or enough information to determine whether the reported bug is a
practically relevant security issue. One purpose of this parallel CVE list
is to provide that missing technical and prioritization information.

The original goal of the AL-KERNEL project was to prioritize Linux kernel
CVE analysis automatically before manual review. The system can also help
identify non-security issues that may be suitable for automatic closure.

This report was generated by AL-KERNEL, an AI-assisted Linux kernel
vulnerability analysis system developed by Alexander Larkin.

The first analysis stage combines an autonomous classifier with additional
LLM-based analysis. The autonomous classifier runs locally on a CPU and is
based on a backpropagation neural network. Together, these mechanisms
produce a technical vulnerability description, identify likely weakness
types, estimate CVSS severity, and provide input for ActionableScore.

Two CVSS estimates are retained because incomplete kernel vulnerability
information often permits more than one defensible interpretation:

  Conservative CVSS vector: AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H
  The Best / paranoid CVSS vector: AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:H
  The Best / paranoid CVSS score: 7.1

The conservative vector represents a lower-impact interpretation.
The Best/paranoid vector intentionally represents a plausible upper-bound
interpretation and should not automatically be treated as demonstrated
real-world impact.

CVSS may also need to be adjusted for a particular Linux deployment,
because actual reachability, privileges, enabled kernel configuration,
hardware, namespaces, exposed device nodes, and other environmental
conditions can differ significantly between systems.

A separate ActionableScore mechanism evaluates practical remediation
urgency. Its analysis may include reachability, attack prerequisites,
subsystem exposure, memory-corruption characteristics, denial-of-service
reliability, and possible confidentiality, integrity, or
privilege-escalation impact.

  Conservative ActionableScore: 5
  Paranoid ActionableScore: 6

The final base severity is taken directly from the second tab-separated
field of the AL-KERNEL classification result. ActionableScore does not
replace or independently override that final AL-KERNEL decision, and
if ActionableScore adjusted impact level of ALKERNEL, then you would see
self-readable flags above like INCREASED_TO_HIGH_BASED_ON_ACTIONABLESCOREHIGHEREQTHAN7.

For an AL-KERNEL result of MODERATE, this report uses the following
additional presentation split:

  ActionableScore below 5   -> MODERATE REGULAR
  ActionableScore 5 or more -> MODERATE 7.0

The distinction between MODERATE REGULAR and MODERATE 7.0 makes it
possible to identify Moderate issues that should receive manual analysis
and fixes before lower-priority MODERATE REGULAR issues. In many cases,
MODERATE REGULAR fixes may wait for a later rebase or routine update.

There is one override in which MODERATE REGULAR becomes MODERATE 7.0
even when the ActionableScore is below 5. When the AL-KERNEL result
contains the KPANIC flag, a MODERATE result is always presented as
MODERATE 7.0. The KPANIC flag selected with few regexps without
usage of AI at all, so it helps to detect cases when Kernel Crash happens
and similar (to filter False-Negative results from the LLM usage).

KPANIC indicates that a reliable kernel crash, kernel panic, or similarly
serious kernel availability impact was identified by the classification
workflow.

AL-KERNEL base severity for this report: MODERATE
KPANIC detected for this report: YES
Published priority for this report (same as in Subject): MODERATE 7.0

These results are intended to support engineering triage. They are
machine-generated estimates, and cases marked for manual review should
be validated by a human security engineer before final disposition.
For more info read docs linked from here: https://kernelcve.org/
(and you can submit you own patch there to generate such a report
for non-existant CVE-id yet).

Note that in many cases this AI tool selects higher severity, than
real is (means you can expect Importants instead of Moderate 7.0 or
Moderates 7.0 instead of regular Moderates). If you see such cases,
please use reply email interface to add additional manual analyses
info to this particular CVE.
And please, please, let me know when you see Lows instead of Importants
or Important instead of Low (because particular for such cases I
need to tune this AI tool to make it better for this one and next similar).
My contact email for such notifications is [email protected] (and both
send reply to CVE record itself too and see "reply" button below for howto reply).

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-09-16 18:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-16 18:05 [CVE-2026-89857][MODERATE 7.0] scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject AL-KERNEL

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox