summaryrefslogtreecommitdiff
path: root/crypto/adiantum.c
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2018-12-10 11:45:58 -0800
committerHerbert Xu <herbert@gondor.apana.org.au>2018-12-13 18:24:59 +0800
commit9dc5c1ee59419027ce0c48df76b4e000c9594485 (patch)
treed9617a4208f6d2c993d070104209b508ee8eca93 /crypto/adiantum.c
parentef94f2d79c335bf9636b03c39a28cbeb990a0f69 (diff)
downloadlinux-crypto-9dc5c1ee59419027ce0c48df76b4e000c9594485.tar.gz
linux-crypto-9dc5c1ee59419027ce0c48df76b4e000c9594485.zip
crypto: adiantum - fix leaking reference to hash algorithm
crypto_alg_mod_lookup() takes a reference to the hash algorithm but crypto_init_shash_spawn() doesn't take ownership of it, hence the reference needs to be dropped in adiantum_create(). Fixes: 2fefad9112f3 ("crypto: adiantum - add Adiantum support") Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/adiantum.c')
-rw-r--r--crypto/adiantum.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/crypto/adiantum.c b/crypto/adiantum.c
index e62e34f5..6651e713 100644
--- a/crypto/adiantum.c
+++ b/crypto/adiantum.c
@@ -564,10 +564,8 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
hash_alg = __crypto_shash_alg(_hash_alg);
err = crypto_init_shash_spawn(&ictx->hash_spawn, hash_alg,
skcipher_crypto_instance(inst));
- if (err) {
- crypto_mod_put(_hash_alg);
- goto out_drop_blockcipher;
- }
+ if (err)
+ goto out_put_hash;
/* Check the set of algorithms */
if (!adiantum_supported_algorithms(streamcipher_alg, blockcipher_alg,
@@ -624,10 +622,13 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
if (err)
goto out_drop_hash;
+ crypto_mod_put(_hash_alg);
return 0;
out_drop_hash:
crypto_drop_shash(&ictx->hash_spawn);
+out_put_hash:
+ crypto_mod_put(_hash_alg);
out_drop_blockcipher:
crypto_drop_spawn(&ictx->blockcipher_spawn);
out_drop_streamcipher: