Subject: Re: [PATCH v5 net 0/3] ipv6: Fix two GC issues with permanent routes.

From: Jakub Kicinski <[email-masked]>
Date: Thu, 19 Mar 2026 07:28:57 -0700

On Thu, 19 Mar 2026 04:13:49 +0000 Kuniyuki Iwashima wrote:
> Patch 1 fixes the unbounded growth of tb6_gc_hlist due to
> permanent routes whose exception routes have all expired.
> 
> Patch 2 fixes an issue where exception routes tied to
> permanent routes are not properly aged.
> 
> Patch 3 is a selftest for the issue fixed by Patch 2.

Hitting a RCU warning with this:

[ 1246.404735][T26812] =============================
[ 1246.404892][T26812] WARNING: suspicious RCU usage
[ 1246.405029][T26812] 7.0.0-rc3-virtme #1 Not tainted
[ 1246.405170][T26812] -----------------------------
[ 1246.405302][T26812] ./include/net/neighbour.h:312 suspicious rcu_dereference_check() usage!
[ 1246.405498][T26812] 
[ 1246.405498][T26812] other info that might help us debug this:
[ 1246.405498][T26812] 
[ 1246.405786][T26812] 
[ 1246.405786][T26812] rcu_scheduler_active = 2, debug_locks = 1
[ 1246.405988][T26812] 3 locks held by ip/26812:
[ 1246.406124][T26812]  #0: ff11000015e71a30 (&tb->tb6_lock){+.-.}-{3:3}, at: ip6_route_add+0x95/0x160
[ 1246.406587][T26812]  #1: ffffffffbc58c900 (rcu_read_lock_bh){....}-{1:3}, at: fib6_nh_age_exceptions.part.0+0x24/0x200
[ 1246.406873][T26812]  #2: ffffffffbcdafbd8 (rt6_exception_lock){+.-.}-{3:3}, at: fib6_nh_age_exceptions.part.0+0x66/0x200
[ 1246.407143][T26812] 
[ 1246.407143][T26812] stack backtrace:
[ 1246.407315][T26812] CPU: 3 UID: 0 PID: 26812 Comm: ip Not tainted 7.0.0-rc3-virtme #1 PREEMPT(full) 
[ 1246.407318][T26812] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[ 1246.407319][T26812] Call Trace:
[ 1246.407321][T26812]  <TASK>
[ 1246.407322][T26812]  dump_stack_lvl+0x6f/0xa0
[ 1246.407328][T26812]  lockdep_rcu_suspicious.cold+0x4f/0xad
[ 1246.407334][T26812]  ___neigh_lookup_noref.constprop.0+0x4d0/0x8e0
[ 1246.407339][T26812]  rt6_age_examine_exception+0x209/0x510
[ 1246.407343][T26812]  ? __ip6_del_rt+0x160/0x160
[ 1246.407346][T26812]  ? fib6_nh_get_excptn_bucket+0x6e/0x150
[ 1246.407348][T26812]  fib6_nh_age_exceptions.part.0+0xce/0x200
[ 1246.407352][T26812]  rt6_age_exceptions+0xff/0x150
[ 1246.407355][T26812]  ? rt6_flush_exceptions+0x1a0/0x1a0
[ 1246.407357][T26812]  ? rcu_is_watching+0x15/0xd0
[ 1246.407361][T26812]  ? rcu_is_watching+0x15/0xd0
[ 1246.407363][T26812]  fib6_age_exceptions+0xc5/0x250
[ 1246.407366][T26812]  fib6_add_rt2node+0x25c6/0x3f90
[ 1246.407368][T26812]  ? pcpu_alloc_noprof+0x635/0xa60
[ 1246.407376][T26812]  ? fib6_age_exceptions+0x250/0x250
[ 1246.407379][T26812]  ? fib6_add_1.constprop.0+0x512/0x1620
[ 1246.407385][T26812]  ? fib6_add+0x36a/0xe40
[ 1246.407386][T26812]  fib6_add+0x36a/0xe40
[ 1246.407389][T26812]  ? lock_acquire.part.0+0xbc/0x260
[ 1246.407392][T26812]  ? fib6_add_rt2node+0x3f90/0x3f90
[ 1246.407398][T26812]  ip6_route_add+0xa7/0x160
[ 1246.407400][T26812]  ? ip6_route_multipath_add+0x13a0/0x13a0
[ 1246.407402][T26812]  inet6_rtm_newroute+0x10a/0x120
[ 1246.407404][T26812]  ? ip6_route_multipath_add+0x13a0/0x13a0
[ 1246.407406][T26812]  ? lock_acquire.part.0+0xbc/0x260
[ 1246.407407][T26812]  ? find_held_lock+0x2b/0x80
[ 1246.407415][T26812]  ? __lock_release.isra.0+0x59/0x170
[ 1246.407418][T26812]  ? rtnetlink_rcv_msg+0x6dc/0xb90
[ 1246.407422][T26812]  ? ip6_route_multipath_add+0x13a0/0x13a0
[ 1246.407424][T26812]  rtnetlink_rcv_msg+0x6fe/0xb90
[ 1246.407427][T26812]  ? rtnl_fdb_dump+0x620/0x620
[ 1246.407429][T26812]  ? __lock_acquire+0x577/0xc10
[ 1246.407433][T26812]  ? lock_acquire.part.0+0xbc/0x260
[ 1246.407434][T26812]  ? find_held_lock+0x2b/0x80
[ 1246.407438][T26812]  netlink_rcv_skb+0x123/0x380
[ 1246.407441][T26812]  ? rtnl_fdb_dump+0x620/0x620
[ 1246.407444][T26812]  ? netlink_ack+0xce0/0xce0
[ 1246.407450][T26812]  ? netlink_deliver_tap+0xc5/0x330
[ 1246.407451][T26812]  ? netlink_deliver_tap+0x13f/0x330
[ 1246.407455][T26812]  netlink_unicast+0x4a3/0x770
[ 1246.407458][T26812]  ? netlink_attachskb+0x810/0x810
[ 1246.407460][T26812]  ? __alloc_skb+0x4c4/0x5f0
[ 1246.407463][T26812]  ? napi_skb_cache_get+0x7a0/0x7a0
[ 1246.407465][T26812]  ? lock_acquire.part.0+0xbc/0x260
[ 1246.407467][T26812]  ? __lock_acquire+0x577/0xc10
[ 1246.407470][T26812]  netlink_sendmsg+0x735/0xc60
[ 1246.407473][T26812]  ? netlink_unicast+0x770/0x770
[ 1246.407477][T26812]  ? __might_fault+0x97/0x140
[ 1246.407482][T26812]  ____sys_sendmsg+0x419/0x850
[ 1246.407484][T26812]  ? copy_msghdr_from_user+0x270/0x430
[ 1246.407486][T26812]  ? get_timestamp.constprop.0+0x390/0x390
[ 1246.407488][T26812]  ? move_addr_to_kernel+0x40/0x40
[ 1246.407491][T26812]  ? stack_depot_save_flags+0x30d/0x6e0
[ 1246.407495][T26812]  ? rcu_read_lock_any_held+0x3c/0x90
[ 1246.407500][T26812]  ___sys_sendmsg+0xfd/0x180
[ 1246.407502][T26812]  ? __call_rcu_common.constprop.0+0xa6/0xa00
[ 1246.407505][T26812]  ? copy_msghdr_from_user+0x430/0x430
[ 1246.407520][T26812]  __sys_sendmsg+0x124/0x1c0
[ 1246.407522][T26812]  ? __sys_sendmsg_sock+0x20/0x20
[ 1246.407524][T26812]  ? lockdep_hardirqs_on+0x84/0x130
[ 1246.407528][T26812]  ? __call_rcu_common.constprop.0+0x3bd/0xa00
[ 1246.407533][T26812]  ? do_raw_spin_unlock+0x59/0x250
[ 1246.407536][T26812]  ? rcu_is_watching+0x15/0xd0
[ 1246.407539][T26812]  do_syscall_64+0x117/0xfc0
[ 1246.407541][T26812]  ? exc_page_fault+0xaf/0xd0
[ 1246.407544][T26812]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
[ 1246.407546][T26812] RIP: 0033:0x7f7fe0147c5e
[ 1246.407549][T26812] Code: 4d 89 d8 e8 34 bd 00 00 4c 8b 5d f8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 11 c9 c3 0f 1f 80 00 00 00 00 48 8b 45 10 0f 05 <c9> c3 83 e2 39 83 fa 08 75 e7 e8 13 ff ff ff 0f 1f 00 f3 0f 1e fa
[ 1246.407551][T26812] RSP: 002b:00007ffce73c1500 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
[ 1246.407553][T26812] RAX: ffffffffffffffda RBX: 00007ffce73c3b10 RCX: 00007f7fe0147c5e
[ 1246.407555][T26812] RDX: 0000000000000000 RSI: 00007ffce73c15c0 RDI: 0000000000000005
[ 1246.407556][T26812] RBP: 00007ffce73c1510 R08: 0000000000000000 R09: 0000000000000000
[ 1246.407557][T26812] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000000
[ 1246.407557][T26812] R13: 0000000069bb982b R14: 00007ffce73c3b20 R15: 000000000049c620
[ 1246.407564][T26812]  </TASK>