{"id":"CVE-2026-99264","kind":"vulnerability","aliases":["CVE-2026-99264"],"related":[],"title":"Linux kernel: io_uring receive retries can hand out the same buffer twice","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.","summary":"In the Linux kernel's io_uring receive path, a partially completed receive could be retried on ring buffers that were not fully committed, so another request may be given memory the retried receive still writes to. The result is that buffer contents can be overwritten and data from one request may be corrupted or mixed with another's.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["io_uring","kernel","linux","runtime","self-hosted"],"not_affected_if":["default-config","no-io-uring"],"how_to_check":"- Check the running kernel version with `uname -r` and compare it against the fixed kernel releases in the sources.\n- Look for applications that use io_uring receive operations with incremental provided buffer rings (IOU_PBUF_RING_INC) or multi-buffer bundles.","fix":null,"status":"open","published_at":"2026-11-03T12:17:33+00:00","first_seen_at":"2026-11-03T12:20:40+00:00","triaged_at":"2026-11-03T12:22:43+00:00","updated_at":"2026-11-03T12:22:43+00:00","category":"runtime","confidence":0.5,"triage":{"at":"2026-11-03T12:22:43Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"local","title":"Linux kernel: io_uring receive retries can hand out the same buffer twice","impact":"medium","summary":"In the Linux kernel's io_uring receive path, a partially completed receive could be retried on ring buffers that were not fully committed, so another request may be given memory the retried receive still writes to. The result is that buffer contents can be overwritten and data from one request may be corrupted or mixed with another's.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["linux","kernel","io_uring","self-hosted"],"confidence":0.5,"fix_status":"unknown","needs_auth":"unknown","worst_case":"buffer data overwritten or mixed between concurrent requests","analyst_note":"Find the affected and fixed kernel version ranges from the NVD entry and the upstream stable commits for 41b70df5b38b and its fix.","how_to_check":"- Check the running kernel version with `uname -r` and compare it against the fixed kernel releases in the sources.\n- Look for applications that use io_uring receive operations with incremental provided buffer rings (IOU_PBUF_RING_INC) or multi-buffer bundles.\n- unknown for the exact affected version ranges, as the sources do not list them.","plain_action":"","needs_analyst":true,"not_affected_if":["no-io-uring","default-config"],"who_is_affected":"Systems running a Linux kernel with io_uring receive operations that use incremental provided buffer rings or multi-buffer bundles are the ones at risk. The sources do not list affected kernel versions, and systems that do not use io_uring receives with these buffer types are not described as exposed.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000763,"input_tokens":4572,"output_tokens":612,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':15A,18A '-99264':16A,19A '41b70df5b38b':106C 'account':343C 'advanc':320C 'anoth':53B,85B,132C 'applic':298C,335C 'buffer':12A,46B,69B,104C,111C,117C,137C,167C,186C,202C,215C,239C,274C,307C,367C,370C 'bundl':212C,371C 'byte':156C,195C,219C 'case':233C 'come':255C 'commit':51B,105C,109C,114C,152C,269C,318C 'complet':39B,345C 'consum':170C,197C,221C,339C 'content':70B 'corrupt':81B 'could':41B 'count':377C 'cqe':295C,342C 'cve':14A,17A 'data':75B,259C 'done':311C 'end':324C 'fail':383C 'far':159C 'fill':266C 'first':146C 'follow':91C 'fulli':50B 'get':241C 'given':57B 'go':122C,249C 'got':352C 'group':138C,240C 'hand':8A,142C,287C 'hang':177C 'head':206C 'hold':217C 'honour':362C 'host':27B 'inc':192C 'increment':306C,366C 'instead':353C 'io':3A,20B,33B,96C,107C 'iou':189C 'isn':267C,276C 'job':163C 'keep':148C 'kernel':2A,22B,31B,89C,286C 'known':278C 'last':256C 'later':291C 'less':327C 'like':384C 'linux':1A,23B,30B,88C 'list':275C 'longer':361C 'map':183C 'mark':381C 'may':55B,79B 'memori':58B,144C,242C 'mix':83B 'msg':357C,388C 'multi':369C 'next':235C 'number':154C 'one':77B,147C 'other':223C 'overwrit':257C 'overwritten':73B 'partial':38B,110C,128C 'path':36B 'pbuf':190C 'peek':226C 'point':283C 'provid':116C 'receiv':5A,35B,40B,61B,120C,149C,157C,236C,326C,364C 'recv':101C 'remaind':314C 'request':54B,78B,133C,176C,246C,323C,347C,380C 'resolv':95C 'rest':199C 'result':66B 'retri':6A,43B,60B,100C,113C,125C,245C,265C,355C 'return':374C 'ring':45B,115C,187C,191C,209C,230C 'runtim':24B 'self':26B 'self-host':25B 'short':376C,387C 'singl':166C 'stay':203C,227C 'still':62B,248C 'tell':296C,333C 'transfer':129C,390C 'twice':13A 'uncommit':103C 'ure':4A,21B,34B 'uring/net':97C,108C 'use':134C,302C 'vulner':92C 'waital':358C,389C 'way':331C 'whoever':254C 'whole':173C 'write':63B,251C","nicknames":[],"mitigations":[],"who_affected":"Systems running a Linux kernel with io_uring receive operations that use incremental provided buffer rings or multi-buffer bundles are the ones at risk. The sources do not list affected kernel versions, and systems that do not use io_uring receives with these buffer types are not described as exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["iouring","kernel","linux","runtime","selfhosted","unknown"],"first_public_at":"2026-11-03T12:17:33+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-99264","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-99264","severity":null,"published_at":"2026-11-03T12:17:33+00:00","modified_at":"2026-11-03T12:17:33+00:00","first_seen_at":"2026-11-03T12:20:40+00:00","fetched_at":"2026-11-03T12:20:40+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}