summaryrefslogtreecommitdiff
path: root/crypto/mcryptd.c
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2016-12-27 12:53:44 -0700
committerJonathan Corbet <corbet@lwn.net>2016-12-27 12:53:44 -0700
commit1bd9a34ffdd5f22ef74ed68b5d8b6fb4b781d58c (patch)
tree3f9b77b397ec915c0eb026a9b6425e82fa843e67 /crypto/mcryptd.c
parent239a79b2f922a0614334cef0aab2f8a23a4e54f9 (diff)
parent46cc85f2e4aef88c237a0407cf5d163619a4d565 (diff)
downloadlinux-crypto-1bd9a34ffdd5f22ef74ed68b5d8b6fb4b781d58c.tar.gz
linux-crypto-1bd9a34ffdd5f22ef74ed68b5d8b6fb4b781d58c.zip
Merge tag 'v4.10-rc1' into docs-next
Linux 4.10-rc1
Diffstat (limited to 'crypto/mcryptd.c')
-rw-r--r--crypto/mcryptd.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/crypto/mcryptd.c b/crypto/mcryptd.c
index 94ee44ac..c207458d 100644
--- a/crypto/mcryptd.c
+++ b/crypto/mcryptd.c
@@ -254,18 +254,22 @@ out_free_inst:
goto out;
}
-static inline void mcryptd_check_internal(struct rtattr **tb, u32 *type,
+static inline bool mcryptd_check_internal(struct rtattr **tb, u32 *type,
u32 *mask)
{
struct crypto_attr_type *algt;
algt = crypto_get_attr_type(tb);
if (IS_ERR(algt))
- return;
- if ((algt->type & CRYPTO_ALG_INTERNAL))
- *type |= CRYPTO_ALG_INTERNAL;
- if ((algt->mask & CRYPTO_ALG_INTERNAL))
- *mask |= CRYPTO_ALG_INTERNAL;
+ return false;
+
+ *type |= algt->type & CRYPTO_ALG_INTERNAL;
+ *mask |= algt->mask & CRYPTO_ALG_INTERNAL;
+
+ if (*type & *mask & CRYPTO_ALG_INTERNAL)
+ return true;
+ else
+ return false;
}
static int mcryptd_hash_init_tfm(struct crypto_tfm *tfm)
@@ -492,7 +496,8 @@ static int mcryptd_create_hash(struct crypto_template *tmpl, struct rtattr **tb,
u32 mask = 0;
int err;
- mcryptd_check_internal(tb, &type, &mask);
+ if (!mcryptd_check_internal(tb, &type, &mask))
+ return -EINVAL;
halg = ahash_attr_alg(tb[1], type, mask);
if (IS_ERR(halg))