{"api_version":"1","generated_at":"2026-11-03T14:39:50+00:00","cve":"CVE-2026-99264","urls":{"html":"https://cve.report/CVE-2026-99264","api":"https://cve.report/api/cve/CVE-2026-99264.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-99264","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-99264"},"summary":{"title":"io_uring/net: don't retry recv on uncommitted buffers","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring/net: don't retry recv on uncommitted buffers\n\nCommit 41b70df5b38b (\"io_uring/net: commit partial buffers on retry\")\ncommits ring provided buffers when a receive is going to be retried after\na partial transfer, so that another request using the same buffer group\ncan't be handed the memory the first one keeps receiving into. It commits\nthe number of bytes received so far. That does the job for a single\nbuffer which is consumed as a whole, but the request hangs on to all it\nhas mapped:\n\n- For a buffer ring with IOU_PBUF_RING_INC only these bytes are consumed.\n  The rest of the buffer stays at the head of the ring.\n- For a bundle only the buffers which hold these bytes are consumed, the\n  others that were peeked stay in the ring.\n\nIn both cases the next receive with that buffer group gets memory that\nthe retried request is still going to write to, and whoever comes last\noverwrites the data of the other. What the retry fills isn't committed at\nall, as the buffer list isn't known any more at that point. So the kernel\nhands it out again later on, while the CQE tells the application that it\nwas used, and for an incremental buffer that it is done with.\n\nThe remainder can't be committed in advance: if the request ends up\nreceiving less, there is no way to tell the application that more was\nconsumed than the CQE accounts for. Complete the request with what it has\ngot instead of retrying it. MSG_WAITALL is no longer honoured for\nreceives into incremental buffers or multi buffer bundles, they can\nreturn a short count, with the request marked as failed like for other\nshort MSG_WAITALL transfers.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-11-03 12:17:33","updated_at":"2026-11-03 12:17:33"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/21cb1770a56a51266ab96d4ed2a3b6979db59694","name":"https://git.kernel.org/stable/c/21cb1770a56a51266ab96d4ed2a3b6979db59694","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0","name":"https://git.kernel.org/stable/c/97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/fc8506eea4498ecba26ef8bf6dbbd74af3dc891d","name":"https://git.kernel.org/stable/c/fc8506eea4498ecba26ef8bf6dbbd74af3dc891d","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-99264","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-99264","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected fe9da1812f8697a38f7e30991d568ec199e16059 21cb1770a56a51266ab96d4ed2a3b6979db59694 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 41b70df5b38bc80967d2e0ed55cc3c3896bba781 fc8506eea4498ecba26ef8bf6dbbd74af3dc891d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 41b70df5b38bc80967d2e0ed55cc3c3896bba781 97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 3b53dc1c641f2884d4750fc25aaf6c36b90db606 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 21a4ddb0f5e933f372808c10b9ac704505751bb1 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 2eb7937b5fc7fcd90eab7bebb0181214b61b9283 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.12.44 6.12.115 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.6.103 6.7 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.15.11 6.16 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.16.2 6.17 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.17","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.17 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.115 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.60 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.14 7.2.* semver","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["io_uring/net.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"21cb1770a56a51266ab96d4ed2a3b6979db59694","status":"affected","version":"fe9da1812f8697a38f7e30991d568ec199e16059","versionType":"git"},{"lessThan":"fc8506eea4498ecba26ef8bf6dbbd74af3dc891d","status":"affected","version":"41b70df5b38bc80967d2e0ed55cc3c3896bba781","versionType":"git"},{"lessThan":"97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0","status":"affected","version":"41b70df5b38bc80967d2e0ed55cc3c3896bba781","versionType":"git"},{"status":"affected","version":"3b53dc1c641f2884d4750fc25aaf6c36b90db606","versionType":"git"},{"status":"affected","version":"21a4ddb0f5e933f372808c10b9ac704505751bb1","versionType":"git"},{"status":"affected","version":"2eb7937b5fc7fcd90eab7bebb0181214b61b9283","versionType":"git"},{"lessThan":"6.12.115","status":"affected","version":"6.12.44","versionType":"semver"},{"lessThan":"6.7","status":"affected","version":"6.6.103","versionType":"semver"},{"lessThan":"6.16","status":"affected","version":"6.15.11","versionType":"semver"},{"lessThan":"6.17","status":"affected","version":"6.16.2","versionType":"semver"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["io_uring/net.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"6.17"},{"lessThan":"6.17","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.115","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.60","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.14","versionType":"semver"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.115","versionStartIncluding":"6.12.44","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.60","versionStartIncluding":"6.17","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.14","versionStartIncluding":"6.17","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.6.103","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15.11","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.16.2","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring/net: don't retry recv on uncommitted buffers\n\nCommit 41b70df5b38b (\"io_uring/net: commit partial buffers on retry\")\ncommits ring provided buffers when a receive is going to be retried after\na partial transfer, so that another request using the same buffer group\ncan't be handed the memory the first one keeps receiving into. It commits\nthe number of bytes received so far. That does the job for a single\nbuffer which is consumed as a whole, but the request hangs on to all it\nhas mapped:\n\n- For a buffer ring with IOU_PBUF_RING_INC only these bytes are consumed.\n  The rest of the buffer stays at the head of the ring.\n- For a bundle only the buffers which hold these bytes are consumed, the\n  others that were peeked stay in the ring.\n\nIn both cases the next receive with that buffer group gets memory that\nthe retried request is still going to write to, and whoever comes last\noverwrites the data of the other. What the retry fills isn't committed at\nall, as the buffer list isn't known any more at that point. So the kernel\nhands it out again later on, while the CQE tells the application that it\nwas used, and for an incremental buffer that it is done with.\n\nThe remainder can't be committed in advance: if the request ends up\nreceiving less, there is no way to tell the application that more was\nconsumed than the CQE accounts for. Complete the request with what it has\ngot instead of retrying it. MSG_WAITALL is no longer honoured for\nreceives into incremental buffers or multi buffer bundles, they can\nreturn a short count, with the request marked as failed like for other\nshort MSG_WAITALL transfers."}],"providerMetadata":{"dateUpdated":"2026-11-03T11:48:16.173Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/21cb1770a56a51266ab96d4ed2a3b6979db59694"},{"url":"https://git.kernel.org/stable/c/fc8506eea4498ecba26ef8bf6dbbd74af3dc891d"},{"url":"https://git.kernel.org/stable/c/97b8dc36ba3cb176b74a7929140aeaeb40d5cdc0"}],"title":"io_uring/net: don't retry recv on uncommitted buffers","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-99264","datePublished":"2026-11-03T11:48:16.173Z","dateReserved":"2026-09-25T10:25:14.404Z","dateUpdated":"2026-11-03T11:48:16.173Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-11-03 12:17:33","lastModifiedDate":"2026-11-03 12:17:33","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"99264","Ordinal":"1","Title":"io_uring/net: don't retry recv on uncommitted buffers","CVE":"CVE-2026-99264","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"99264","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring/net: don't retry recv on uncommitted buffers\n\nCommit 41b70df5b38b (\"io_uring/net: commit partial buffers on retry\")\ncommits ring provided buffers when a receive is going to be retried after\na partial transfer, so that another request using the same buffer group\ncan't be handed the memory the first one keeps receiving into. It commits\nthe number of bytes received so far. That does the job for a single\nbuffer which is consumed as a whole, but the request hangs on to all it\nhas mapped:\n\n- For a buffer ring with IOU_PBUF_RING_INC only these bytes are consumed.\n  The rest of the buffer stays at the head of the ring.\n- For a bundle only the buffers which hold these bytes are consumed, the\n  others that were peeked stay in the ring.\n\nIn both cases the next receive with that buffer group gets memory that\nthe retried request is still going to write to, and whoever comes last\noverwrites the data of the other. What the retry fills isn't committed at\nall, as the buffer list isn't known any more at that point. So the kernel\nhands it out again later on, while the CQE tells the application that it\nwas used, and for an incremental buffer that it is done with.\n\nThe remainder can't be committed in advance: if the request ends up\nreceiving less, there is no way to tell the application that more was\nconsumed than the CQE accounts for. Complete the request with what it has\ngot instead of retrying it. MSG_WAITALL is no longer honoured for\nreceives into incremental buffers or multi buffer bundles, they can\nreturn a short count, with the request marked as failed like for other\nshort MSG_WAITALL transfers.","Type":"Description","Title":"io_uring/net: don't retry recv on uncommitted buffers"}]}}}