diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-06-23 19:23:31 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-06-25 15:14:13 -0400 |
commit | bed3d9c0b71f9afbfec905cb6db3b9f16be29d4d (patch) | |
tree | e9c9531371681fc01bcda264caa1c728a60b58fe /drivers/net/wireless/ath/key.c | |
parent | 8311f0da95d483ceb76bafae6e0a8c90531fb577 (diff) | |
download | op-kernel-dev-bed3d9c0b71f9afbfec905cb6db3b9f16be29d4d.zip op-kernel-dev-bed3d9c0b71f9afbfec905cb6db3b9f16be29d4d.tar.gz |
ath9k: fix dynamic WEP related regression
commit 7a532fe7131216a02c81a6c1b1f8632da1195a58
ath9k_hw: fix interpretation of the rx KeyMiss flag
This commit used the rx key miss indication to detect packets that were
passed from the hardware without being decrypted, however it seems that
this bit is not only undefined in the static WEP case, but also for
dynamically allocated WEP keys. This caused a regression when using
WEP-LEAP.
This patch fixes the regression by keeping track of which key indexes
refer to CCMP keys and only using the key miss indication for those.
Reported-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Cc: stable@vger.kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/key.c')
-rw-r--r-- | drivers/net/wireless/ath/key.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/key.c b/drivers/net/wireless/ath/key.c index 0e81904..5c54aa4 100644 --- a/drivers/net/wireless/ath/key.c +++ b/drivers/net/wireless/ath/key.c @@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *common, return -EIO; set_bit(idx, common->keymap); + if (key->cipher == WLAN_CIPHER_SUITE_CCMP) + set_bit(idx, common->ccmp_keymap); + if (key->cipher == WLAN_CIPHER_SUITE_TKIP) { set_bit(idx + 64, common->keymap); set_bit(idx, common->tkip_keymap); @@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key) return; clear_bit(key->hw_key_idx, common->keymap); + clear_bit(key->hw_key_idx, common->ccmp_keymap); if (key->cipher != WLAN_CIPHER_SUITE_TKIP) return; |