]> git.neil.brown.name Git - history.git/commitdiff
[CRYPTO]: Simplify crypto memory allocation.
authorAdam J. Richter <adam@yggdrasil.com>
Sun, 8 Dec 2002 06:36:58 +0000 (22:36 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Sun, 8 Dec 2002 06:36:58 +0000 (22:36 -0800)
crypto/api.c
include/linux/crypto.h

index f41d1437a4dad553b0849766dc69388b2604b292..626437fb5dea9072a06c4e9f0d1d8f217dd80b2d 100644 (file)
@@ -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);
index f82c74decefe7fb07249d363a161c5a96a9aa947..5c29e2b580119a05f3ba2d13e8f2aac43ad9f545 100644 (file)
@@ -161,7 +161,6 @@ struct compress_tfm {
 struct crypto_tfm {
 
        void *crt_ctx;
-       void *crt_work_block;
        u32 crt_flags;
        
        union {