{"id":12303,"date":"2026-09-04T18:54:15","date_gmt":"2026-09-04T10:54:15","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80612"},"modified":"2026-09-04T18:54:15","modified_gmt":"2026-09-04T10:54:15","slug":"cve-2026-80612","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80612","title":{"rendered":"CVE-2026-80612 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet: lwtunnel: Drop s"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: lwtunnel: Drop skb metadata before LWT encapsulation<\/p>\n<p>skb metadata is meant for passing information between XDP and TC. It lives<br \/>\nin the skb headroom, immediately before skb-&gt;data. LWT programs cannot<br \/>\naccess the __sk_buff-&gt;data_meta pseudo-pointer to metadata.<\/p>\n<p>However, LWT encapsulation prepends outer headers, moving skb-&gt;data back<br \/>\nover the headroom where the metadata sits. On an RX-originated (forwarded)<br \/>\npacket that still carries XDP metadata this goes wrong in two different<br \/>\nways, depending on the encap type:<\/p>\n<p>1. Non-BPF LWT encaps (mpls, seg6, ioam6 &#8230;) call skb_push()\/skb_pull()<br \/>\n   and silently overwrite the metadata that sits in the headroom.<\/p>\n<p>2) BPF LWT xmit calls bpf_skb_change_head(), which uses skb_data_move().<br \/>\n   That helper expects metadata immediately before skb-&gt;data. But since<br \/>\n   the IP output path runs LWT xmit before neighbour output has built<br \/>\n   the outgoing L2 header, for forwarded packets skb-&gt;data points at the<br \/>\n   L3 header while skb_mac_header() still points at the old L2 header.<br \/>\n   skb_data_move() sees metadata ending at skb_mac_header(), not before<br \/>\n   skb-&gt;data, warns and clears metadata:<\/p>\n<p>  WARNING: CPU: 21 PID: 454557 at include\/linux\/skbuff.h:4609 skb_data_move+0x47\/0x90<br \/>\n  CPU: 21 UID: 0 PID: 454557 Comm: napi\/iconduit-g Tainted: G           O        6.18.21 #1<br \/>\n  RIP: 0010:skb_data_move+0x47\/0x90<br \/>\n  Call Trace:<\/p>\n<p>   bpf_skb_change_head+0xe6\/0x1a0<br \/>\n   bpf_prog_&#8230;+0x213\/0x2e3<br \/>\n   run_lwt_bpf.isra.0+0x1d3\/0x360<br \/>\n   bpf_xmit+0x46\/0xe0<br \/>\n   lwtunnel_xmit+0xa1\/0xf0<br \/>\n   ip_finish_output2+0x1e7\/0x5e0<br \/>\n   ip_output+0x63\/0x100<br \/>\n   __netif_receive_skb_one_core+0x85\/0xa0<br \/>\n   process_backlog+0x9c\/0x150<br \/>\n   __napi_poll+0x2b\/0x190<br \/>\n   net_rx_action+0x40b\/0x7f0<br \/>\n   handle_softirqs+0xd2\/0x270<br \/>\n   do_softirq+0x3f\/0x60<\/p>\n<p>That is what happens, as for how to fix it &#8211; a received packet that<br \/>\ncarries metadata can reach an encap through any of the three LWT<br \/>\nredirect modes:<\/p>\n<p>  LWTUNNEL_STATE_INPUT_REDIRECT<br \/>\n   ip6_rcv_finish<br \/>\n     dst_input<br \/>\n       lwtunnel_input<\/p>\n<p>  LWTUNNEL_STATE_OUTPUT_REDIRECT<br \/>\n   ip6_rcv_finish<br \/>\n     dst_input<br \/>\n       ip6_forward<br \/>\n         ip6_forward_finish<br \/>\n           dst_output<br \/>\n             lwtunnel_output<\/p>\n<p>  LWTUNNEL_STATE_XMIT_REDIRECT<br \/>\n   ip6_rcv_finish<br \/>\n     dst_input<br \/>\n       ip6_forward<br \/>\n         ip6_forward_finish<br \/>\n           dst_output<br \/>\n             ip6_output<br \/>\n               ip6_finish_output<br \/>\n                 ip6_finish_output2<br \/>\n                   lwtunnel_xmit<\/p>\n<p>Every encap funnels through the three LWT dispatch helpers, so drop the<br \/>\nmetadata there, right before handing the skb to the encap op. This<br \/>\nsingle chokepoint covers all encap types and all three redirect modes:<\/p>\n<p>  &#8211; lwtunnel_input():  seg6, rpl, ila, seg6_local<br \/>\n  &#8211; lwtunnel_output(): ioam6<br \/>\n  &#8211; lwtunnel_xmit():   mpls, LWT BPF xmit<\/p>\n<p>Alternatively, we could clear the metadata right after TC ingress hook.<br \/>\nThat would require a compromise, however. Metadata would become<br \/>\ninaccessible from TC egress (in setups where it actually reaches the<br \/>\nhook it tact, that is without any L2 tunnels on path).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: lwtunnel: Drop skb metadata before LWT encapsulation<\/p>\n<p>skb metadata is meant for passing information between XDP and TC. It liv<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-12303","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/12303","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=12303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}