mac80211: fix an oops in several failure paths in key allocation
This patch fixes an oops in several failure paths in key allocation. This Oops occurs when freeing a key that has not been linked yet, so the key->sdata is not set. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
5f4a6fae46
commit
00eb7fe77e
@ -380,6 +380,15 @@ void ieee80211_key_free(struct ieee80211_key *key)
|
|||||||
if (!key)
|
if (!key)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!key->sdata) {
|
||||||
|
/* The key has not been linked yet, simply free it
|
||||||
|
* and don't Oops */
|
||||||
|
if (key->conf.alg == ALG_CCMP)
|
||||||
|
ieee80211_aes_key_free(key->u.ccmp.tfm);
|
||||||
|
kfree(key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&key->sdata->local->key_lock, flags);
|
spin_lock_irqsave(&key->sdata->local->key_lock, flags);
|
||||||
__ieee80211_key_free(key);
|
__ieee80211_key_free(key);
|
||||||
spin_unlock_irqrestore(&key->sdata->local->key_lock, flags);
|
spin_unlock_irqrestore(&key->sdata->local->key_lock, flags);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user