CVE-2026-89969

nvmet-tcp: fix out-of-bounds write when receiving an over-long PDU

State
Published
Severity
9.8 Critical
Published
Sep 16, 2026
Updated
Oct 19, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

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.

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before a3f0bcfbaf3312a5754d1ce020a07d394669eb25Affected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before 4f84d42c53c49557fb1ef285c683b0a81b576c74Affected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before 58dc6035b79c4c73c0cbf9ec9f68a7f117b2b3e6Affected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before cf5f39d2b58f97e0cd1829c4a6aeef17f1607ccaAffected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before 3a385e0c39efbe34db8edd95900c123113ae3450Affected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before dbc4acbdb3ca8c81441368ad7409b8f77d4de8f6Affected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before d95d342bc0ea82dc79e6362b2f1f997431750e4cAffected
  • 872d26a391da92ed8f0c0f5cb5fef428067b7f30 to before 14cc5a7e77731497d5bea70f3bb05df7eda982e4Affected
LinuxLinux
  • 5.0Affected
  • before 5.0Not affected
  • 5.10.270 through 5.10.*Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.110 through 6.12.*Not affected
  • 6.18.51 through 6.18.*Not affected
  • 7.2.5 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.