Skip to content
Snippets Groups Projects
Commit 6fe4a28d authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: testmgr - Test skciphers with no IVs


As it is an skcipher with no IV escapes testing altogether because
we only test givcipher objects.  This patch fixes the bypass logic
to test these algorithms.

Conversely, we're currently testing nivaead algorithms with IVs,
which would have deadlocked had it not been for the fact that no
nivaead algorithms have any test vectors.  This patch also fixes
that case.

Both fixes are ugly as hell, but this ugliness should hopefully
disappear once we move them into the per-type code (i.e., the
AEAD test would live in aead.c and the skcipher stuff in ablkcipher.c).

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 5852ae42
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
*/ */
#include <linux/crypto.h> #include <crypto/internal/aead.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -206,8 +206,7 @@ static int cryptomgr_test(void *data) ...@@ -206,8 +206,7 @@ static int cryptomgr_test(void *data)
u32 type = param->type; u32 type = param->type;
int err = 0; int err = 0;
if (!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) & if (type & CRYPTO_ALG_TESTED)
CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV))
goto skiptest; goto skiptest;
err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED); 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,6 +222,7 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)
{ {
struct task_struct *thread; struct task_struct *thread;
struct crypto_test_param *param; struct crypto_test_param *param;
u32 type;
if (!try_module_get(THIS_MODULE)) if (!try_module_get(THIS_MODULE))
goto err; goto err;
...@@ -233,7 +233,19 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg) ...@@ -233,7 +233,19 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)
memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver)); memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver));
memcpy(param->alg, alg->cra_name, sizeof(param->alg)); memcpy(param->alg, alg->cra_name, sizeof(param->alg));
param->type = alg->cra_flags; type = alg->cra_flags;
/* This piece of crap needs to disappear into per-type test hooks. */
if ((!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) &
CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV) &&
((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
CRYPTO_ALG_TYPE_BLKCIPHER ? alg->cra_blkcipher.ivsize :
alg->cra_ablkcipher.ivsize)) ||
(!((type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) &&
alg->cra_type == &crypto_nivaead_type && alg->cra_aead.ivsize))
type |= CRYPTO_ALG_TESTED;
param->type = type;
thread = kthread_run(cryptomgr_test, param, "cryptomgr_test"); thread = kthread_run(cryptomgr_test, param, "cryptomgr_test");
if (IS_ERR(thread)) if (IS_ERR(thread))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment