{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-99154","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-25T10:25:14.397Z","datePublished":"2026-10-28T10:35:08.968Z","dateUpdated":"2026-10-31T12:44:09.854Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-10-31T12:44:09.854Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nscsi: libiscsi: Reject a negative task index from parse_pdu_itt\n\nA transport that implements parse_pdu_itt hands libiscsi an index taken\nfrom the PDU, and both lookups bound it from above only:\n\n      if (i >= session->cmds_max)\n\ni and cmds_max are both int, so a negative index passes and\nsession->cmds[i] is read from before the array.\n\nbe2iscsi produces one. beiscsi_parse_pdu() assigns the raw tag,\n\n      *index = (int)itt;\n\nand beiscsi_complete_pdu() forwards an unsolicited NOP-In from the\nhardware async ring without replacing its ITT, so the value is the\ntarget's. It also reports the session's own age rather than the one in\nthe tag, which leaves the age comparison in iscsi_verify_itt() with\nnothing to reject.\n\nBound the index from below in both lookups."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":9.8,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"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.\nAC: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.\nPR: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.\nUI: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.\nS: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.\nC: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.\nI: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.\nA: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."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/scsi/libiscsi.c"],"versions":[{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"24bd9ba431b2daa263f3551bc2f09f6b4487f5ae","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"f8fabe1fe044f86abc42194b8f86dfd70212115f","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"e896a97f336c5edfc13066b57ed431cb3f64e68c","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"6200fb2de579f268742a77b0f3d823cb0a8b1947","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"0eb06ebbbecb122f0df9a1f7f623f5255be741ed","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"6cadfa6f1f5896632d4223d3b7addb2a29fea74e","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"35b60549a956237488c89a2d85352e026e7d55b7","status":"affected","versionType":"git"},{"version":"bfead3b2cb4607c71831423c3ee97d22cd0c9dcb","lessThan":"8ee2a09a1dbb257c9e828ad2497f8e4832dfb142","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/scsi/libiscsi.c"],"versions":[{"version":"2.6.33","status":"affected"},{"version":"0","lessThan":"2.6.33","status":"unaffected","versionType":"semver"},{"version":"5.10.273","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.224","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.191","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.161","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.115","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.59","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.13","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"5.10.273"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"5.15.224"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"6.6.161"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"6.12.115"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"6.18.59"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"7.2.13"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.33","versionEndExcluding":"7.3"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/24bd9ba431b2daa263f3551bc2f09f6b4487f5ae"},{"url":"https://git.kernel.org/stable/c/f8fabe1fe044f86abc42194b8f86dfd70212115f"},{"url":"https://git.kernel.org/stable/c/e896a97f336c5edfc13066b57ed431cb3f64e68c"},{"url":"https://git.kernel.org/stable/c/6200fb2de579f268742a77b0f3d823cb0a8b1947"},{"url":"https://git.kernel.org/stable/c/0eb06ebbbecb122f0df9a1f7f623f5255be741ed"},{"url":"https://git.kernel.org/stable/c/6cadfa6f1f5896632d4223d3b7addb2a29fea74e"},{"url":"https://git.kernel.org/stable/c/35b60549a956237488c89a2d85352e026e7d55b7"},{"url":"https://git.kernel.org/stable/c/8ee2a09a1dbb257c9e828ad2497f8e4832dfb142"}],"title":"scsi: libiscsi: Reject a negative task index from parse_pdu_itt","x_generator":{"engine":"bippy-1.2.0"}}}}