{"id":29034,"date":"2026-09-25T20:31:43","date_gmt":"2026-09-25T12:31:43","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97602"},"modified":"2026-09-25T20:31:43","modified_gmt":"2026-09-25T12:31:43","slug":"cve-2026-97602","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97602","title":{"rendered":"CVE-2026-97602 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ninet: frags: invalida"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>inet: frags: invalidate queues before flushing them<\/p>\n<p>fqdir_pre_exit() flushes the skbs from incomplete queues without<br \/>\nchanging their completion state. A fragment which found a queue before<br \/>\nhigh_thresh was cleared can then acquire the queue lock and reuse stale<br \/>\nreassembly metadata. A queue concurrently killed after fqdir-&gt;dead is<br \/>\nset can instead become INET_FRAG_COMPLETE|INET_FRAG_HASH_DEAD while<br \/>\nstill holding its old skbs; skipping it because it is complete leaves<br \/>\nthose references behind until asynchronous fqdir teardown.<\/p>\n<p>For IPv6, stale metadata can make ip6_frag_reasm() use the old<br \/>\nnhoffset with a new skb and access memory out of bounds. The resulting<br \/>\nheap corruption can be leveraged for local privilege escalation when<br \/>\nunprivileged network namespaces are available. Unflushed fragments can<br \/>\nalso keep conntrack references alive after the conntrack per-net<br \/>\ncleanup point.<\/p>\n<p>Kill each incomplete queue, then flush every queue still owned by the<br \/>\ndying rhashtable. HASH_DEAD identifies that ownership, while complete<br \/>\nqueues without it are already owned by another destroy path and must be<br \/>\nleft alone. Releasing a timer reference removed by inet_frag_kill() is<br \/>\ndeferred to inet_frag_putn(), after the queue lock is dropped.<\/p>\n<p>KASAN report:<\/p>\n<p>  BUG: KASAN: slab-out-of-bounds in ipv6_frag_rcv (net\/ipv6\/reassembly.c:289 (discriminator 2) net\/ipv6\/reassembly.c:229 (discriminator 2) net\/ipv6\/reassembly.c:391 (discriminator 2))<br \/>\n  Write of size 1 at addr ff110001039c6e00 by task poc\/771<br \/>\n  Call Trace:<br \/>\n  ? ipv6_frag_rcv (net\/ipv6\/reassembly.c:289 (discriminator 2) net\/ipv6\/reassembly.c:229 (discriminator 2) net\/ipv6\/reassembly.c:391 (discriminator 2))<br \/>\n  ipv6_frag_rcv (net\/ipv6\/reassembly.c:289 (discriminator 2) net\/ipv6\/reassembly.c:229 (discriminator 2) net\/ipv6\/reassembly.c:391 (discriminator 2))<br \/>\n  ip6_protocol_deliver_rcu (net\/ipv6\/ip6_input.c:479 (discriminator 5))<br \/>\n  ip6_input_finish (net\/ipv6\/ip6_input.c:534)<br \/>\n  ipv6_rcv (include\/net\/dst.h:480 (discriminator 3) net\/ipv6\/ip6_input.c:119 (discriminator 3) net\/ipv6\/ip6_input.c:109 (discriminator 3) include\/linux\/netfilter.h:325 (discriminator 3) include\/linux\/netfilter.h:319 (discriminator 3) net\/ipv6\/ip6_input.c:351 (discriminator 3))<br \/>\n  packet_sendmsg (net\/packet\/af_packet.c:3110 net\/packet\/af_packet.c:3142)<br \/>\n  __x64_sys_sendmmsg (net\/socket.c:2883 net\/socket.c:2880 net\/socket.c:2880)<br \/>\n  The buggy address belongs to the object at ff110001039c6b40<br \/>\n  which belongs to the cache skbuff_small_head of size 704<br \/>\n  The buggy address is located 0 bytes to the right of<br \/>\n  allocated 704-byte region [ff110001039c6b40, ff110001039c6e00)<\/p>\n<p>  BUG: KASAN: slab-out-of-bounds in ip6_protocol_deliver_rcu (net\/ipv6\/ip6_input.c:423 (discriminator 1))<br \/>\n  Read of size 1 at addr ff110001039c6e08 by task poc\/771<br \/>\n  Call Trace:<br \/>\n  ? ip6_protocol_deliver_rcu (net\/ipv6\/ip6_input.c:423 (discriminator 1))<br \/>\n  ip6_protocol_deliver_rcu (net\/ipv6\/ip6_input.c:423 (discriminator 1))<br \/>\n  ip6_input_finish (net\/ipv6\/ip6_input.c:534)<br \/>\n  ipv6_rcv (include\/net\/dst.h:480 (discriminator 3) net\/ipv6\/ip6_input.c:119 (discriminator 3) net\/ipv6\/ip6_input.c:109 (discriminator 3) include\/linux\/netfilter.h:325 (discriminator 3) include\/linux\/netfilter.h:319 (discriminator 3) net\/ipv6\/ip6_input.c:351 (discriminator 3))<br \/>\n  packet_sendmsg (net\/packet\/af_packet.c:3110 net\/packet\/af_packet.c:3142)<br \/>\n  __x64_sys_sendmmsg (net\/socket.c:2883 net\/socket.c:2880 net\/socket.c:2880)<br \/>\n  packet_sendmsg (net\/packet\/af_packet.c:2959 net\/packet\/af_packet.c:3053 net\/packet\/af_packet.c:3142)<br \/>\n  __x64_sys_sendmmsg (net\/socket.c:2883 net\/socket.c:2880 net\/socket.c:2880)<br \/>\n  The buggy address belongs to the object at ff110001039c6b40<br \/>\n  which belongs to the cache skbuff_small_head of size 704<br \/>\n  The buggy address is located 8 bytes to the right of<br \/>\n  allocated 704-byte region [ff110001039c6b40, ff110001039c6e00)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>inet: frags: invalidate queues before flushing them<\/p>\n<p>fqdir_pre_exit() flushes the skbs from incomplete queues without<br \/>\nchanging thei<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29034","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29034","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=29034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}