--- /dev/null
+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;
+ }
+