HIGH
qla2xxx FceTrace UAF
CVE-2026-89853
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
01Description
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Fix FCE trace use-after-free during firmware dump qla2x00_free_fce_trace() freed and cleared ha->fce while holding only fce_mutex. The firmware-dump consumers qla27xx_fwdt_entry_t264() and qla25xx_copy_fce() read ha->fce (NULL check followed by a copy of the buffer) under hardware_lock and never take fce_mutex. A debugfs FCE disable could therefore free the DMA buffer between a dump's NULL check and its copy, resulting in a use-after-free. Unpublish ha->fce under hardware_lock, then release the lock and free the DMA buffer (dma_free_coherent() may sleep). A concurrent dump either completes its check and copy with the buffer still valid, or observes ha->fce == NULL and skips it.
02KernelScan AI Analysis
Risk summary
A local user with access to qla2xxx debugfs can race a firmware dump against FCE trace disable, freeing a DMA buffer mid-copy and causing use-after-free memory corruption. The bug requires a QLogic Fibre Channel HBA and debugfs mounted, limiting exposure to systems with the hardware and debugfs mounted.
Vulnerability analysis
A race condition in the qla2xxx Fibre Channel driver allows a use-after-free when a debugfs operation disables FCE tracing concurrently with a firmware dump. The cleanup path freed the FCE DMA buffer under a mutex that the dump path never acquires, so the dump could read a freed buffer between its NULL check and copy. The fix unpublishes the buffer pointer under the same spinlock the dump path uses, then frees the buffer after releasing the lock, ensuring a concurrent dump either completes safely or skips the buffer. The vulnerable path is reachable locally via debugfs on systems with a QLogic HBA, requiring no special capabilities beyond debugfs access.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 5.10.235 | 5.10.270 | 423487f03e32 |
| 6.6 | 6.6.78 | 6.6.157 | 6003e79148ec |
| 6.18 | — | 6.18.51 | 41ef7edde27a |
| 7.2 | — | 7.2.5 | 53298efcbbb0 |
| mainline | — | 7.3-rc1 | — |
| 5.15 | 5.15.179 | 5.15.221 | 7bd308cd893e |
| 6.13 | 6.13.3 | 6.14 | 8e7a26931b61 |
| 6.12 | 6.12.14 | 6.12.110 | ef9b89f6c922 |
| 6.1 | 6.1.129 | 6.1.188 | edc464a4fc96 |
| cip/6.12 | — | 6.12.111-cip32 | ef9b89f6c922 |