CVE-2026-89856

scsi: qla2xxx: Clamp MSI-X derived queue counts to avoid truncation

State
Published
Severity
8.4 High
Published
Sep 16, 2026
Updated
Oct 19, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

scsi: qla2xxx: Clamp MSI-X derived queue counts to avoid truncation

ha->msix_count is u16, but ha->max_req_queues, ha->max_rsp_queues and ha->max_qpairs are u8. Deriving the queue count as "ha->max_req_queues = ha->msix_count - 1" therefore truncates: a board (or a misconfigured/malicious hot-plugged device) advertising 257 MSI-X vectors yields msix_count - 1 == 256, which truncates to 0. An MSI-X count of 1 zeroes it as well, and in target mode the subsequent "ha->max_req_queues--" then underflows 0 to 255.

When the count is 0, qla2x00_alloc_queues() calls kzalloc_objs(struct req_que *, 0), which returns ZERO_SIZE_PTR. That is not NULL, so the allocation check passes and the following "ha->req_q_map[0] = req" dereferences ZERO_SIZE_PTR, corrupting memory or crashing the kernel.

Add qla_calc_queue_count() to clamp the derived value into [1, QLA_MAX_QUEUES - 1] so it always fits in u8 and is never zero, and use it at all three derivation sites (qla25xx_iospace_config(), qla83xx_iospace_config() and qla24xx_enable_msix()). Also guard the target-mode decrement so it cannot reintroduce a zero (which would in turn underflow max_qpairs).

Scores

CVSSScoreVectorSource
3.18.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • d74595278f4ab192af66d9e60a9087464638beee to before cf623d32761b00f221a9cfded3303d56e84b429dAffected
  • d74595278f4ab192af66d9e60a9087464638beee to before 9eeddbeaa896f39d943644b16d83a6ad0ceab255Affected
  • d74595278f4ab192af66d9e60a9087464638beee to before 802068b9b683b8008fcccbf6e9ad133e597ec87cAffected
  • d74595278f4ab192af66d9e60a9087464638beee to before e80adfeac61b4d5db7ffe0f5af43999c33a4145eAffected
  • d74595278f4ab192af66d9e60a9087464638beee to before 2efe50b2da829909023de4a2eb87badb7cfa53ccAffected
  • d74595278f4ab192af66d9e60a9087464638beee to before 7a448f5ed0b283dbde4e9183dd1e98c221432dabAffected
  • d74595278f4ab192af66d9e60a9087464638beee to before 33c77254e6e91f37c72c7fad4051777452b10de8Affected
  • d74595278f4ab192af66d9e60a9087464638beee to before ebfd35c64433821bd5619a6d07ccc2df8b5b1de3Affected
LinuxLinux
  • 4.10Affected
  • before 4.10Not affected
  • 5.10.270 through 5.10.*Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.110 through 6.12.*Not affected
  • 6.18.51 through 6.18.*Not affected
  • 7.2.5 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.