diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-05-24 13:02:26 +1000 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2006-06-26 17:34:40 +1000 |
commit | c7fc05992afcf1d63d6d5fb6142c8d39094dbca9 (patch) | |
tree | 201d72844c0b27269e34bf3172d579b9e556e10c /crypto/api.c | |
parent | 110bf1c0e932615cbe43a8af8a07bc3750ae4295 (diff) | |
download | linux-c7fc05992afcf1d63d6d5fb6142c8d39094dbca9.tar.gz linux-c7fc05992afcf1d63d6d5fb6142c8d39094dbca9.tar.bz2 linux-c7fc05992afcf1d63d6d5fb6142c8d39094dbca9.zip |
[CRYPTO] api: Added cra_init/cra_exit
This patch adds the hooks cra_init/cra_exit which are called during a tfm's
construction and destruction respectively. This will be used by the instances
to allocate child tfm's.
For now this lets us get rid of the coa_init/coa_exit functions which are
used for exactly that purpose (unlike the dia_init function which is called
for each transaction).
In fact the coa_exit path is currently buggy as it may get called twice
when an error is encountered during initialisation.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/api.c')
-rw-r--r-- | crypto/api.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crypto/api.c b/crypto/api.c index 80bba637fba7..8145310d7985 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -188,13 +188,16 @@ struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags) if (crypto_init_flags(tfm, flags)) goto out_free_tfm; - if (crypto_init_ops(tfm)) { - crypto_exit_ops(tfm); + if (crypto_init_ops(tfm)) goto out_free_tfm; - } + + if (alg->cra_init && alg->cra_init(tfm)) + goto cra_init_failed; goto out; +cra_init_failed: + crypto_exit_ops(tfm); out_free_tfm: kfree(tfm); tfm = NULL; @@ -215,6 +218,8 @@ void crypto_free_tfm(struct crypto_tfm *tfm) alg = tfm->__crt_alg; size = sizeof(*tfm) + alg->cra_ctxsize; + if (alg->cra_exit) + alg->cra_exit(tfm); crypto_exit_ops(tfm); crypto_alg_put(alg); memset(tfm, 0, size); |