summaryrefslogtreecommitdiffstats
path: root/crypto/keywrap.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2019-12-20 13:29:40 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2019-12-27 18:18:04 +0800
commitb3c16bfc6a79ae517ec3c44be615aed0ffa52c53 (patch)
tree1a0405808ed63f31289bee2ba5927cda3496e908 /crypto/keywrap.c
parent93e23eb2ed6c11b4f483c8111ac155ec2b1f3042 (diff)
downloadlinux-b3c16bfc6a79ae517ec3c44be615aed0ffa52c53.tar.gz
linux-b3c16bfc6a79ae517ec3c44be615aed0ffa52c53.tar.bz2
linux-b3c16bfc6a79ae517ec3c44be615aed0ffa52c53.zip
crypto: skcipher - Add skcipher_ialg_simple helper
This patch introduces the skcipher_ialg_simple helper which fetches the crypto_alg structure from a simple skcipher instance's spawn. This allows us to remove the third argument from the function skcipher_alloc_instance_simple. In doing so the reference count to the algorithm is now maintained by the Crypto API and the caller no longer needs to drop the alg refcount. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/keywrap.c')
-rw-r--r--crypto/keywrap.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/crypto/keywrap.c b/crypto/keywrap.c
index a155c88105ea..0355cce21b1e 100644
--- a/crypto/keywrap.c
+++ b/crypto/keywrap.c
@@ -266,10 +266,12 @@ static int crypto_kw_create(struct crypto_template *tmpl, struct rtattr **tb)
struct crypto_alg *alg;
int err;
- inst = skcipher_alloc_instance_simple(tmpl, tb, &alg);
+ inst = skcipher_alloc_instance_simple(tmpl, tb);
if (IS_ERR(inst))
return PTR_ERR(inst);
+ alg = skcipher_ialg_simple(inst);
+
err = -EINVAL;
/* Section 5.1 requirement for KW */
if (alg->cra_blocksize != sizeof(struct crypto_kw_block))
@@ -283,14 +285,11 @@ static int crypto_kw_create(struct crypto_template *tmpl, struct rtattr **tb)
inst->alg.decrypt = crypto_kw_decrypt;
err = skcipher_register_instance(tmpl, inst);
- if (err)
- goto out_free_inst;
- goto out_put_alg;
-
+ if (err) {
out_free_inst:
- inst->free(inst);
-out_put_alg:
- crypto_mod_put(alg);
+ inst->free(inst);
+ }
+
return err;
}