Patch(2.5.50): Simplify crypto memory allocation

Adam J. Richter (adam@yggdrasil.com)
Sun, 8 Dec 2002 01:27:27 -0800


--FCuugMFkClbJLl1L
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

The following patch deletes the unused
crypto_tfm.crt_work_block field and combines the remaining
two kmallocs done by crypto_alloc_tfm into one, a net
deletion of 25 lines.

I've only verified that the kernel and the crpypto modules
still build. I don't currently use this code, although I'm
considering making a version of loop.c which would, which is why I
noticed this.

Anyhow, if this patch turns out to work and looks OK, then
please integrate, queue it for Linus, etc., or let me know if you
would prefer that you or I follow some other course of action.

-- 
Adam J. Richter     __     ______________   575 Oroville Road
adam@yggdrasil.com     \ /                  Milpitas, California 95035
+1 408 309-6081         | g g d r a s i l   United States of America
                         "Free Software For The Rest Of Us."

--FCuugMFkClbJLl1L Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="crypt.diff"

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

--FCuugMFkClbJLl1L-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/