diff options
-rw-r--r-- | crypto/algboss.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/crypto/algboss.c b/crypto/algboss.c index 4601e4267c88..6906f92aeac0 100644 --- a/crypto/algboss.c +++ b/crypto/algboss.c | |||
@@ -10,7 +10,7 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/crypto.h> | 13 | #include <crypto/internal/aead.h> |
14 | #include <linux/ctype.h> | 14 | #include <linux/ctype.h> |
15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
@@ -206,8 +206,7 @@ static int cryptomgr_test(void *data) | |||
206 | u32 type = param->type; | 206 | u32 type = param->type; |
207 | int err = 0; | 207 | int err = 0; |
208 | 208 | ||
209 | if (!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) & | 209 | if (type & CRYPTO_ALG_TESTED) |
210 | CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV)) | ||
211 | goto skiptest; | 210 | goto skiptest; |
212 | 211 | ||
213 | err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED); | 212 | err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED); |
@@ -223,6 +222,7 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg) | |||
223 | { | 222 | { |
224 | struct task_struct *thread; | 223 | struct task_struct *thread; |
225 | struct crypto_test_param *param; | 224 | struct crypto_test_param *param; |
225 | u32 type; | ||
226 | 226 | ||
227 | if (!try_module_get(THIS_MODULE)) | 227 | if (!try_module_get(THIS_MODULE)) |
228 | goto err; | 228 | goto err; |
@@ -233,7 +233,19 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg) | |||
233 | 233 | ||
234 | memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver)); | 234 | memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver)); |
235 | memcpy(param->alg, alg->cra_name, sizeof(param->alg)); | 235 | memcpy(param->alg, alg->cra_name, sizeof(param->alg)); |
236 | param->type = alg->cra_flags; | 236 | type = alg->cra_flags; |
237 | |||
238 | /* This piece of crap needs to disappear into per-type test hooks. */ | ||
239 | if ((!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) & | ||
240 | CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV) && | ||
241 | ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == | ||
242 | CRYPTO_ALG_TYPE_BLKCIPHER ? alg->cra_blkcipher.ivsize : | ||
243 | alg->cra_ablkcipher.ivsize)) || | ||
244 | (!((type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) && | ||
245 | alg->cra_type == &crypto_nivaead_type && alg->cra_aead.ivsize)) | ||
246 | type |= CRYPTO_ALG_TESTED; | ||
247 | |||
248 | param->type = type; | ||
237 | 249 | ||
238 | thread = kthread_run(cryptomgr_test, param, "cryptomgr_test"); | 250 | thread = kthread_run(cryptomgr_test, param, "cryptomgr_test"); |
239 | if (IS_ERR(thread)) | 251 | if (IS_ERR(thread)) |