--- linux-2.5.50/include/linux/crypto.h 2002-11-27 14:35:54.000000000 -0800 +++ linux/include/linux/crypto.h 2002-12-08 01:06:24.000000000 -0800 @@ -161,7 +161,6 @@ struct crypto_tfm { void *crt_ctx; - void *crt_work_block; u32 crt_flags; union { --- linux-2.5.50/crypto/api.c 2002-11-27 14:36:21.000000000 -0800 +++ linux/crypto/api.c 2002-12-08 01:06:35.000000000 -0800 @@ -124,44 +124,26 @@ if (alg == NULL) goto out; - tfm = kmalloc(sizeof(*tfm), GFP_KERNEL); + tfm = kmalloc(sizeof(*tfm) + alg->cra_ctxsize, GFP_KERNEL); if (tfm == NULL) goto out_put; memset(tfm, 0, sizeof(*tfm)); - if (alg->cra_ctxsize) { - tfm->crt_ctx = kmalloc(alg->cra_ctxsize, GFP_KERNEL); - if (tfm->crt_ctx == NULL) - goto out_free_tfm; - } + tfm->crt_ctx = (void*) &tfm[1]; tfm->__crt_alg = alg; - if (alg->cra_blocksize) { - tfm->crt_work_block = kmalloc(alg->cra_blocksize + 1, - GFP_KERNEL); - if (tfm->crt_work_block == NULL) - goto out_free_ctx; - } - if (crypto_init_flags(tfm, flags)) - goto out_free_work_block; + goto out_free_tfm; if (crypto_init_ops(tfm)) { crypto_exit_ops(tfm); - goto out_free_ctx; + goto out_free_tfm; } goto out; -out_free_work_block: - if (tfm->__crt_alg->cra_blocksize) - kfree(tfm->crt_work_block); - -out_free_ctx: - if (tfm->__crt_alg->cra_ctxsize) - kfree(tfm->crt_ctx); out_free_tfm: kfree(tfm); tfm = NULL; @@ -173,12 +155,6 @@ void crypto_free_tfm(struct crypto_tfm *tfm) { - if (tfm->__crt_alg->cra_ctxsize) - kfree(tfm->crt_ctx); - - if (tfm->__crt_alg->cra_blocksize) - kfree(tfm->crt_work_block); - if (crypto_tfm_alg_type(tfm) == CRYPTO_ALG_TYPE_CIPHER) if (tfm->crt_cipher.cit_iv) kfree(tfm->crt_cipher.cit_iv);