In the Linux kernel, the following vulnerability has been resolved: IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done() computes the login request payload length as wc->byte_len minus ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int. A remote iSER initiator can post a login Send work request carrying fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows and login_req_len becomes negative. isert_rx_login_req() then reads that negative length back into a signed int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the min() is signed it keeps the negative value; the value is then passed as the memcpy() length and sign-extended to a multi-gigabyte size_t. The copy into the 8192-byte login->req_buf runs far out of bounds and faults, crashing the target node. The login phase precedes iSCSI authentication, so no credentials are required to reach this path. Reject any login PDU shorter than ISER_HEADERS_LEN before the subtraction, mirroring the existing early return on a failed work completion, so login_req_len can never go negative. The upper bound was already safe: a posted login buffer cannot deliver more than ISER_RX_PAYLOAD_SIZE, so the difference stays at or below MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing lower bound needs to be added.
The isert_login_recv_done() function calculates the length of the login request payload as the difference of wc->byte_len minus ISER_HEADERS_LEN (76 bytes) without checking the lower bound, and the result is stored in a signed int variable. A remote iSER initiator can send a login request (Send work request) containing fewer than 76 bytes, causing arithmetic underflow and obtaining a negative login_req_len value. The isert_rx_login_req() function then passes this negative value to min(), which when comparing signed types preserves the negative value, and this in turn is passed as a length argument to memcpy(). When sign-extended to size_t, the negative value becomes a multi-gigabyte unsigned number, causing a write far beyond the 8192-byte login->req_buf buffer boundary and resulting in a target node fault.
An unauthenticated remote attacker can remotely cause a crash of the iSCSI/iSER target node, resulting in denial of service (DoS). Due to uncontrolled buffer overflow, attempts at further exploitation for code execution (RCE) cannot be excluded.
Patches available in the references on kernel.org should be applied for the appropriate stable branches of the Linux kernel. The fix rejects any login PDU request shorter than ISER_HEADERS_LEN before performing the subtraction, eliminating the possibility of obtaining a negative login_req_len value. Until the patch is implemented, it is recommended to restrict network access to iSER/iSCSI ports exclusively to trusted hosts using a firewall.
Linux kernel with enabled IB/isert driver (drivers/infiniband/ulp/isert/ib_isert.c) β versions indicated in manufacturer references (patches available for many stable kernel branches).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H