On 19/03/18(Mon) 15:58, Stefan Sperling wrote:
> The following will trigger "panic: rw_enter: netlock locking against myself":

The solution is to call bpfdetach() outside of the NET_LOCK(), it should
not need it.  Diff below does that, does it work for you?

Index: net/if.c
===================================================================
RCS file: /cvs/src/sys/net/if.c,v
retrieving revision 1.548
diff -u -p -r1.548 if.c
--- net/if.c    2 Mar 2018 15:52:11 -0000       1.548
+++ net/if.c    19 Mar 2018 15:22:17 -0000
@@ -1028,6 +1028,10 @@ if_detach(struct ifnet *ifp)
        /* Other CPUs must not have a reference before we start destroying. */
        if_idxmap_remove(ifp);
 
+#if NBPFILTER > 0
+       bpfdetach(ifp);
+#endif
+
        NET_LOCK();
        s = splnet();
        ifp->if_qstart = if_detached_qstart;
@@ -1041,9 +1045,6 @@ if_detach(struct ifnet *ifp)
        /* Remove the link state task */
        task_del(net_tq(ifp->if_index), &ifp->if_linkstatetask);
 
-#if NBPFILTER > 0
-       bpfdetach(ifp);
-#endif
        rti_delete(ifp);
 #if NETHER > 0 && defined(NFSCLIENT)
        if (ifp->if_index == revarp_ifidx)

Reply via email to