FlawAtlas
Search the atlas
CVE-2026-23004 Not scored

dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list()

In the Linux kernel, the following vulnerability has been resolved: dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list() syzbot was able to crash the kernel in rt6_uncached_list_flush_dev() in an interesting way [1] Crash happens in list_del_init()/INIT_LIST_HEAD() while writing list->prev, while the prior write on list->next went well. static inline void INIT_LIST_HEAD(struct list_head *list) { WRITE_ONCE(list->next, list); // This went well WRITE_ONCE(list->prev, list); // Crash, @list has been freed. } Issue here is that rt6_uncached_list_del() did not attempt to lock ul->lock, as list_empty(&rt->dst.rt_uncached) returned true because the WRITE_ONCE(list->next, list) happened on the other CPU. We might use list_del_init_careful() and list_empty_careful(), or make sure rt6_uncached_list_del() always grabs the spinlock whenever rt->dst.rt_uncached_list has been set. A similar fix is neeed for IPv4. [1] BUG: KASAN: slab-use-after-free in INIT_LIST_HEAD include/linux/list.h:46 [inline] BUG: KASAN: slab-use-after-free in list_del_init include/linux/list.h:296 [inline] BUG: KASAN: slab-use-after-free in rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline] BUG: KASAN: slab-use-after-free in rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020 Write of size 8 at addr ffff8880294cfa78 by task kworker/u8:14/3450 CPU: 0 UID: 0 PID: 3450 Comm: kworker/u8:14 Tainted: G L syzkaller #0 PREEMPT_{RT,(full)} Tainted: [L]=SOFTLOCKUP Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025 Workqueue: netns cleanup_net Call Trace: <TASK> dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0xca/0x240 mm/kasan/report.c:482 kasan_report+0x118/0x150 mm/kasan/report.c:595 INIT_LIST_HEAD include/linux/list.h:46 [inline] list_del_init include/linux/list.h:296 [inline] rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline] rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020 addrconf_ifdown+0x143/0x18a0 net/ipv6/addrconf.c:3853 addrconf_notify+0x1bc/0x1050 net/ipv6/addrconf.c:-1 notifier_call_chain+0x19d/0x3a0 kernel/notifier.c:85 call_netdevice_notifiers_extack net/core/dev.c:2268 [inline] call_netdevice_notifiers net/core/dev.c:2282 [inline] netif_close_many+0x29c/0x410 net/core/dev.c:1785 unregister_netdevice_many_notify+0xb50/0x2330 net/core/dev.c:12353 ops_exit_rtnl_list net/core/net_namespace.c:187 [inline] ops_undo_list+0x3dc/0x990 net/core/net_namespace.c:248 cleanup_net+0x4de/0x7b0 net/core/net_namespace.c:696 process_one_work kernel/workqueue.c:3257 [inline] process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421 kthread+0x711/0x8a0 kernel/kthread.c:463 ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246 </TASK> Allocated by task 803: kasan_save_stack mm/kasan/common.c:57 [inline] kasan_save_track+0x3e/0x80 mm/kasan/common.c:78 unpoison_slab_object mm/kasan/common.c:340 [inline] __kasan_slab_alloc+0x6c/0x80 mm/kasan/common.c:366 kasan_slab_alloc include/linux/kasan.h:253 [inline] slab_post_alloc_hook mm/slub.c:4953 [inline] slab_alloc_node mm/slub.c:5263 [inline] kmem_cache_alloc_noprof+0x18d/0x6c0 mm/slub.c:5270 dst_alloc+0x105/0x170 net/core/dst.c:89 ip6_dst_alloc net/ipv6/route.c:342 [inline] icmp6_dst_alloc+0x75/0x460 net/ipv6/route.c:3333 mld_sendpack+0x683/0xe60 net/ipv6/mcast.c:1844 mld_send_cr net/ipv6/mcast.c:2154 [inline] mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693 process_one_work kernel/workqueue.c:3257 [inline] process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421 kthread+0x711/0x8a0 kernel/kthread.c:463 ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entr ---truncated---

Exploit probability 0.1%
Published January 25, 2026
Required by Not available
Last source change July 15, 2026

02 / AFFECTED SOFTWARE

Affected packages

Linux Kernel
Unknown Unknown

03 / CONNECTIONS

Connected vulnerabilities

related CGA-FM45-7WXG-H5FH
related OPENSUSE-SU-2026:20416-1
related SUSE-SU-2026:0928-1
related SUSE-SU-2026:0961-1
related SUSE-SU-2026:0962-1
related SUSE-SU-2026:0984-1
related SUSE-SU-2026:1003-1
related SUSE-SU-2026:1041-1
related SUSE-SU-2026:1077-1
related SUSE-SU-2026:1078-1
related SUSE-SU-2026:1081-1
related SUSE-SU-2026:1131-1
related SUSE-SU-2026:1684-1
related SUSE-SU-2026:1686-1
related SUSE-SU-2026:1689-1
related SUSE-SU-2026:1691-1
related SUSE-SU-2026:1694-1
related SUSE-SU-2026:1698-1
related SUSE-SU-2026:1708-1
related SUSE-SU-2026:1710-1
related SUSE-SU-2026:1718-1
related SUSE-SU-2026:1725-1
related SUSE-SU-2026:1726-1
related SUSE-SU-2026:1728-1
related SUSE-SU-2026:1733-1
related SUSE-SU-2026:1735-1
related SUSE-SU-2026:1765-1
related SUSE-SU-2026:1767-1
related SUSE-SU-2026:1768-1
related SUSE-SU-2026:1770-1
related SUSE-SU-2026:1771-1
related SUSE-SU-2026:1773-1
related SUSE-SU-2026:1776-1
related SUSE-SU-2026:1780-1
related SUSE-SU-2026:1781-1
related SUSE-SU-2026:1786-1
related SUSE-SU-2026:1787-1
related SUSE-SU-2026:1790-1
related SUSE-SU-2026:1791-1
related SUSE-SU-2026:1793-1
related SUSE-SU-2026:1798-1
related SUSE-SU-2026:1801-1
related SUSE-SU-2026:1804-1
related SUSE-SU-2026:20667-1
related SUSE-SU-2026:20720-1
related SUSE-SU-2026:20838-1
related SUSE-SU-2026:20845-1
related SUSE-SU-2026:20876-1
related SUSE-SU-2026:20931-1
related SUSE-SU-2026:21284-1
related SUSE-SU-2026:21468-1
related SUSE-SU-2026:21469-1
related SUSE-SU-2026:21470-1
related SUSE-SU-2026:21471-1
related SUSE-SU-2026:21472-1
related SUSE-SU-2026:21473-1
related SUSE-SU-2026:21474-1
related SUSE-SU-2026:21475-1
related SUSE-SU-2026:21476-1
related SUSE-SU-2026:21477-1
related SUSE-SU-2026:21479-1
related SUSE-SU-2026:21480-1
related SUSE-SU-2026:21481-1
related SUSE-SU-2026:21482-1
related SUSE-SU-2026:21483-1
related SUSE-SU-2026:21484-1
related SUSE-SU-2026:21485-1
related SUSE-SU-2026:21486-1
related SUSE-SU-2026:21487-1
related SUSE-SU-2026:21491-1
related SUSE-SU-2026:21495-1
related SUSE-SU-2026:21496-1
related SUSE-SU-2026:21497-1
related SUSE-SU-2026:21498-1
related SUSE-SU-2026:21499-1
related SUSE-SU-2026:21500-1
related SUSE-SU-2026:21501-1
related SUSE-SU-2026:21503-1
related SUSE-SU-2026:21504-1
related SUSE-SU-2026:21505-1
related SUSE-SU-2026:21506-1
related SUSE-SU-2026:21507-1
related SUSE-SU-2026:21508-1
related SUSE-SU-2026:21509-1
related SUSE-SU-2026:21510-1
related SUSE-SU-2026:21511-1
related SUSE-SU-2026:21512-1
related SUSE-SU-2026:21513-1
related SUSE-SU-2026:21514-1
related SUSE-SU-2026:21515-1
related SUSE-SU-2026:21519-1
related SUSE-SU-2026:21522-1
related SUSE-SU-2026:21523-1
related SUSE-SU-2026:21525-1
related SUSE-SU-2026:21526-1
related SUSE-SU-2026:21527-1
related SUSE-SU-2026:21528-1
related SUSE-SU-2026:21529-1
related SUSE-SU-2026:21531-1
related SUSE-SU-2026:21532-1
related SUSE-SU-2026:21533-1
related SUSE-SU-2026:21554-1
related SUSE-SU-2026:21555-1
related SUSE-SU-2026:21557-1
related SUSE-SU-2026:21562-1
related SUSE-SU-2026:21563-1
related SUSE-SU-2026:21591-1
related SUSE-SU-2026:21598-1

04 / EVIDENCE

Source records

Open Source Vulnerabilities CVE-2026-23004

In the Linux kernel, the following vulnerability has been resolved: dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list() syzbot was able to crash the kernel in rt6_uncached_list_flush_dev() in an interesting way [1] Crash happens in list_del_init()/INIT_LIST_HEAD() while writing list->prev, while the prior write on list->next went well. static inline void INIT_LIST_HEAD(struct list_head *list) { WRITE_ONCE(list->next, list); // This went well WRITE_ONCE(list->prev, list); // Crash, @list has been freed. } Issue here is that rt6_uncached_list_del() did not attempt to lock ul->lock, as list_empty(&rt->dst.rt_uncached) returned true because the WRITE_ONCE(list->next, list) happened on the other CPU. We might use list_del_init_careful() and list_empty_careful(), or make sure rt6_uncached_list_del() always grabs the spinlock whenever rt->dst.rt_uncached_list has been set. A similar fix is neeed for IPv4. [1] BUG: KASAN: slab-use-after-free in INIT_LIST_HEAD include/linux/list.h:46 [inline] BUG: KASAN: slab-use-after-free in list_del_init include/linux/list.h:296 [inline] BUG: KASAN: slab-use-after-free in rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline] BUG: KASAN: slab-use-after-free in rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020 Write of size 8 at addr ffff8880294cfa78 by task kworker/u8:14/3450 CPU: 0 UID: 0 PID: 3450 Comm: kworker/u8:14 Tainted: G L syzkaller #0 PREEMPT_{RT,(full)} Tainted: [L]=SOFTLOCKUP Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025 Workqueue: netns cleanup_net Call Trace: <TASK> dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0xca/0x240 mm/kasan/report.c:482 kasan_report+0x118/0x150 mm/kasan/report.c:595 INIT_LIST_HEAD include/linux/list.h:46 [inline] list_del_init include/linux/list.h:296 [inline] rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline] rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020 addrconf_ifdown+0x143/0x18a0 net/ipv6/addrconf.c:3853 addrconf_notify+0x1bc/0x1050 net/ipv6/addrconf.c:-1 notifier_call_chain+0x19d/0x3a0 kernel/notifier.c:85 call_netdevice_notifiers_extack net/core/dev.c:2268 [inline] call_netdevice_notifiers net/core/dev.c:2282 [inline] netif_close_many+0x29c/0x410 net/core/dev.c:1785 unregister_netdevice_many_notify+0xb50/0x2330 net/core/dev.c:12353 ops_exit_rtnl_list net/core/net_namespace.c:187 [inline] ops_undo_list+0x3dc/0x990 net/core/net_namespace.c:248 cleanup_net+0x4de/0x7b0 net/core/net_namespace.c:696 process_one_work kernel/workqueue.c:3257 [inline] process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421 kthread+0x711/0x8a0 kernel/kthread.c:463 ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246 </TASK> Allocated by task 803: kasan_save_stack mm/kasan/common.c:57 [inline] kasan_save_track+0x3e/0x80 mm/kasan/common.c:78 unpoison_slab_object mm/kasan/common.c:340 [inline] __kasan_slab_alloc+0x6c/0x80 mm/kasan/common.c:366 kasan_slab_alloc include/linux/kasan.h:253 [inline] slab_post_alloc_hook mm/slub.c:4953 [inline] slab_alloc_node mm/slub.c:5263 [inline] kmem_cache_alloc_noprof+0x18d/0x6c0 mm/slub.c:5270 dst_alloc+0x105/0x170 net/core/dst.c:89 ip6_dst_alloc net/ipv6/route.c:342 [inline] icmp6_dst_alloc+0x75/0x460 net/ipv6/route.c:3333 mld_sendpack+0x683/0xe60 net/ipv6/mcast.c:1844 mld_send_cr net/ipv6/mcast.c:2154 [inline] mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693 process_one_work kernel/workqueue.c:3257 [inline] process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421 kthread+0x711/0x8a0 kernel/kthread.c:463 ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entr ---truncated---

View original source

05 / REFERENCES

Further evidence