Description
In the Linux kernel, the following vulnerability has been resolved:

nvme-tcp: reject a read that transferred too few bytes

nvme_tcp_recv_data() completes a request once the current C2HData PDU
has been consumed. Nothing compares the total bytes received against
the length the command asked for: struct nvme_tcp_request has no
receive-side counter, queue->data_remaining is per queue, and
blk_mq_end_request() completes for blk_rq_bytes(rq) unconditionally
with no residual concept anywhere above.

A controller can therefore answer a 4096-byte read with 512 bytes and
have it reported as a complete read; user space then gets 4096 bytes of
which 3584 are whatever was already in the page. I reproduced that with
a test target.

Count the bytes received and refuse to complete a successful read whose
count does not match, at the two NVME_TCP_F_DATA_SUCCESS paths and in
nvme_tcp_process_nvme_cqe(). The success test shifts req->status right
by one, because the driver keeps the wire value there and shifts it on
completion, so the check must see what the completion path will see.
Only REQ_OP_READ is checked, because there the length comes from the
sectors the request covers; a passthrough command is built by its
submitter, which picks both command and buffer, so the kernel has
nothing to compare against.
Published: 2026-09-11
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Information Disclosure
Action: Apply Patch
AI Analysis

Impact

The kernel lacked a check that the actual number of bytes received in an NVMe TCP read matches the requested length. As a result a controller could return a short payload, such as 512 bytes for a requested 4096-byte read, and the kernel would still mark the request as complete. The user space process would then receive a full buffer filled with data that was already on the page, exposing potentially sensitive information that was not part of the intended read.

Affected Systems

Linux kernel versions that include the nvme_tcp driver are affected. The flaw exists in all supported Linux kernel releases that have not yet applied the upstream commit that adds a byte-count check on NVMe TCP read completions.

Risk and Exploitability

The CVSS score of 7.4 indicates a moderate to high severity. The EPSS score indicates a very low exploitation probability of less than 1%, and the vulnerability is not listed in the CISA KEV catalog, suggesting no widely known exploitation yet. Based on the description, it is inferred that attacking this weakness would require control over the NVMe controller or the ability to force the controller to respond with truncated data, which typically implies either a compromised controller or the ability for a malicious actor to read incorrect or leaked data from memory buffers exposed by the kernel.

Generated by OpenCVE AI on September 13, 2026 at 04:29 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to the latest stable release that contains the CV fix or apply the upstream commit directly from the kernel source.
  • After upgrading, run integrity checks on NVMe reads (e.g., using `dd` or a custom test program) to verify that the number of bytes returned matches the requested size.
  • If an immediate kernel upgrade is not feasible, disable NVMe TCP support (e.g., remove the `nvme_tcp` module or use boot‑time parameters) or restrict access to NVMe controllers so that an attacker cannot inject truncated responses.

Generated by OpenCVE AI on September 13, 2026 at 04:29 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sun, 13 Sep 2026 06:45:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H'}

cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N'}


Sat, 12 Sep 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-130
References
Metrics threat_severity

None

cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H'}

threat_severity

Moderate


Fri, 11 Sep 2026 23:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: nvme-tcp: reject a read that transferred too few bytes nvme_tcp_recv_data() completes a request once the current C2HData PDU has been consumed. Nothing compares the total bytes received against the length the command asked for: struct nvme_tcp_request has no receive-side counter, queue->data_remaining is per queue, and blk_mq_end_request() completes for blk_rq_bytes(rq) unconditionally with no residual concept anywhere above. A controller can therefore answer a 4096-byte read with 512 bytes and have it reported as a complete read; user space then gets 4096 bytes of which 3584 are whatever was already in the page. I reproduced that with a test target. Count the bytes received and refuse to complete a successful read whose count does not match, at the two NVME_TCP_F_DATA_SUCCESS paths and in nvme_tcp_process_nvme_cqe(). The success test shifts req->status right by one, because the driver keeps the wire value there and shifts it on completion, so the check must see what the completion path will see. Only REQ_OP_READ is checked, because there the length comes from the sectors the request covers; a passthrough command is built by its submitter, which picks both command and buffer, so the kernel has nothing to compare against.
Title nvme-tcp: reject a read that transferred too few bytes
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-13T06:29:49.083Z

Reserved: 2026-09-11T19:38:34.711Z

Link: CVE-2026-89480

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-11T20:19:29.470

Modified: 2026-09-13T07:17:11.203

Link: CVE-2026-89480

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-11T19:43:35Z

Links: CVE-2026-89480 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-13T04:30:08Z

Weaknesses
  • CWE-130

    Improper Handling of Length Parameter Inconsistency