aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorAdam J. Richter <adam@yggdrasil.com>2002-12-07 22:36:58 -0800
committerDavid S. Miller <davem@nuts.ninka.net>2002-12-07 22:36:58 -0800
commit413c55e0c6bef53cd90c93489817ff70801d5eba (patch)
tree45597c74b60c5b16c50721988f33907c54b83cb9 /crypto
parent561e33a269398316ec5b5108f45b6b6335741e7d (diff)
downloadhistory-413c55e0c6bef53cd90c93489817ff70801d5eba.tar.gz
[CRYPTO]: Simplify crypto memory allocation.
Diffstat (limited to 'crypto')
-rw-r--r--crypto/api.c32
1 files changed, 4 insertions, 28 deletions
diff --git a/crypto/api.c b/crypto/api.c
index f41d1437a4dad5..626437fb5dea90 100644
--- a/crypto/api.c
+++ b/crypto/api.c
@@ -123,44 +123,26 @@ struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags)
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;
@@ -172,12 +154,6 @@ out:
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);