Look up another CVE · open CVE-2026-97940 in the interactive tracker
CVE-2026-97940
ipv6: fix fib6 walker UAF on seq stop
Published 2026-09-25 (24 days ago) by the Linux kernel CNA. Subsystem net/ipv6. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-97940 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | fixedDLA-4841-1 · 2026-10-17 · text | 6.1.190-1 | Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.2.7-1 | Update the kernel and reboot. Fixed in 7.2.7-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.7-1 | Update the kernel and reboot. Fixed in 7.2.7-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
ipv6_route_iter_active() treats a walker in FWS_U at the table root as already unlinked. fib6_del_route() can move a still-linked walker into that same state when the current leaf is the last route at the root, so ipv6_route_native_seq_stop() skips fib6_walker_unlink(). The seq private object can then be freed while it remains on net->ipv6.fib6_walkers. A later route deletion walks the dangling list and uses the freed walker. Use the list head as membership state and reinitialize it when unlinking. Keep the existing w->node check so a never-started iterator with a zeroed private object is not treated as linked. The same stop helper is used by /proc/net/ipv6_route and by the BPF ipv6_route iterator. The BPF show path only widens the race.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
net/ipv6/ip6_fib.c
- What this is
- NETWORKING [IPv4/IPv6]MAINTAINERS section matched on net/ipv6/ip* · netdev@vger.kernel.org · Maintained
Check it on the machine
grep -w CONFIG_IPV6 /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
Show whether Debian builds this, per release
Debian builds this code. Every release below compiles the affected file into the kernels it ships.
- bookworm, trixie, forky, sid, bookworm · linux-6.12y
- y
- built into the kernel image on every flavour - only a patch removes it
- Build switch
- CONFIG_IPV6
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-09-25 (24 days ago)source
- CVSS
- 7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.16%, higher than 5.3% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- net/ipv6
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 3.13 | 5.10.271 | 9a3f73d62c86 |
| 3.13 | 5.15.222 | 63407cddabc5 |
| 3.13 | 6.1.189 | 05b687ee04f8 |
| 3.13 | 6.6.158 | 14fdaba201fd |
| 3.13 | 6.12.111 | 0eede1689610 |
| 3.13 | 6.18.53 | b89b691dd00b |
| 3.13 | 7.2.7 | 4553cfafa8d0 |
| 3.13 | 7.3 | 19b4ed644d68 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4841-1 | 2026-10-17 | bookworm 6.1.190-1 | tracker |
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:LAttack vector, local
- The bug is reached by a local read() of /proc/net/ipv6_route (ipv6_route_native_seq_stop via ipv6_route_seq_ops, or the BPF ipv6_route iterator) racing a local RTM_DELROUTE netlink request that runs fib6_del_route(). No remote protocol supplies data that causes the missed fib6_walker_unlink().
- AC:LAttack complexity, low
- The attacker controls both sides of the race. One thread reads /proc/net/ipv6_route while another repeatedly adds and deletes the last route in the table root (e.g. ::/0), which moves the linked walker to FWS_U at the root so seq_stop skips the unlink. The attempt can be retried freely.
- PR:LPrivileges required, low
- /proc/net/ipv6_route is created with mode 0 (0444, world-readable). Deleting routes needs CAP_NET_ADMIN only over the namespace, which an unprivileged user gets with unshare -Urn, and net->ipv6.fib6_walkers is per-namespace, so the whole attack runs in an attacker-owned netns.
- UI:NUser interaction, none
- No victim action is needed. The attacker opens, reads and closes the proc file and issues the route deletions themselves.
- S:UScope, unchanged
- The use-after-free happens in kernel heap memory and gives kernel-level impact within the same security authority. No VM or hardware isolation boundary is crossed.
- C:HConfidentiality impact, high
- The freed seq_file private object (struct ipv6_route_iter, holding the fib6_walker) stays on net->ipv6.fib6_walkers. Later FOR_WALKERS loops read w->state, w->leaf and w->node from memory the attacker can reallocate with controlled contents, a UAF usable for kernel memory disclosure.
- I:HIntegrity impact, high
- fib6_del_route() and fib6_repair_tree() write w->leaf, w->state and w->node into the freed walker, and list_add/list_del on w->lh write pointers into it. That is a write primitive into a reallocated kernel heap object, usable for corruption and privilege escalation.
- A:HAvailability impact, high
- Any later route deletion or tree repair in that namespace walks the dangling fib6_walkers entry, which causes list corruption or a KASAN/oops crash of the kernel.