Route timers and route labels protected by corresponding mutexes. `ifa' uses references counting for protection. No protection required for `rt' passed to rt_mpls_clear() because only current thread owns it.
ok? Index: sys/net/route.c =================================================================== RCS file: /cvs/src/sys/net/route.c,v retrieving revision 1.418 diff -u -p -r1.418 route.c --- sys/net/route.c 26 Apr 2023 16:09:44 -0000 1.418 +++ sys/net/route.c 26 Apr 2023 20:11:16 -0000 @@ -497,7 +497,6 @@ rtfree(struct rtentry *rt) KASSERT(!RT_ROOT(rt)); atomic_dec_int(&rttrash); - KERNEL_LOCK(); rt_timer_remove_all(rt); ifafree(rt->rt_ifa); rtlabel_unref(rt->rt_labelid); @@ -506,7 +505,6 @@ rtfree(struct rtentry *rt) #endif free(rt->rt_gateway, M_RTABLE, ROUNDUP(rt->rt_gateway->sa_len)); free(rt_key(rt), M_RTABLE, rt_key(rt)->sa_len); - KERNEL_UNLOCK(); pool_put(&rtentry_pool, rt); }