From d7474f22964cdcab3cde856158bd16d345e9e47c Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Thu, 9 Dec 2010 19:49:00 +0100 Subject: [PATCH] --- yaml --- r: 225239 b: refs/heads/master c: 897bed8b4320774e56f282cdc1cceb4d77442797 h: refs/heads/master i: 225237: 44d86582d22da5eb836c1e39d6592deec59f797c 225235: 4a8dfde60ac14395b1dcefb97defc5005798334c 225231: 0db81aa21521bb7c239e6a53946c55c7dcf65d25 v: v3 --- [refs] | 2 +- trunk/net/mac80211/rx.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 95781f15cb26..6b137c93f5ed 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f33fdcf1b3a02fb92971a577d194ec6c579374af +refs/heads/master: 897bed8b4320774e56f282cdc1cceb4d77442797 diff --git a/trunk/net/mac80211/rx.c b/trunk/net/mac80211/rx.c index 2fe8f5f86499..052789ef4745 100644 --- a/trunk/net/mac80211/rx.c +++ b/trunk/net/mac80211/rx.c @@ -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;