CVE-2026-99154 PUBLISHED

scsi: libiscsi: Reject a negative task index from parse_pdu_itt

Assigner: Linux
Reserved: 25.09.2026 Published: 28.10.2026 Updated: 31.10.2026

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

scsi: libiscsi: Reject a negative task index from parse_pdu_itt

A transport that implements parse_pdu_itt hands libiscsi an index taken from the PDU, and both lookups bound it from above only:

<pre> if (i >= session->cmds_max) </pre>

i and cmds_max are both int, so a negative index passes and session->cmds[i] is read from before the array.

be2iscsi produces one. beiscsi_parse_pdu() assigns the raw tag,

<pre> *index = (int)itt; </pre>

and beiscsi_complete_pdu() forwards an unsolicited NOP-In from the hardware async ring without replacing its ITT, so the value is the target's. It also reports the session's own age rather than the one in the tag, which leaves the age comparison in iscsi_verify_itt() with nothing to reject.

Bound the index from below in both lookups.

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 9.8

AV:N - A target-supplied iSCSI NOP-In enters through be_isr_msix()/be_iopoll() and flows via beiscsi_process_cq() and beiscsi_complete_pdu() to patched iscsi_verify_itt()/iscsi_itt_to_task(); beiscsi_parse_pdu() derives the negative index directly from the wire ITT. AC:L - On an affected be2iscsi connection, one NOP-In whose raw ITT casts negative deterministically passes the old upper-only checks. The sender chooses the ITT, and no race, timing window, or uncontrollable state is required. PR:N - The remote iSCSI target needs no host privilege: beiscsi_complete_pdu() accepts the hardware-ring NOP-In and __iscsi_complete_pdu() calls iscsi_verify_itt() without a credential or session-state gate. CAP_SYS_ADMIN governs local netlink setup, not this receive path. UI:N - The IRQ-poll path automatically processes the target's NOP-In through beiscsi_hdq_process_compl() and beiscsi_hdl_fwd_pdu(); no user must open a file, issue I/O, or approve the malformed PDU. S:U - The invalid session->cmds lookup and subsequent iscsi_task and be2iscsi resource corruption occur within the initiator host kernel; no VM, IOMMU, or other security-authority boundary is crossed. C:H - beiscsi_parse_pdu() supplies attacker-controlled signed i to iscsi_itt_to_task(), permitting a pointer-sized read at an attacker-selected offset before session->cmds. The loaded pointer is then dereferenced as an iscsi_task, making this an unbounded kernel-memory read and type-confusion primitive. I:H - iscsi_pool_init() places its original task-pointer table immediately before session->cmds, so negative indices can select real unrelated tasks. iscsi_complete_task() then changes task state/refcounts and can invoke beiscsi_cleanup_task() to free live DMA, WRB, and SGL resources. A:H - A farther-negative index can fault while reading session->cmds[i], while an index resolving to a never-used task reaches iscsi_nop_out_rsp() with task->conn NULL. A single target-supplied NOP-In can therefore oops or panic the kernel.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 24bd9ba431b2daa263f3551bc2f09f6b4487f5ae (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to f8fabe1fe044f86abc42194b8f86dfd70212115f (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to e896a97f336c5edfc13066b57ed431cb3f64e68c (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 6200fb2de579f268742a77b0f3d823cb0a8b1947 (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 0eb06ebbbecb122f0df9a1f7f623f5255be741ed (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 6cadfa6f1f5896632d4223d3b7addb2a29fea74e (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 35b60549a956237488c89a2d85352e026e7d55b7 (excl.)
  • affected from bfead3b2cb4607c71831423c3ee97d22cd0c9dcb to 8ee2a09a1dbb257c9e828ad2497f8e4832dfb142 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 2.6.33 is affected
  • unaffected from 0 to 2.6.33 (excl.)
  • unaffected from 5.10.273 to 5.10.* (incl.)
  • unaffected from 5.15.224 to 5.15.* (incl.)
  • unaffected from 6.1.191 to 6.1.* (incl.)
  • unaffected from 6.6.161 to 6.6.* (incl.)
  • unaffected from 6.12.115 to 6.12.* (incl.)
  • unaffected from 6.18.59 to 6.18.* (incl.)
  • unaffected from 7.2.13 to 7.2.* (incl.)
  • unaffected from 7.3 to * (incl.)

References