KernelScan.io

CRITICAL Introduced in 3.1

iscsi LoginPayload OOB

CVE-2026-90011

CVSS 9.1 / 10.0 NVD

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

KernelScan AI9.1CRITICAL

01

In the Linux kernel, the following vulnerability has been resolved: scsi: target: iscsi: Reserve a terminator byte for the login payload iscsi_target_check_login_request() rejects a login PDU whose DataSegmentLength exceeds MAX_KEY_VALUE_PAIRS, but the test is '>' and login->req_buf is allocated with exactly MAX_KEY_VALUE_PAIRS bytes. Since iscsit_get_login_rx() receives payload_length + padding bytes, where padding = ((-payload_length) & 3); any payload_length from 8189 to 8192 fills the whole 8192 byte buffer. The write stays in bounds, but no byte is left for a NUL terminator. The buffer is subsequently consumed as a C string. In the CHAP path chap_check_algorithm() calls kstrdup(a_str), and extract_param() calls strstr(in_buf, pattern) followed by strlen_semi(), none of which take a length. convert_null_to_semi() additionally rewrites every embedded NUL to ';', so even a payload made of well formed NUL separated key=value records is left without a terminator. These walk past the end of the object into adjacent slab memory. It is reachable by an unauthenticated initiator against a portal configured for CHAP; when authentication is not required iscsi_login_zero_tsih_s2() rewrites AuthMethod to None and the CHAP path is never entered. Allocate one extra byte. kzalloc() zeroes it and nothing ever writes to it, as every writer copies to offset 0 for at most MAX_KEY_VALUE_PAIRS bytes, so the buffer is always terminated.

02

Engine v0.6.0

Risk summary

An unauthenticated remote attacker can send a crafted iSCSI login PDU to a target portal configured for CHAP authentication, causing the kernel to read past the end of a login buffer into adjacent slab memory. This can lead to information disclosure or denial of service.

Affecteddrivers/target/iscsi/iscsi_target_login.c (iSCSI target)

Vulnerability analysis

The iSCSI target login path allocates a buffer that fits the maximum allowed key-value payload but leaves no room for a string terminator. When a remote initiator sends a login request whose payload, after protocol padding, fills the entire buffer, subsequent string processing reads past the end of the allocation into adjacent kernel heap memory because no terminator remains and any embedded terminators in the payload are rewritten to semicolons. The fix reserves one additional byte, automatically zeroed, so the buffer is always properly terminated. The flaw is reachable by any unauthenticated network peer that can connect to a target portal configured to require authentication; portals that skip authentication use a different path and are unaffected.

03

BranchIntroducedFixed inPatch commit
5.103.15.10.2705fac79f248c3
6.63.16.6.1576b589ef9d5f6
6.183.16.18.511624bff4c511
7.23.17.2.53ddf3ea291a0
6.123.16.12.110eb9dadf4d552
mainline3.17.3-rc2f4825922d2fb
5.153.15.15.2216ddddcad436d
6.13.16.1.188b19dc17ed963