# CVE-2026-99264: io_uring/net: don't retry recv on uncommitted buffers

Status: published. Published: 2026-11-03. Updated: 2026-11-03.

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

io_uring/net: don't retry recv on uncommitted buffers

Commit 41b70df5b38b ("io_uring/net: commit partial buffers on retry")
commits ring provided buffers when a receive is going to be retried after
a partial transfer, so that another request using the same buffer group
can't be handed the memory the first one keeps receiving into. It commits
the number of bytes received so far. That does the job for a single
buffer which is consumed as a whole, but the request hangs on to all it
has mapped:

- For a buffer ring with IOU_PBUF_RING_INC only these bytes are consumed.
  The rest of the buffer stays at the head of the ring.
- For a bundle only the buffers which hold these bytes are consumed, the
  others that were peeked stay in the ring.

In both cases the next receive with that buffer group gets memory that
the retried request is still going to write to, and whoever comes last
overwrites the data of the other. What the retry fills isn't committed at
all, as the buffer list isn't known any more at that point. So the kernel
hands it out again later on, while the CQE tells the application that it
was used, and for an incremental buffer that it is done with.

The remainder can't be committed in advance: if the request ends up
receiving less, there is no way to tell the application that more was
consumed than the CQE accounts for. Complete the request with what it has
got instead of retrying it. MSG_WAITALL is no longer honoured for
receives into incremental buffers or multi buffer bundles, they can
return a short count, with the request marked as failed like for other
short MSG_WAITALL transfers.

## Remediation

No remediation reported in collected sources

## Affected products and versions

- Linux / Linux: ≥ fe9da1812f8697a38f7e30991d568ec199e16059; < 21cb1770a56a51266ab96d4ed2a3b6979db59694 (affected, git); ≥ 41b70df5b38bc80967d2e0ed55cc3c3896bba781; < fc8506eea4498ecba26ef8bf6dbbd74af3dc891d (affected, git); ≥ 41b70df5b38bc80967d2e0ed55cc3c3896bba781; < 97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0 (affected, git); 3b53dc1c641f2884d4750fc25aaf6c36b90db606 (affected, git); 21a4ddb0f5e933f372808c10b9ac704505751bb1 (affected, git); 2eb7937b5fc7fcd90eab7bebb0181214b61b9283 (affected, git); ≥ 6.12.44; < 6.12.115 (affected, semver); ≥ 6.6.103; < 6.7 (affected, semver); ≥ 6.15.11; < 6.16 (affected, semver); ≥ 6.16.2; < 6.17 (affected, semver). Source: CNA: Linux
- Linux / Linux: 6.17 (affected); ≥ 0; < 6.17 (unaffected, semver); ≥ 6.12.115; ≤ 6.12.* (unaffected, semver); ≥ 6.18.60; ≤ 6.18.* (unaffected, semver); ≥ 7.2.14; ≤ 7.2.* (unaffected, semver). Source: CNA: Linux

## Severity and prioritization

- CISA KEV: No listing in collected sources

- EPSS: Not available

- SSVC: Not available

- Weaknesses: Not reported

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://git.kernel.org/stable/c/21cb1770a56a51266ab96d4ed2a3b6979db59694 (CNA: Linux)

- https://git.kernel.org/stable/c/fc8506eea4498ecba26ef8bf6dbbd74af3dc891d (CNA: Linux)

- https://git.kernel.org/stable/c/97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0 (CNA: Linux)

## Provenance

- CNA: Linux: https://www.cve.org/CVERecord?id=CVE-2026-99264; retrieved 2026-11-03; source updated 2026-11-03

Revision: 0c16d603c9c53e05466e1f46be98662f3852f405a5a20657e4b4dff5bdbe9110

Canonical: https://y2.dev/cve/CVE-2026-99264

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.