diff options
Diffstat (limited to 'crypto/testmgr.c')
| -rw-r--r-- | crypto/testmgr.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/crypto/testmgr.c b/crypto/testmgr.c index e9e9d84293b..6d5b746637b 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -190,10 +190,6 @@ static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,  		hash_buff = xbuf[0]; -		ret = -EINVAL; -		if (WARN_ON(template[i].psize > PAGE_SIZE)) -			goto out; -  		memcpy(hash_buff, template[i].plaintext, template[i].psize);  		sg_init_one(&sg[0], hash_buff, template[i].psize); @@ -2252,6 +2248,15 @@ static const struct alg_test_desc alg_test_descs[] = {  			}  		}  	}, { +		.alg = "vmac(aes)", +		.test = alg_test_hash, +		.suite = { +			.hash = { +				.vecs = aes_vmac128_tv_template, +				.count = VMAC_AES_TEST_VECTORS +			} +		} +	}, {  		.alg = "wp256",  		.test = alg_test_hash,  		.suite = { @@ -2348,6 +2353,7 @@ static int alg_find_test(const char *alg)  int alg_test(const char *driver, const char *alg, u32 type, u32 mask)  {  	int i; +	int j;  	int rc;  	if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) { @@ -2369,14 +2375,22 @@ int alg_test(const char *driver, const char *alg, u32 type, u32 mask)  	}  	i = alg_find_test(alg); -	if (i < 0) +	j = alg_find_test(driver); +	if (i < 0 && j < 0)  		goto notest; -	if (fips_enabled && !alg_test_descs[i].fips_allowed) +	if (fips_enabled && ((i >= 0 && !alg_test_descs[i].fips_allowed) || +			     (j >= 0 && !alg_test_descs[j].fips_allowed)))  		goto non_fips_alg; -	rc = alg_test_descs[i].test(alg_test_descs + i, driver, -				      type, mask); +	rc = 0; +	if (i >= 0) +		rc |= alg_test_descs[i].test(alg_test_descs + i, driver, +					     type, mask); +	if (j >= 0) +		rc |= alg_test_descs[j].test(alg_test_descs + j, driver, +					     type, mask); +  test_done:  	if (fips_enabled && rc)  		panic("%s: %s alg self test failed in fips mode!\n", driver, alg);  |