mac80211: fix an oops in several failure paths in key allocation
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 26 Jun 2008 09:13:46 +0000 (12:13 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 27 Jun 2008 18:49:52 +0000 (14:49 -0400)
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>
net/mac80211/key.c

index 150d66dbda9d22de6ca0b94c48eab7e70c3f733f..220e83be3ef4a3dad7331f451bb95021d7c04701 100644 (file)
@@ -380,6 +380,15 @@ void ieee80211_key_free(struct ieee80211_key *key)
        if (!key)
                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);
        __ieee80211_key_free(key);
        spin_unlock_irqrestore(&key->sdata->local->key_lock, flags);