⬢ DragonFlyBSD Kernel Audit
DF-3380 / fix.diff
← back to finding ↓ download raw
--- a/sys/net/pf/if_pfsync.c	2026-09-11 21:16:24.138644221 +0000
+++ b/sys/net/pf/if_pfsync.c	2026-09-11 21:16:46.350353846 +0000
@@ -200,10 +200,10 @@
 	lwkt_reltoken(&pf_token);
 
 	struct pfsync_softc *sc = ifp->if_softc;
-	callout_stop(&sc->sc_tmo);
+	callout_drain(&sc->sc_tmo);
 	/* callout_stop(&sc->sc_tdb_tmo); XXX we don't support tdb (yet) */
-	callout_stop(&sc->sc_bulk_tmo);
-	callout_stop(&sc->sc_bulkfail_tmo);
+	callout_drain(&sc->sc_bulk_tmo);
+	callout_drain(&sc->sc_bulkfail_tmo);
 #ifdef CARP
 	if (!pfsync_sync_ok)
 		carp_group_demote_adj(&sc->sc_if, -1);
@@ -1516,9 +1516,11 @@
 {
 	struct pfsync_softc *sc = v;
 
+	lwkt_gettoken(&pf_token);
 	crit_enter();
 	pfsync_sendout(sc);
 	crit_exit();
+	lwkt_reltoken(&pf_token);
 }
 
 void
@@ -1549,7 +1551,7 @@
 	int cpu;
 	struct pf_state *state;
 
-	ASSERT_LWKT_TOKEN_HELD(&pf_token);
+	lwkt_gettoken(&pf_token);
 
 	crit_enter();
 	if (sc->sc_mbuf != NULL)
@@ -1610,6 +1612,7 @@
 	if (sc->sc_mbuf != NULL)
 		pfsync_sendout(sc);
 	crit_exit();
+	lwkt_reltoken(&pf_token);
 }
 
 void
@@ -1618,7 +1621,7 @@
 	struct pfsync_softc *sc = v;
 	int error;
 
-	ASSERT_LWKT_TOKEN_HELD(&pf_token);
+	lwkt_gettoken(&pf_token);
 
 	if (sc->sc_bulk_tries++ < PFSYNC_MAX_BULKTRIES) {
 		/* Try again in a bit */
@@ -1651,6 +1654,7 @@
 		callout_stop(&sc->sc_bulkfail_tmo);
 		lwkt_gettoken(&pf_token);
 	}
+	lwkt_reltoken(&pf_token);
 }
 
 static void