DragonFlyBSD Kernel Audit
DF-0595 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/netproto/802_11/wlan_tkip/ieee80211_crypto_tkip.c b/sys/netproto/802_11/wlan_tkip/ieee80211_crypto_tkip.c
--- a/sys/netproto/802_11/wlan_tkip/ieee80211_crypto_tkip.c
+++ b/sys/netproto/802_11/wlan_tkip/ieee80211_crypto_tkip.c
@@ -358,7 +358,7 @@
 			mic);
 		m_copydata(m, m->m_pkthdr.len - tkip.ic_miclen,
 			tkip.ic_miclen, mic0);
-		if (memcmp(mic, mic0, tkip.ic_miclen)) {
+		if (timingsafe_bcmp(mic, mic0, tkip.ic_miclen)) {
 			/* NB: 802.11 layer handles statistic and debug msg */
 			ieee80211_notify_michael_failure(vap, wh,
 				k->wk_rxkeyix != IEEE80211_KEYIX_NONE ?
diff --git a/sys/netproto/802_11/wlan_ccmp/ieee80211_crypto_ccmp.c b/sys/netproto/802_11/wlan_ccmp/ieee80211_crypto_ccmp.c
--- a/sys/netproto/802_11/wlan_ccmp/ieee80211_crypto_ccmp.c
+++ b/sys/netproto/802_11/wlan_ccmp/ieee80211_crypto_ccmp.c
@@ -639,7 +639,7 @@
 			space = m->m_len;
 		}
 	}
-	if (memcmp(mic, a, ccmp.ic_trailer) != 0) {
+	if (timingsafe_bcmp(mic, a, ccmp.ic_trailer) != 0) {
 		IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, wh->i_addr2,
 		    "%s", "AES-CCM decrypt failed; MIC mismatch");
 		vap->iv_stats.is_rx_ccmpmic++;