crypto: user - Fix lookup of algorithms with IV generator
PATCH v2 1/2 crypto: user - Fix lookup of algorithms with IV generator
We lookup algorithms with crypto_alg_mod_lookup() when instantiating via crypto_add_alg(). However, algorithms that are wrapped by an IV genearator (e.g. aead or genicv type algorithms) need special care. The userspace process hangs until it gets a timeout when we use crypto_alg_mod_lookup() to lookup these algorithms. So export the lookup functions for these algorithms and use them in crypto_add_alg().
--- crypto/ablkcipher.c | 4 +- crypto/aead.c | 4 +- crypto/crypto_user.c | 72 +++++++++++++++++++++++++++++++++++- include/crypto/internal/aead.h | 2 + include/crypto/internal/skcipher.h | 2 + 5 files changed, 79 insertions(+), 5 deletions(-)
crypto/ablkcipher.c +2 -2
@@ -613,8 +613,7 @@ out:return err; } -static struct crypto_alg *crypto_lookup_skcipher (const char *name,u32 type, -u32 mask) +struct crypto_alg *crypto_lookup_skcipher (const char *name,u32 type,u32 mask) {struct crypto_alg *alg;
@@ -652,6 +651,7 @@ static struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type,return ERR_PTR (crypto_givcipher_default (alg, type, mask)); } +EXPORT_SYMBOL_GPL (crypto_lookup_skcipher);int crypto_grab_skcipher (struct crypto_skcipher_spawn *spawn,const char *name,u32 type,u32 mask)
crypto/aead.c +2 -2
@@ -470,8 +470,7 @@ out:return err; } -static struct crypto_alg *crypto_lookup_aead (const char *name,u32 type, -u32 mask) +struct crypto_alg *crypto_lookup_aead (const char *name,u32 type,u32 mask) {struct crypto_alg *alg;
@@ -503,6 +502,7 @@ static struct crypto_alg *crypto_lookup_aead(const char *name, u32 type,return ERR_PTR (crypto_nivaead_default (alg, type, mask)); } +EXPORT_SYMBOL_GPL (crypto_lookup_aead);int crypto_grab_aead (struct crypto_aead_spawn *spawn,const char *name,u32 type,u32 mask)
crypto/crypto_user.c +71 -1
93 lines not on this page · raw message
include/crypto/internal/aead.h +2 -0
@@ -31,6 +31,8 @@ static inline void crypto_set_aead_spawn(crypto_set_spawn (&spawn->base, inst); } +struct crypto_alg *crypto_lookup_aead (const char *name,u32 type,u32 mask); +int crypto_grab_aead (struct crypto_aead_spawn *spawn,const char *name,u32 type,u32 mask);
include/crypto/internal/skcipher.h +2 -0
@@ -34,6 +34,8 @@ static inline void crypto_set_skcipher_spawn(int crypto_grab_skcipher (struct crypto_skcipher_spawn *spawn,const char *name,u32 type,u32 mask); +struct crypto_alg *crypto_lookup_skcipher (const char *name,u32 type,u32 mask); +static inline void crypto_drop_skcipher (struct crypto_skcipher_spawn *spawn) {crypto_drop_spawn (&spawn->base);
Signature · 1 line
1.7.0.4
PATCH v2 2/2 crypto: user - Fix size of netlink dump message
The default netlink message size limit might be exceeded when dumping a lot of algorithms to userspace. As a result, not all of the instantiated algorithms dumped to userspace. So calculate an upper bound on the message size and call netlink_dump_start() with that value.
--- crypto/crypto_user.c | 8 ++++++++ include/linux/cryptouser.h | 3 +++ 2 files changed, 11 insertions(+), 0 deletions(-)
crypto/crypto_user.c +8 -0
@@ -457,12 +457,20 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)if ((type == (CRYPTO_MSG_GETALG -CRYPTO_MSG_BASE ) && (nlh->nlmsg_flags &NLM_F_DUMP ))) { +struct crypto_alg *alg; +u16 dump_alloc =0 ; +if (link->dump ==NULL )return -EINVAL ; + +list_for_each_entry (alg, &crypto_alg_list, cra_list) + dump_alloc +=CRYPTO_REPORT_MAXSIZE ; + {struct netlink_dump_control c = { .dump = link->dump, .done = link->done, + .min_dump_alloc = dump_alloc, };return netlink_dump_start (crypto_nlsk, skb, nlh, &c); }
include/linux/cryptouser.h +3 -0
@@ -100,3 +100,6 @@ struct crypto_report_rng {char type[CRYPTO_MAX_NAME ];unsigned int seedsize; }; + +#define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \ + sizeof(struct crypto_report_blkcipher))
Signature · 1 line
1.7.0.4
Herbert Xu
maintainerQuoted 8 lines · Steffen Klassert
We lookup algorithms with
crypto_alg_mod_lookup()when instantiating viacrypto_add_alg(). However, algorithms that are wrapped by an IV genearator (e.g. aead or genicv type algorithms) need special care. The userspace process hangs until it gets a timeout when we usecrypto_alg_mod_lookup()to lookup these algorithms. So export the lookup functions for these algorithms and use them incrypto_add_alg().Signed-off-by Steffen Klassert <[email protected]>
Both applied to crypto.
Thanks,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt