---
id: "CVE-2026-99154"
kind: "vulnerability"
aliases: ["CVE-2026-99154"]
title: "Linux kernel iSCSI: negative task index lets a target read out of bounds"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["be2iscsi", "iscsi", "kernel", "linux", "package", "self-hosted"]
not_affected_if: ["no-be2iscsi-hardware", "no-iscsi"]
published_at: "2026-10-28T11:17:35+00:00"
first_seen_at: "2026-10-28T11:32:36+00:00"
updated_at: "2026-10-28T11:35:53+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99154", "first_seen_at": "2026-10-28T11:32:36+00:00"}]
---

# Linux kernel iSCSI: negative task index lets a target read out of bounds

The Linux kernel's libiscsi accepted a negative task index from a transport's PDU parser, so the driver read session command memory before the array. A target sending a crafted unsolicited NOP-In on a be2iscsi adapter can trigger this out-of-bounds read.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Run `uname -r` and compare against the fixed kernel builds in your distribution's advisory
- Check whether the `be2iscsi` module is loaded with `lsmod | grep be2iscsi`
- unknown for the exact affected version range, as the sources do not say

## Fix

- Update the Linux kernel to a build that includes the libiscsi fix (version unknown from the sources)
- Apply your distribution's kernel security update and reboot

## Timeline

- 2026-10-28T11:32:36+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99154

## From the sources

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:

      if (i >= session->cmds_max)

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,

      *index = (int)itt;

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
