{"id":17314,"date":"2026-09-05T02:30:59","date_gmt":"2026-09-04T18:30:59","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80810"},"modified":"2026-09-05T02:30:59","modified_gmt":"2026-09-04T18:30:59","slug":"cve-2026-80810","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80810","title":{"rendered":"CVE-2026-80810 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring\/rsrc: fix fo"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>io_uring\/rsrc: fix folio size overflow in io_vec_fill_bvec()<\/p>\n<p>io_vec_fill_bvec() computes the folio size with a plain int 1:<\/p>\n<p>\tunsigned long folio_size = 1 &lt;folio_shift;<\/p>\n<p>imu-&gt;folio_shift is unsigned int and comes from folio_shift() of the<br \/>\nfolio backing the registered buffer, so it can be 32 or more on a 64 bit<br \/>\nkernel. Shifting int 1 that far is undefined, and on x86 and arm64 the<br \/>\ncount is taken modulo 32, so a shift of 34 yields 4 rather than 16G.<br \/>\nEvery other folio_shift shift in this file already uses 1UL.<\/p>\n<p>The result is that the segment estimate and the fill loop disagree.<br \/>\nio_estimate_bvec_size() sizes the bvec array with the real shift:<\/p>\n<p>\tmax_segs += (iov[i].iov_len &gt;&gt; shift) + 2;<\/p>\n<p>so a 1M iovec on a 16G folio is charged 2 segments, while<br \/>\nio_vec_fill_bvec() then walks the same iovec in folio_size chunks of 4<br \/>\nbytes and writes res_bvec[bvec_idx] a quarter of a million times, past<br \/>\nthe end of the array it was given. src_bvec is advanced once per<br \/>\niteration as well, so imu-&gt;bvec is read past its end at the same time.<br \/>\nvalidate_fixed_range() only checks that the range is inside the<br \/>\nregistered buffer and does not bound the segment count.<\/p>\n<p>Reaching it needs a folio with a shift of at least 32, which means a<br \/>\ngigantic hugetlb page: 16G on arm64 with 64K pages, where<br \/>\nCONT_PMD_SHIFT is 34 and hugetlb_add_hstate(CONT_PMD_SHIFT &#8211; PAGE_SHIFT)<br \/>\nregisters that size, and likewise on powerpc. x86_64 tops out at 1G, so<br \/>\na shift of 30, which still fits in int and is unaffected.<\/p>\n<p>Use 1UL, as the rest of the file does.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>io_uring\/rsrc: fix folio size overflow in io_vec_fill_bvec()<\/p>\n<p>io_vec_fill_bvec() computes the folio size with a plain int 1:<\/p>\n<p>\tunsi<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17314","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17314","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=17314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}