aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-12-09 13:49:00 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-13 15:23:28 -0500
commit897bed8b4320774e56f282cdc1cceb4d77442797 (patch)
tree5b0a61044ec2a1b3e41d2435ed3dff652eebac82 /net/mac80211
parentf33fdcf1b3a02fb92971a577d194ec6c579374af (diff)
mac80211: clean up RX key checks
Using the default key for "any key set" isn't quite what we should do. It works, but with the upcoming changes it makes life unnecessarily complex, so do something better here and really check for "any key". Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/rx.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 2fe8f5f86499..052789ef4745 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -955,12 +955,31 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
955 * have been expected. 955 * have been expected.
956 */ 956 */
957 struct ieee80211_key *key = NULL; 957 struct ieee80211_key *key = NULL;
958 struct ieee80211_sub_if_data *sdata = rx->sdata;
959 int i;
960
958 if (ieee80211_is_mgmt(fc) && 961 if (ieee80211_is_mgmt(fc) &&
959 is_multicast_ether_addr(hdr->addr1) && 962 is_multicast_ether_addr(hdr->addr1) &&
960 (key = rcu_dereference(rx->sdata->default_mgmt_key))) 963 (key = rcu_dereference(rx->sdata->default_mgmt_key)))
961 rx->key = key; 964 rx->key = key;
962 else if ((key = rcu_dereference(rx->sdata->default_key))) 965 else {
963 rx->key = key; 966 if (rx->sta) {
967 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
968 key = rcu_dereference(rx->sta->gtk[i]);
969 if (key)
970 break;
971 }
972 }
973 if (!key) {
974 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
975 key = rcu_dereference(sdata->keys[i]);
976 if (key)
977 break;
978 }
979 }
980 if (key)
981 rx->key = key;
982 }
964 return RX_CONTINUE; 983 return RX_CONTINUE;
965 } else { 984 } else {
966 u8 keyid; 985 u8 keyid;