{"id":39072,"date":"2026-10-16T00:34:58","date_gmt":"2026-10-15T16:34:58","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98401"},"modified":"2026-10-16T00:34:58","modified_gmt":"2026-10-15T16:34:58","slug":"cve-2026-98401","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98401","title":{"rendered":"CVE-2026-98401 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet: iptunnel: fix st"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: iptunnel: fix stale transport header during tunnel decapsulation<\/p>\n<p>Syzbot reported a crash in qdisc_pkt_len_segs_init() caused by a stale<br \/>\ntransport_header offset after tunnel decapsulation.<\/p>\n<p>BUG: unable to handle page fault for address: ffffed102091a42e<br \/>\nOops: Oops: 0000 [#1] SMP KASAN NOPTI<br \/>\nCPU: 0 UID: 0 PID: 340 Comm: qdisc_uaf_repro Not tainted 7.2.0-rc4-00061-g248951ddc14d #256 PREEMPT(full)<br \/>\nHardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04\/01\/2014<br \/>\nRIP: 0010:__asan_load2<\/p>\n<p>qdisc_pkt_len_segs_init (net\/core\/dev.c:4145)<br \/>\n__dev_queue_xmit (net\/core\/dev.c:4787)<br \/>\nbr_dev_queue_push_xmit (net\/bridge\/br_forward.c:53)<br \/>\nbr_handle_frame_finish (net\/bridge\/br_input.c:229)<br \/>\nbr_handle_frame (net\/bridge\/br_input.c:315)<br \/>\n__netif_receive_skb_core.constprop.0 (net\/core\/dev.c:6099)<br \/>\n__netif_receive_skb_list_core (net\/core\/dev.c:6287)<br \/>\nnetif_receive_skb_list_internal (net\/core\/dev.c:6445)<br \/>\nnapi_complete_done (net\/core\/dev.c:6813)<br \/>\ngro_cell_poll (net\/core\/gro_cells.c:74)<br \/>\n__napi_poll (net\/core\/dev.c:7735)<br \/>\nnet_rx_action (net\/core\/dev.c:7798 net\/core\/dev.c:7955)<br \/>\nhandle_softirqs (kernel\/softirq.c:622)<br \/>\ndo_softirq (kernel\/softirq.c:523  kernel\/softirq.c:510 )<br \/>\n__local_bh_enable_ip (kernel\/softirq.c:450)<br \/>\ntun_get_user (drivers\/net\/tun.c:1986 (discriminator 1))<br \/>\ntun_chr_write_iter (drivers\/net\/tun.c:2032)<\/p>\n<p>The issue is completely latent until qdisc read transport header in<br \/>\ncommit 7fb4c1967011 (&#8220;net: pull headers in qdisc_pkt_len_segs_init()&#8221;).<br \/>\nThe crash requires four conditions to line up:<\/p>\n<p>1. The incoming packet is encapsulated and carries GSO metadata. The outer<br \/>\n   transport header offset is stored in skb-&gt;transport_header while the<br \/>\n   packet is still in the outer tunnel context.<br \/>\n2. The tunnel receiver strips the outer headers. skb-&gt;data is advanced to<br \/>\n   the inner frame, but skb-&gt;transport_header is left pointing to the<br \/>\n   now-removed outer L4 header, so it becomes a negative offset relative to<br \/>\n   the new data.<br \/>\n3. The inner frame is not delivered to the local IP stack. Instead, it<br \/>\n   is forwarded at L2 by a bridge or HSR, so ip_rcv_core() never runs and<br \/>\n   the transport header is not reset to the inner L4 offset.<br \/>\n4. The forwarding path calls __dev_queue_xmit(), which enters<br \/>\n   qdisc_pkt_len_segs_init(). That function computes the GSO header length<br \/>\n   from skb_transport_offset(skb). Because the offset is negative, the<br \/>\n   unsigned cast overflows and pskb_may_pull(skb, hdr_len +<br \/>\n   sizeof(struct tcphdr)) reads past the end of the skb, triggering a<br \/>\n   KASAN fault or page fault.<\/p>\n<p>The issue specifically requires GSO packets (shinfo-&gt;gso_size != 0), which<br \/>\nare processed\/aggregated through gro_cells. Fix this by clearing<br \/>\ntransport_header to the ~0U sentinel in gro_cell for all tunnnel driver.<br \/>\nGTP does not support GRO\/GSO, drop the evil GSO packets in GTP directly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: iptunnel: fix stale transport header during tunnel decapsulation<\/p>\n<p>Syzbot reported a crash in qdisc_pkt_len_segs_init() caused <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-39072","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/39072","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=39072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=39072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=39072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}