diff -urN madwifi.old/net80211/ieee80211_crypto_ccmp.c madwifi.dev/net80211/ieee80211_crypto_ccmp.c
--- madwifi.old/net80211/ieee80211_crypto_ccmp.c	2006-02-06 21:20:57.000000000 +0100
+++ madwifi.dev/net80211/ieee80211_crypto_ccmp.c	2006-06-12 22:29:23.000000000 +0200
@@ -105,12 +105,6 @@
 
 	ctx->cc_vap = vap;
 	ctx->cc_ic = vap->iv_ic;
-	ctx->cc_tfm = crypto_alloc_tfm("aes", 0);
-	if (ctx->cc_tfm == NULL) {
-		FREE(ctx, M_DEVBUF);
-		_MOD_DEC_USE(THIS_MODULE);
-		return NULL;
-	}
 	return ctx;
 }
 
@@ -137,8 +131,21 @@
 			__func__, k->wk_keylen, 128 / NBBY);
 		return 0;
 	}
-	if (k->wk_flags & IEEE80211_KEY_SWCRYPT)
+
+	if (k->wk_flags & IEEE80211_KEY_SWCRYPT) {
+		if (ctx->cc_tfm == NULL)
+			ctx->cc_tfm = crypto_alloc_tfm("aes", 0);
+
+		if (ctx->cc_tfm == NULL) {
+			IEEE80211_DPRINTF(ctx->cc_vap, IEEE80211_MSG_CRYPTO,
+				"%s: Tried to add a software crypto key, but no software crypto available\n",
+				__func__);
+		
+			return 0;
+		}
+
 		crypto_cipher_setkey(ctx->cc_tfm, k->wk_key, k->wk_keylen);
+	}
 	return 1;
 }
 
