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; }