diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-21 14:11:50 +0300 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-22 10:49:29 +0300 |
commit | 9fcc704dfd7967ebfbdd1031603e4332a905994b (patch) | |
tree | f489c83ce1269fa2fe13e8ceab7f447bb62e5ec5 /crypto/echainiv.c | |
parent | eeee12aa34d840c6c99051f0ff85a9ffa1badd07 (diff) | |
download | linux-9fcc704dfd7967ebfbdd1031603e4332a905994b.tar.xz |
crypto: echainiv - Only hold RNG during initialisation
This patch changes the RNG allocation so that we only hold a
reference to the RNG during initialisation.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/echainiv.c')
-rw-r--r-- | crypto/echainiv.c | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/crypto/echainiv.c b/crypto/echainiv.c index 08d33367801d..b6e43dc61356 100644 --- a/crypto/echainiv.c +++ b/crypto/echainiv.c @@ -197,8 +197,13 @@ static int echainiv_init(struct crypto_tfm *tfm) crypto_aead_set_reqsize(geniv, sizeof(struct aead_request)); + err = crypto_get_default_rng(); + if (err) + goto out; + err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt, crypto_aead_ivsize(geniv)); + crypto_put_default_rng(); if (err) goto out; @@ -277,35 +282,14 @@ free_inst: goto out; } -static int echainiv_create(struct crypto_template *tmpl, struct rtattr **tb) -{ - int err; - - err = crypto_get_default_rng(); - if (err) - goto out; - - err = echainiv_aead_create(tmpl, tb); - if (err) - goto put_rng; - -out: - return err; - -put_rng: - crypto_put_default_rng(); - goto out; -} - static void echainiv_free(struct crypto_instance *inst) { aead_geniv_free(aead_instance(inst)); - crypto_put_default_rng(); } static struct crypto_template echainiv_tmpl = { .name = "echainiv", - .create = echainiv_create, + .create = echainiv_aead_create, .free = echainiv_free, .module = THIS_MODULE, }; |