⬢ DragonFlyBSD Kernel Audit
DF-3576 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/iwn/if_iwn.c
+++ b/sys/dev/netif/iwn/if_iwn.c
@@ -5592,6 +5592,11 @@ iwn_set_timing(struct iwn_softc *sc, struct ieee80211_node *ni)
 	memset(&cmd, 0, sizeof cmd);
 	memcpy(&cmd.tstamp, ni->ni_tstamp.data, sizeof (uint64_t));
 	cmd.bintval = htole16(ni->ni_intval);
 	cmd.lintval = htole16(10);
+
+	/* A beacon interval of 0 (malicious/corrupt AP) would divide by
+	 * zero below; bail out instead of taking a #DE. */
+	if (ni->ni_intval == 0)
+		return EINVAL;
 
 	/* Compute remaining time until next beacon. */
 	val = (uint64_t)ni->ni_intval * IEEE80211_DUR_TU;