{"id":11218,"date":"2026-09-04T18:51:45","date_gmt":"2026-09-04T10:51:45","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74612"},"modified":"2026-09-04T18:51:45","modified_gmt":"2026-09-04T10:51:45","slug":"cve-2026-74612","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74612","title":{"rendered":"CVE-2026-74612 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nveth: fix skb length"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>veth: fix skb length accounting after XDP frag adjustment<\/p>\n<p>veth exposes non-linear skb fragments through an xdp_buff. If an XDP<br \/>\nprogram adjusts the fragment area, veth_xdp_rcv_skb() copies<br \/>\nxdp_frags_size back to skb-&gt;data_len but leaves skb-&gt;len containing the<br \/>\nold fragment contribution.<\/p>\n<p>After a fragment shrink, this makes skb_headlen() larger than the actual<br \/>\nlinear area. In the reproduced UDP receive path, __skb_datagram_iter()<br \/>\ncopied 1024 bytes past the actual linear tail to userspace, starting at<br \/>\nstruct skb_shared_info. The copied bytes included the affected skb&#8217;s<br \/>\nnr_frags, xdp_frags_size, and a kernel pointer from<br \/>\nskb_shinfo(skb)-&gt;frags[0]. Real packet data was displaced by the same<br \/>\namount and truncated at the end.<\/p>\n<p>Subtract the old data_len before replacing it and add the new data_len<br \/>\nafterwards, keeping skb-&gt;len and skb-&gt;data_len synchronized.<\/p>\n<p>Additionally, bpf_xdp_pull_data() can advance data_end while leaving<br \/>\nfrags present. The skb is then still non-linear, so the old<br \/>\n__skb_put(skb, off) triggers SKB_LINEAR_ASSERT().<\/p>\n<p>Use skb_set_tail_pointer() and update skb-&gt;len explicitly instead,<br \/>\nfollowing bpf_prog_run_generic_xdp(). Unlike __skb_put(),<br \/>\nskb_set_tail_pointer() does not require a linear skb.<\/p>\n<p>A 60000-byte UDP datagram on a veth pair with MTU 64000 was shortened by<br \/>\n1024 bytes from its fragment area. Before the fix, all 10 runs produced<br \/>\ncorrupted payloads. After the fix, all 10 runs matched the expected<br \/>\npayload exactly. A forced-tailroom reproducer also exercises<br \/>\nbpf_xdp_pull_data() with frags still present; the old code triggers<br \/>\nSKB_LINEAR_ASSERT(), while this fix passes 10\/10 runs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>veth: fix skb length accounting after XDP frag adjustment<\/p>\n<p>veth exposes non-linear skb fragments through an xdp_buff. If an XDP<br \/>\npro<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-11218","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/11218","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=11218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}