]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - net/mac80211/key.c
mac80211: support MIC error/replay detected counters driver update
[mirror_ubuntu-hirsute-kernel.git] / net / mac80211 / key.c
index 8c5f829ff6d71fdd2c90e912853da704143206c0..a4817aa4b17133430f612911e213ac96a313407b 100644 (file)
@@ -1300,3 +1300,52 @@ ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
        return &key->conf;
 }
 EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_add);
+
+void ieee80211_key_mic_failure(struct ieee80211_key_conf *keyconf)
+{
+       struct ieee80211_key *key;
+
+       key = container_of(keyconf, struct ieee80211_key, conf);
+
+       switch (key->conf.cipher) {
+       case WLAN_CIPHER_SUITE_AES_CMAC:
+       case WLAN_CIPHER_SUITE_BIP_CMAC_256:
+               key->u.aes_cmac.icverrors++;
+               break;
+       case WLAN_CIPHER_SUITE_BIP_GMAC_128:
+       case WLAN_CIPHER_SUITE_BIP_GMAC_256:
+               key->u.aes_gmac.icverrors++;
+               break;
+       default:
+               /* ignore the others for now, we don't keep counters now */
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(ieee80211_key_mic_failure);
+
+void ieee80211_key_replay(struct ieee80211_key_conf *keyconf)
+{
+       struct ieee80211_key *key;
+
+       key = container_of(keyconf, struct ieee80211_key, conf);
+
+       switch (key->conf.cipher) {
+       case WLAN_CIPHER_SUITE_CCMP:
+       case WLAN_CIPHER_SUITE_CCMP_256:
+               key->u.ccmp.replays++;
+               break;
+       case WLAN_CIPHER_SUITE_AES_CMAC:
+       case WLAN_CIPHER_SUITE_BIP_CMAC_256:
+               key->u.aes_cmac.replays++;
+               break;
+       case WLAN_CIPHER_SUITE_BIP_GMAC_128:
+       case WLAN_CIPHER_SUITE_BIP_GMAC_256:
+               key->u.aes_gmac.replays++;
+               break;
+       case WLAN_CIPHER_SUITE_GCMP:
+       case WLAN_CIPHER_SUITE_GCMP_256:
+               key->u.gcmp.replays++;
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(ieee80211_key_replay);