path: root/crypto/skcipher.c
diff options
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/skcipher.c
parentcrypto: chtls - Fixed memory leak (diff)
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 '')
1 files changed, 3 insertions, 6 deletions
diff --git a/crypto/skcipher.c b/crypto/skcipher.c
index 39a718d99220..37adb71f7759 100644
--- a/crypto/skcipher.c
+++ b/crypto/skcipher.c
@@ -938,15 +938,12 @@ static void skcipher_free_instance_simple(struct skcipher_instance *inst)
* @tmpl: the template being instantiated
* @tb: the template parameters
- * @cipher_alg_ret: on success, a pointer to the underlying cipher algorithm is
- * returned here. It must be dropped with crypto_mod_put().
* Return: a pointer to the new instance, or an ERR_PTR(). The caller still
* needs to register the instance.
-struct skcipher_instance *
-skcipher_alloc_instance_simple(struct crypto_template *tmpl, struct rtattr **tb,
- struct crypto_alg **cipher_alg_ret)
+struct skcipher_instance *skcipher_alloc_instance_simple(
+ struct crypto_template *tmpl, struct rtattr **tb)
struct crypto_attr_type *algt;
struct crypto_alg *cipher_alg;
@@ -982,6 +979,7 @@ skcipher_alloc_instance_simple(struct crypto_template *tmpl, struct rtattr **tb,
if (err)
goto err_free_inst;
+ spawn->dropref = true;
err = crypto_init_spawn(spawn, cipher_alg,
@@ -1003,7 +1001,6 @@ skcipher_alloc_instance_simple(struct crypto_template *tmpl, struct rtattr **tb,
inst->alg.init = skcipher_init_tfm_simple;
inst->alg.exit = skcipher_exit_tfm_simple;
- *cipher_alg_ret = cipher_alg;
return inst;