diff options
authorHerbert Xu <herbert@gondor.apana.org.au>2007-12-07 20:18:17 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2008-01-11 08:16:40 +1100
commit68b6c7d6919be7c732fc6229c55e35d0166e9258 (patch)
parent[CRYPTO] api: Sanitise mask when allocating ablkcipher/hash (diff)
[CRYPTO] api: Add crypto_attr_alg_name
This patch adds a new helper crypto_attr_alg_name which is basically the first half of crypto_attr_alg. That is, it returns an algorithm name parameter as a string without looking it up. The caller can then look it up immediately or defer it until later. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
2 files changed, 17 insertions, 2 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c
index 08eca6da1d53..e65cb50cf4af 100644
--- a/crypto/algapi.c
+++ b/crypto/algapi.c
@@ -472,7 +472,7 @@ int crypto_check_attr_type(struct rtattr **tb, u32 type)
-struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask)
+const char *crypto_attr_alg_name(struct rtattr *rta)
struct crypto_attr_alg *alga;
@@ -486,7 +486,21 @@ struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask)
alga = RTA_DATA(rta);
alga->name[CRYPTO_MAX_ALG_NAME - 1] = 0;
- return crypto_alg_mod_lookup(alga->name, type, mask);
+ return alga->name;
+struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask)
+ const char *name;
+ int err;
+ name = crypto_attr_alg_name(rta);
+ err = PTR_ERR(name);
+ if (IS_ERR(name))
+ return ERR_PTR(err);
+ return crypto_alg_mod_lookup(name, type, mask);
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h
index 2cdb227fc39d..726a765e5ec6 100644
--- a/include/crypto/algapi.h
+++ b/include/crypto/algapi.h
@@ -113,6 +113,7 @@ struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type,
struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb);
int crypto_check_attr_type(struct rtattr **tb, u32 type);
+const char *crypto_attr_alg_name(struct rtattr *rta);
struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask);
int crypto_attr_u32(struct rtattr *rta, u32 *num);
struct crypto_instance *crypto_alloc_instance(const char *name,