{"id":17344,"date":"2026-09-05T02:31:01","date_gmt":"2026-09-04T18:31:01","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80840"},"modified":"2026-09-05T02:31:01","modified_gmt":"2026-09-04T18:31:01","slug":"cve-2026-80840","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80840","title":{"rendered":"CVE-2026-80840 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nipv6: seg6: clear IPv"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ipv6: seg6: clear IPv4 control block on IPIP decapsulation<\/p>\n<p>End.DX4 and End.DT4 decapsulate an IPv4 packet through<br \/>\ndecap_and_validate() and send it directly to IPv4 routing. The inner<br \/>\npacket therefore bypasses ip_rcv_core(), which normally clears IPCB<br \/>\nbefore IPv4 interprets skb-&gt;cb.<\/p>\n<p>The skb instead retains IP6CB data from the outer packet. IP6CB and<br \/>\nIPCB use the same skb-&gt;cb storage, so IP6CB(skb)-&gt;lastopt overlaps<br \/>\nIPCB(skb)-&gt;opt.optlen and srr, while IP6CB(skb)-&gt;nhoff overlaps rr and<br \/>\nts.<\/p>\n<p>The sender can make the stale optlen byte nonzero with a valid outer<br \/>\nextension-header chain. The reproducers put an eight-byte Destination<br \/>\nOptions header immediately after the 40-byte IPv6 header and before the<br \/>\nSegment Routing Header. ipv6_destopt_rcv() records the sender-controlled<br \/>\nDestination Options offset in both lastopt and nhoff, setting them to<br \/>\n40. On the reproduced little-endian x86-64 kernel, IPv4 therefore sees<br \/>\noptlen = 40 and rr = 40.<\/p>\n<p>Both tcp_v4_save_options() and __ip_options_echo() skip option copying<br \/>\nwhen optlen is zero. Here optlen is 40, so the TCP SYN path allocates<br \/>\nroom for 40 bytes of option data and calls __ip_options_echo(). The<br \/>\nstale rr value makes that function read inner packet byte 41 as the<br \/>\nRecord Route option length. The reproducers set that sender-controlled<br \/>\nbyte to 255, so __ip_options_echo() copies 255 bytes into the 40-byte<br \/>\noption-data area.<\/p>\n<p>Separate End.DX4 and End.DT4 reproducers on the unpatched v7.2-rc5<br \/>\nkernel both produced:<\/p>\n<p>  BUG: KASAN: slab-out-of-bounds in __ip_options_echo()<br \/>\n  Write of size 255<\/p>\n<p>The relevant End.DX4 call path is:<\/p>\n<p>  __ip_options_echo<br \/>\n  tcp_v4_route_req<br \/>\n  tcp_conn_request<br \/>\n  tcp_v4_conn_request<br \/>\n  tcp_rcv_state_process<br \/>\n  tcp_v4_do_rcv<br \/>\n  tcp_v4_rcv<br \/>\n  ip_protocol_deliver_rcu<br \/>\n  ip_local_deliver_finish<br \/>\n  ip_local_deliver<br \/>\n  input_action_end_dx4_finish<br \/>\n  input_action_end_dx4<\/p>\n<p>The relevant End.DT4 call path is:<\/p>\n<p>  __ip_options_echo<br \/>\n  tcp_v4_route_req<br \/>\n  tcp_conn_request<br \/>\n  tcp_v4_conn_request<br \/>\n  tcp_rcv_state_process<br \/>\n  tcp_v4_do_rcv<br \/>\n  tcp_v4_rcv<br \/>\n  ip_protocol_deliver_rcu<br \/>\n  ip_local_deliver_finish<br \/>\n  ip_local_deliver<br \/>\n  input_action_end_dt4<\/p>\n<p>tcp_v4_save_options() is inlined into the tcp_v4_route_req() path, so<br \/>\nit does not appear as a separate frame.<\/p>\n<p>When decap_and_validate() handles IPPROTO_IPIP, save the ingress<br \/>\ninterface from IP6CB, clear IPCB, and restore the saved value. Doing<br \/>\nthis in the common decapsulation path covers End.DX4, End.DT4, and<br \/>\nEnd.DT46&#8217;s IPv4 arm.<\/p>\n<p>Use IP6CB(skb)-&gt;iif rather than skb-&gt;skb_iif. These actions run after<br \/>\nl3mdev processing, which can replace skb_iif with the L3 master;<br \/>\nIP6CB iif still records the receiving interface set at IPv6 ingress.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ipv6: seg6: clear IPv4 control block on IPIP decapsulation<\/p>\n<p>End.DX4 and End.DT4 decapsulate an IPv4 packet through<br \/>\ndecap_and_valida<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17344","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17344","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=17344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}