summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-05-11 17:47:39 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2015-05-13 10:31:25 +0800
commitaf6bf41e2aefecffb7126b17b73f2c68ceba7d51 (patch)
tree0e5d89de7d0e5857e31c94dfe1a2084902355429
parentdfc8ec4cd4d6953f68c09949ffc3a0274f779736 (diff)
downloadlinux-crypto-af6bf41e2aefecffb7126b17b73f2c68ceba7d51.tar.gz
linux-crypto-af6bf41e2aefecffb7126b17b73f2c68ceba7d51.zip
crypto: api - Add crypto_grab_spawn primitive
This patch adds a new primitive crypto_grab_spawn which is meant to replace crypto_init_spawn and crypto_init_spawn2. Under the new scheme the user no longer has to worry about reference counting the alg object before it is subsumed by the spawn. It is pretty much an exact copy of crypto_grab_aead. Prior to calling this function spawn->frontend and spawn->inst must have been set. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/algapi.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c
index 3103e6a1..abf100c0 100644
--- a/crypto/algapi.c
+++ b/crypto/algapi.c
@@ -612,6 +612,22 @@ out:
}
EXPORT_SYMBOL_GPL(crypto_init_spawn2);
+int crypto_grab_spawn(struct crypto_spawn *spawn, const char *name,
+ u32 type, u32 mask)
+{
+ struct crypto_alg *alg;
+ int err;
+
+ alg = crypto_find_alg(name, spawn->frontend, type, mask);
+ if (IS_ERR(alg))
+ return PTR_ERR(alg);
+
+ err = crypto_init_spawn(spawn, alg, spawn->inst, mask);
+ crypto_mod_put(alg);
+ return err;
+}
+EXPORT_SYMBOL_GPL(crypto_grab_spawn);
+
void crypto_drop_spawn(struct crypto_spawn *spawn)
{
if (!spawn->alg)