⬢ DragonFlyBSD Kernel Audit
DF-4365 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/pcn/if_pcn.c	2026-09-19 00:00:00.000000000 +0000
+++ b/sys/dev/netif/pcn/if_pcn.c	2026-09-19 00:00:00.000000000 +0000
@@ -876,7 +876,16 @@
 	struct mii_data *mii;
 	struct ifnet *ifp = &sc->arpcom.ac_if;
 
-	lwkt_serialize_enter(ifp->if_serializer);
+	if (!lwkt_serialize_try(ifp->if_serializer)) {
+		/*
+		 * Never block the softclock thread on the serializer:
+		 * callout_stop() in pcn_stop() waits synchronously for this
+		 * callback while holding it (AB-BA, DF-3715 family).
+		 * Retry next tick.
+		 */
+		callout_reset(&sc->pcn_stat_timer, 1, pcn_tick, sc);
+		return;
+	}
 
 	mii = device_get_softc(sc->pcn_miibus);
 	mii_tick(mii);