CVE Catalog

CVE-2026-89969

CriticalCVSS 9.8
Published: Updated: Translated: NVD NIST

Summary

In the Linux kernel, nvmet_tcp_try_recv_pdu() computes the remaining PDU payload length without bounding it against the size of the queue->pdu buffer. When a header digest is negotiated, a duplicate ICReq packet causes a 4-byte write past the end of the 128-byte buffer, overwriting queue->hdr_digest and queue->data_digest with attacker-controlled data.

Risk Assessment

A remote unauthenticated attacker can corrupt kernel memory adjacent to the receive buffer, potentially leading to code execution or system panic. It affects servers acting as NVMe over TCP targets.

Recommendation

Update the Linux kernel to a version containing the fix that rejects PDUs whose declared length would read past the end of queue->pdu. Restrict access to the NVMe/TCP port to trusted clients.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

In the Linux kernel, the following vulnerability has been resolved: nvmet-tcp: fix out-of-bounds write when receiving an over-long PDU nvmet_tcp_try_recv_pdu() reads a PDU header into the fixed 128-byte queue->pdu union, then computes the remaining payload length as queue->left = hdr->hlen - queue->offset + hdgst; and reads that many more bytes into &queue->pdu + queue->offset, without ever bounding the result against sizeof(queue->pdu). A struct nvme_tcp_icreq_pdu is itself 128 bytes, exactly the size of the union. Once a header digest has been negotiated (hdgst = 4), a second ICReq passes the hlen == nvmet_tcp_pdu_size() check but yields queue->left = 128 - 8 + 4 = 124, so bytes 8..132 are written into the 128-byte buffer -- 4 bytes past its end, over queue->hdr_digest and queue->data_digest. Those bytes are attacker-controlled (an ICReq carries no digest), and the duplicate ICReq is only rejected later, after the overflow. A remote unauthenticated host can thus corrupt kernel memory adjacent to the receive buffer. Reject any PDU whose declared length would read past the end of queue->pdu before the second recv.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS