The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=f102a18349335bfda1eb373a64eb1ba7462cd6bb

commit f102a18349335bfda1eb373a64eb1ba7462cd6bb
Author:     Gleb Smirnoff <[email protected]>
AuthorDate: 2026-01-17 00:38:02 +0000
Commit:     Gleb Smirnoff <[email protected]>
CommitDate: 2026-01-17 00:38:02 +0000

    net: on interface detach purge all its routes before detaching protocols
    
    Otherwise, a forwarding thread may use the interface being detached.  This
    is a regression from 0d469d23715d, which manifests itself as a reliably
    reproducible panic in in6_selecthlim().  Note that there are old bug
    reports about such a panic, and I believe this change will not fix them,
    as their nature is not due to a screwed up detach sequence, but due to
    lack of proper epoch(9) based synchronization between the detach and
    forwarding.
    
    Reviewed by:            pouria
    Reported & tested by:   jhibbits
    PR:                     292162
    Fixes:                  0d469d23715d690b863787ebfa51529e1f6a9092
    Differential Revision:  https://reviews.freebsd.org/D54721
---
 sys/net/if.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sys/net/if.c b/sys/net/if.c
index 4ddf8a69b3f0..047ccd2ecda7 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -1115,6 +1115,8 @@ if_detach_internal(struct ifnet *ifp, bool vmove)
                altq_detach(&ifp->if_snd);
 #endif
 
+       rt_flushifroutes(ifp);
+
        if_purgeaddrs(ifp);
        EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
        if_purgemaddrs(ifp);
@@ -1139,8 +1141,6 @@ if_detach_internal(struct ifnet *ifp, bool vmove)
                } else
                        IF_ADDR_WUNLOCK(ifp);
        }
-
-       rt_flushifroutes(ifp);
 }
 
 #ifdef VIMAGE

Reply via email to