CVE-2026-97602: inet: frags: invalidate queues before flushing them
In the Linux kernel, the following vulnerability has been resolved:
inet: frags: invalidate queues before flushing them
fqdirpreexit() flushes the skbs from incomplete queues without changing their completion state. A fragment which found a queue before highthresh was cleared can then acquire the queue lock and reuse stale reassembly metadata. A queue concurrently killed after fqdir->dead is set can instead become INETFRAGCOMPLETE|INETFRAGHASHDEAD while still holding its old skbs; skipping it because it is complete leaves those references behind until asynchronous fqdir teardown.
For IPv6, stale metadata can make ip6fragreasm() use the old nhoffset with a new skb and access memory out of bounds. The resulting heap corruption can be leveraged for local privilege escalation when unprivileged network namespaces are available. Unflushed fragments can also keep conntrack references alive after the conntrack per-net cleanup point.
Kill each incomplete queue, then flush every queue still owned by the dying rhashtable. HASHDEAD identifies that ownership, while complete queues without it are already owned by another destroy path and must be left alone. Releasing a timer reference removed by inetfragkill() is deferred to inetfragputn(), after the queue lock is dropped.
KASAN report:
BUG: KASAN: slab-out-of-bounds in ipv6fragrcv (net/ipv6/reassembly.c:289 (discriminator 2) net/ipv6/reassembly.c:229 (discriminator 2) net/ipv6/reassembly.c:391 (discriminator 2)) Write of size 1 at addr ff110001039c6e00 by task poc/771 Call Trace: ? ipv6fragrcv (net/ipv6/reassembly.c:289 (discriminator 2) net/ipv6/reassembly.c:229 (discriminator 2) net/ipv6/reassembly.c:391 (discriminator 2)) ipv6fragrcv (net/ipv6/reassembly.c:289 (discriminator 2) net/ipv6/reassembly.c:229 (discriminator 2) net/ipv6/reassembly.c:391 (discriminator 2)) ip6protocoldeliverrcu (net/ipv6/ip6input.c:479 (discriminator 5)) ip6inputfinish (net/ipv6/ip6input.c:534) ipv6rcv (include/net/dst.h:480 (discriminator 3) net/ipv6/ip6input.c:119 (discriminator 3) net/ipv6/ip6input.c:109 (discriminator 3) include/linux/netfilter.h:325 (discriminator 3) include/linux/netfilter.h:319 (discriminator 3) net/ipv6/ip6input.c:351 (discriminator 3)) packetsendmsg (net/packet/afpacket.c:3110 net/packet/afpacket.c:3142) x64syssendmmsg (net/socket.c:2883 net/socket.c:2880 net/socket.c:2880) The buggy address belongs to the object at ff110001039c6b40 which belongs to the cache skbuffsmallhead of size 704 The buggy address is located 0 bytes to the right of allocated 704-byte region [ff110001039c6b40, ff110001039c6e00)
BUG: KASAN: slab-out-of-bounds in ip6protocoldeliverrcu (net/ipv6/ip6input.c:423 (discriminator 1)) Read of size 1 at addr ff110001039c6e08 by task poc/771 Call Trace: ? ip6protocoldeliverrcu (net/ipv6/ip6input.c:423 (discriminator 1)) ip6protocoldeliverrcu (net/ipv6/ip6input.c:423 (discriminator 1)) ip6inputfinish (net/ipv6/ip6input.c:534) ipv6rcv (include/net/dst.h:480 (discriminator 3) net/ipv6/ip6input.c:119 (discriminator 3) net/ipv6/ip6input.c:109 (discriminator 3) include/linux/netfilter.h:325 (discriminator 3) include/linux/netfilter.h:319 (discriminator 3) net/ipv6/ip6input.c:351 (discriminator 3)) packetsendmsg (net/packet/afpacket.c:3110 net/packet/afpacket.c:3142) x64syssendmmsg (net/socket.c:2883 net/socket.c:2880 net/socket.c:2880) packetsendmsg (net/packet/afpacket.c:2959 net/packet/afpacket.c:3053 net/packet/afpacket.c:3142) x64syssendmmsg (net/socket.c:2883 net/socket.c:2880 net/socket.c:2880) The buggy address belongs to the object at ff110001039c6b40 which belongs to the cache skbuffsmallhead of size 704 The buggy address is located 8 bytes to the right of allocated 704-byte region [ff110001039c6b40, ff110001039c6e00)
Affected Software
Event History
Frequently Asked Questions
Who is most exposed to local privilege escalation from this issue?
Systems where unprivileged users can create or use network namespaces are exposed to the described local privilege-escalation path. The issue is in Linux kernel IP fragment reassembly, with IPv6 specifically identified as the path where stale metadata can cause an out-of-bounds memory access.
What must an attacker be able to do to trigger the vulnerable condition?
An attacker needs local capability to exercise network fragmentation and race fragment-queue teardown, including a fragment finding a queue before the fragment-directory threshold is cleared. The described privilege-escalation impact additionally depends on unprivileged network namespaces being available.
What is the potential impact besides memory corruption?
Unflushed fragments can retain conntrack references past conntrack per-network-namespace cleanup. This can leave references alive until asynchronous fragment-directory teardown.
Which fixes are referenced for this vulnerability?
The provided references identify fixes in stable kernel trees with commit IDs b9d77f1652e79e58eac48430d0431c329137efcc, 7cb5f4643a7fcdbfbee1fad3cdfc678add62d378, and bf3d6c44c84c57e8a4bb7f40ad95b64f9b0198ba.