{"id":17315,"date":"2026-09-05T02:30:59","date_gmt":"2026-09-04T18:30:59","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80811"},"modified":"2026-09-05T02:30:59","modified_gmt":"2026-09-04T18:30:59","slug":"cve-2026-80811","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80811","title":{"rendered":"CVE-2026-80811 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring\/cmd: fix iov"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>io_uring\/cmd: fix iovec leak when the async cmd is not recycled<\/p>\n<p>An io_async_cmd carries an iovec array in -&gt;vec.iovec, allocated when the<br \/>\nvec has to grow and kept across recycling through ctx-&gt;cmd_cache.  On two<br \/>\npaths nothing frees it and io_clean_op()&#8217;s kfree(req-&gt;async_data) drops<br \/>\nthe io_async_cmd without it.<\/p>\n<p>io_req_uring_cleanup() clears the async data flags only when<br \/>\nio_alloc_cache_put() succeeds, and the cache holds IO_ALLOC_CACHE_MAX ==<br \/>\n128 entries, so once it is full the put fails and the vec is left behind.<br \/>\nAn NVMe passthrough workload gets there without doing anything unusual:<br \/>\nnvme_uring_cmd_io() returns -EIOCBQUEUED, so the io_async_cmd stays<br \/>\nattached for the lifetime of the command and the live object count tracks<br \/>\nthe queue depth.  Above 128 the puts start failing.<\/p>\n<p>-&gt;cleanup is the last chance to free an inherited vec, since<br \/>\nio_req_uring_cleanup() returns early for an io-wq issued command and is<br \/>\nnot called at all for one completed without ever being issued.  But<br \/>\nio_clean_op() calls -&gt;cleanup only if REQ_F_NEED_CLEANUP is set, and for<br \/>\nuring_cmd that happens only where the vec has to grow, so a command<br \/>\nreusing a large enough cached vec never sets it.  io_rw_alloc_async() and<br \/>\nio_msg_alloc_async() flag an inherited vec for exactly this reason;<br \/>\nio_uring_cmd_prep() does not.<\/p>\n<p>Flag an inherited vec in io_uring_cmd_prep(), and free the vec when the<br \/>\ncache put fails, as io_req_rw_cleanup() does.<\/p>\n<p>The leak is invisible under KASAN, where io_alloc_cache_vec_kasan() frees<br \/>\nthe vec unconditionally.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>io_uring\/cmd: fix iovec leak when the async cmd is not recycled<\/p>\n<p>An io_async_cmd carries an iovec array in -&gt;vec.iovec, allocated w<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17315","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}