Skip to main content
Vulnerability Database/CVE-2026-89847

CVE-2026-89847: Linux Kernel Use-After-Free Vulnerability

CVE-2026-89847 is a use-after-free flaw in the Linux kernel qla2xxx SCSI driver that can cause memory corruption through double completion of async IOCBs. This article covers the technical details, impact, and mitigation.

Published:

CVE-2026-89847 Overview

CVE-2026-89847 is a use-after-free vulnerability in the Linux kernel's qla2xxx SCSI driver for QLogic Fibre Channel host bus adapters. The flaw resides in qla2x00_async_iocb_timeout(), which handles timeout processing for asynchronous I/O Control Blocks (IOCBs). When the timeout path and the response Interrupt Service Routine (ISR) race, both paths can invoke sp->done() on the same Storage Request Block (SRB). The second completion writes into a freed on-stack completion structure belonging to the submitter thread, corrupting kernel memory.

Critical Impact

A race between IOCB timeout handling and response ISR completion leads to a kernel-mode use-after-free, enabling memory corruption with potential privilege escalation or denial of service.

Affected Products

  • Linux kernel builds including the qla2xxx SCSI driver for QLogic Fibre Channel HBAs
  • Multiple stable kernel branches (fixes distributed across eight backport commits)
  • Systems using QLogic 24xx-series and later Fibre Channel adapters

Discovery Timeline

  • 2026-09-16 - CVE-2026-89847 published to NVD
  • 2026-09-16 - Last updated in NVD database

Technical Details for CVE-2026-89847

Vulnerability Analysis

The defect exists in the asynchronous IOCB timeout path within drivers/scsi/qla2xxx. When qla2x00_async_iocb_timeout() is invoked, it calls qla24xx_async_abort_cmd() to abort the outstanding request. If that abort call fails, both the SRB_LOGIN_CMD path and the SRB_CTRL_VP (or default) path scan outstanding_cmds[] for the SRB and then unconditionally call sp->done(sp, QLA_FUNCTION_TIMEOUT) without verifying whether the SRB was actually located and removed.

Concurrently, the response ISR can complete the same handle first. The ISR removes the SRB under qp_lock_ptr and invokes sp->done(), which calls complete(sp->comp). The submitter, qla24xx_control_vp(), wakes from wait_for_completion(), clears sp->comp, drops its reference, and returns. Its on-stack completion structure is reclaimed at that point.

Root Cause

The timer reference keeps the SRB allocation alive across the timeout handler, but it does not preserve the submitter's stack frame. When the timeout path then issues a second sp->done() call to qla_ctrlvp_sp_done(), that function evaluates if (sp->comp) complete(sp->comp). Because the sp->comp pointer was loaded before the submitter's NULL store, complete() writes into the freed stack frame — a classic use-after-free triggered by missing synchronization between two completion paths.

Attack Vector

Triggering the race requires inducing IOCB timeouts against a qla2xxx-managed Fibre Channel adapter while the response ISR simultaneously completes the same handle. In multi-tenant or fabric-attached environments, adversaries able to influence storage fabric behavior or Fibre Channel command timing may provoke the condition. Reliable exploitation would require precise timing to catch the completion window before the submitter's stack is overwritten by unrelated kernel activity.

The corresponding upstream fix tracks whether the timeout path successfully removed the SRB from outstanding_cmds[] and only invokes sp->done() when it did, mirroring the sp_found guard already present in qla24xx_abort_iocb_timeout().

Detection Methods for CVE-2026-89847

Indicators of Compromise

  • Kernel panics or KASAN reports referencing qla_ctrlvp_sp_done, qla2x00_async_iocb_timeout, or complete() on freed memory
  • Unexpected QLA_FUNCTION_TIMEOUT messages in kernel logs correlated with Fibre Channel path instability
  • Stack traces implicating qla24xx_control_vp following storage fabric errors

Detection Strategies

  • Enable KASAN (Kernel Address Sanitizer) on test kernels to surface the use-after-free during storage fault injection
  • Monitor dmesg and journald for qla2xxx abort failures paired with subsequent kernel oops signatures
  • Correlate Fibre Channel link flap events with kernel instability windows on QLogic-equipped hosts

Monitoring Recommendations

  • Forward kernel crash telemetry and kdump artifacts to a centralized logging pipeline for triage
  • Track kernel version inventory across the fleet to identify hosts running unpatched qla2xxx builds
  • Alert on repeated SCSI abort failures on the same HBA, which increase the probability of hitting the race

How to Mitigate CVE-2026-89847

Immediate Actions Required

  • Inventory all hosts running the qla2xxx driver with QLogic Fibre Channel HBAs and prioritize kernel updates
  • Apply the stable kernel patches referenced in the upstream commits before returning affected hosts to production
  • Restrict privileged local access on affected systems to reduce opportunities for race exploitation

Patch Information

The fix has been distributed across multiple stable kernel branches. Apply the vendor-supplied kernel updates that incorporate the following commits: 6e217a9482e, 71a7b6e3c7f, 7257b5e1fb6, 845d4abd92cd, 9fa1d71233a, bb45bc4bd53c, d6d856c722f, and f5b660e0b0d9. The patch adds a tracking flag so sp->done() runs only when the timeout path actually removed the SRB from outstanding_cmds[].

Workarounds

  • If patching must be delayed, unload the qla2xxx module on hosts that do not require QLogic Fibre Channel connectivity
  • Stabilize the storage fabric to minimize IOCB timeouts, reducing the frequency of the race window
  • Blacklist the driver on non-storage nodes via /etc/modprobe.d/ where Fibre Channel is unused

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.