forked from Minki/linux
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>
This commit is contained in:
parent
f33fdcf1b3
commit
897bed8b43
@ -955,12 +955,31 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
|
||||
* have been expected.
|
||||
*/
|
||||
struct ieee80211_key *key = NULL;
|
||||
struct ieee80211_sub_if_data *sdata = rx->sdata;
|
||||
int i;
|
||||
|
||||
if (ieee80211_is_mgmt(fc) &&
|
||||
is_multicast_ether_addr(hdr->addr1) &&
|
||||
(key = rcu_dereference(rx->sdata->default_mgmt_key)))
|
||||
rx->key = key;
|
||||
else if ((key = rcu_dereference(rx->sdata->default_key)))
|
||||
rx->key = key;
|
||||
else {
|
||||
if (rx->sta) {
|
||||
for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
|
||||
key = rcu_dereference(rx->sta->gtk[i]);
|
||||
if (key)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!key) {
|
||||
for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
|
||||
key = rcu_dereference(sdata->keys[i]);
|
||||
if (key)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (key)
|
||||
rx->key = key;
|
||||
}
|
||||
return RX_CONTINUE;
|
||||
} else {
|
||||
u8 keyid;
|
||||
|
Loading…
Reference in New Issue
Block a user