diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-08-31 23:34:21 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2010-08-31 23:34:21 +0000 |
commit | 2f014eb8e82152c3e31fba135b45cdf026de7fd1 (patch) | |
tree | 509489e635a0f907a8838797bfbaf7f105afc883 /package/mac80211/patches/570-ath9k_mic_failure_fix.patch | |
parent | ece9b523e446692c9361336d1f0b6cbd6a3df257 (diff) | |
download | mtk-20170518-2f014eb8e82152c3e31fba135b45cdf026de7fd1.zip mtk-20170518-2f014eb8e82152c3e31fba135b45cdf026de7fd1.tar.gz mtk-20170518-2f014eb8e82152c3e31fba135b45cdf026de7fd1.tar.bz2 |
mac80211: update to wireless-testing 2010-08-31
SVN-Revision: 22865
Diffstat (limited to 'package/mac80211/patches/570-ath9k_mic_failure_fix.patch')
-rw-r--r-- | package/mac80211/patches/570-ath9k_mic_failure_fix.patch | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/package/mac80211/patches/570-ath9k_mic_failure_fix.patch b/package/mac80211/patches/570-ath9k_mic_failure_fix.patch deleted file mode 100644 index fbd188d..0000000 --- a/package/mac80211/patches/570-ath9k_mic_failure_fix.patch +++ /dev/null @@ -1,85 +0,0 @@ ---- a/drivers/net/wireless/ath/ath.h -+++ b/drivers/net/wireless/ath/ath.h -@@ -119,6 +119,7 @@ struct ath_common { - - u32 keymax; - DECLARE_BITMAP(keymap, ATH_KEYMAX); -+ DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX); - u8 splitmic; - - struct ath_regulatory regulatory; ---- a/drivers/net/wireless/ath/ath9k/common.c -+++ b/drivers/net/wireless/ath/ath9k/common.c -@@ -366,9 +366,13 @@ int ath9k_cmn_key_config(struct ath_comm - set_bit(idx, common->keymap); - if (key->alg == ALG_TKIP) { - set_bit(idx + 64, common->keymap); -+ set_bit(idx, common->tkip_keymap); -+ set_bit(idx + 64, common->tkip_keymap); - if (common->splitmic) { - set_bit(idx + 32, common->keymap); - set_bit(idx + 64 + 32, common->keymap); -+ set_bit(idx + 32, common->tkip_keymap); -+ set_bit(idx + 64 + 32, common->tkip_keymap); - } - } - -@@ -393,10 +397,17 @@ void ath9k_cmn_key_delete(struct ath_com - return; - - clear_bit(key->hw_key_idx + 64, common->keymap); -+ -+ clear_bit(key->hw_key_idx, common->tkip_keymap); -+ clear_bit(key->hw_key_idx + 64, common->tkip_keymap); -+ - if (common->splitmic) { - ath9k_hw_keyreset(ah, key->hw_key_idx + 32); - clear_bit(key->hw_key_idx + 32, common->keymap); - clear_bit(key->hw_key_idx + 64 + 32, common->keymap); -+ -+ clear_bit(key->hw_key_idx + 32, common->tkip_keymap); -+ clear_bit(key->hw_key_idx + 64 + 32, common->tkip_keymap); - } - } - EXPORT_SYMBOL(ath9k_cmn_key_delete); ---- a/drivers/net/wireless/ath/ath9k/recv.c -+++ b/drivers/net/wireless/ath/ath9k/recv.c -@@ -870,15 +870,18 @@ static bool ath9k_rx_accept(struct ath_c - if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) { - *decrypt_error = true; - } else if (rx_stats->rs_status & ATH9K_RXERR_MIC) { -- if (ieee80211_is_ctl(fc)) -- /* -- * Sometimes, we get invalid -- * MIC failures on valid control frames. -- * Remove these mic errors. -- */ -- rx_stats->rs_status &= ~ATH9K_RXERR_MIC; -- else -+ /* -+ * The MIC error bit is only valid if the frame -+ * is not a control frame or fragment, and it was -+ * decrypted using a valid TKIP key. -+ */ -+ if (!ieee80211_is_ctl(fc) && -+ !ieee80211_has_morefrags(fc) && -+ !(le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG) && -+ test_bit(rx_stats->rs_keyix, common->tkip_keymap)) - rxs->flag |= RX_FLAG_MMIC_ERROR; -+ else -+ rx_stats->rs_status &= ~ATH9K_RXERR_MIC; - } - /* - * Reject error frames with the exception of ---- a/drivers/net/wireless/ath/ath9k/mac.c -+++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -711,7 +711,8 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a - rs->rs_phyerr = phyerr; - } else if (ads.ds_rxstatus8 & AR_DecryptCRCErr) - rs->rs_status |= ATH9K_RXERR_DECRYPT; -- else if (ads.ds_rxstatus8 & AR_MichaelErr) -+ else if ((ads.ds_rxstatus8 & AR_MichaelErr) && -+ rs->rs_keyix != ATH9K_RXKEYIX_INVALID) - rs->rs_status |= ATH9K_RXERR_MIC; - else if (ads.ds_rxstatus8 & AR_KeyMiss) - rs->rs_status |= ATH9K_RXERR_DECRYPT; |