summaryrefslogtreecommitdiffstats
path: root/crypto/testmgr.c
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2019-04-12 00:57:37 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2019-04-18 10:15:03 -0400
commit951d13328a8a366a3bc2f9321636ee09e6f61c99 (patch)
tree0610a3d0349f43ca25c919356cd005e48bd6854c /crypto/testmgr.c
parent5283a8ee9badf699bd4a5a622011f9d4d50fecde (diff)
crypto: testmgr - identify test vectors by name rather than number
In preparation for fuzz testing algorithms against their generic implementation, make error messages in testmgr identify test vectors by name rather than index. Built-in test vectors are simply "named" by their index in testmgr.h, as before. But (in later patches) generated test vectors will be given more descriptive names to help developers debug problems detected with them. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/testmgr.c')
-rw-r--r--crypto/testmgr.c183
1 files changed, 96 insertions, 87 deletions
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 675446157721..834eea50dfa7 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -928,17 +928,17 @@ static int do_ahash_op(int (*op)(struct ahash_request *req),
928 928
929static int check_nonfinal_hash_op(const char *op, int err, 929static int check_nonfinal_hash_op(const char *op, int err,
930 u8 *result, unsigned int digestsize, 930 u8 *result, unsigned int digestsize,
931 const char *driver, unsigned int vec_num, 931 const char *driver, const char *vec_name,
932 const struct testvec_config *cfg) 932 const struct testvec_config *cfg)
933{ 933{
934 if (err) { 934 if (err) {
935 pr_err("alg: hash: %s %s() failed with err %d on test vector %u, cfg=\"%s\"\n", 935 pr_err("alg: hash: %s %s() failed with err %d on test vector %s, cfg=\"%s\"\n",
936 driver, op, err, vec_num, cfg->name); 936 driver, op, err, vec_name, cfg->name);
937 return err; 937 return err;
938 } 938 }
939 if (!testmgr_is_poison(result, digestsize)) { 939 if (!testmgr_is_poison(result, digestsize)) {
940 pr_err("alg: hash: %s %s() used result buffer on test vector %u, cfg=\"%s\"\n", 940 pr_err("alg: hash: %s %s() used result buffer on test vector %s, cfg=\"%s\"\n",
941 driver, op, vec_num, cfg->name); 941 driver, op, vec_name, cfg->name);
942 return -EINVAL; 942 return -EINVAL;
943 } 943 }
944 return 0; 944 return 0;
@@ -946,7 +946,7 @@ static int check_nonfinal_hash_op(const char *op, int err,
946 946
947static int test_hash_vec_cfg(const char *driver, 947static int test_hash_vec_cfg(const char *driver,
948 const struct hash_testvec *vec, 948 const struct hash_testvec *vec,
949 unsigned int vec_num, 949 const char *vec_name,
950 const struct testvec_config *cfg, 950 const struct testvec_config *cfg,
951 struct ahash_request *req, 951 struct ahash_request *req,
952 struct test_sglist *tsgl, 952 struct test_sglist *tsgl,
@@ -973,14 +973,14 @@ static int test_hash_vec_cfg(const char *driver,
973 if (err) { 973 if (err) {
974 if (err == vec->setkey_error) 974 if (err == vec->setkey_error)
975 return 0; 975 return 0;
976 pr_err("alg: hash: %s setkey failed on test vector %u; expected_error=%d, actual_error=%d, flags=%#x\n", 976 pr_err("alg: hash: %s setkey failed on test vector %s; expected_error=%d, actual_error=%d, flags=%#x\n",
977 driver, vec_num, vec->setkey_error, err, 977 driver, vec_name, vec->setkey_error, err,
978 crypto_ahash_get_flags(tfm)); 978 crypto_ahash_get_flags(tfm));
979 return err; 979 return err;
980 } 980 }
981 if (vec->setkey_error) { 981 if (vec->setkey_error) {
982 pr_err("alg: hash: %s setkey unexpectedly succeeded on test vector %u; expected_error=%d\n", 982 pr_err("alg: hash: %s setkey unexpectedly succeeded on test vector %s; expected_error=%d\n",
983 driver, vec_num, vec->setkey_error); 983 driver, vec_name, vec->setkey_error);
984 return -EINVAL; 984 return -EINVAL;
985 } 985 }
986 } 986 }
@@ -992,8 +992,8 @@ static int test_hash_vec_cfg(const char *driver,
992 err = build_test_sglist(tsgl, cfg->src_divs, alignmask, vec->psize, 992 err = build_test_sglist(tsgl, cfg->src_divs, alignmask, vec->psize,
993 &input, divs); 993 &input, divs);
994 if (err) { 994 if (err) {
995 pr_err("alg: hash: %s: error preparing scatterlist for test vector %u, cfg=\"%s\"\n", 995 pr_err("alg: hash: %s: error preparing scatterlist for test vector %s, cfg=\"%s\"\n",
996 driver, vec_num, cfg->name); 996 driver, vec_name, cfg->name);
997 return err; 997 return err;
998 } 998 }
999 999
@@ -1012,14 +1012,14 @@ static int test_hash_vec_cfg(const char *driver,
1012 if (err) { 1012 if (err) {
1013 if (err == vec->digest_error) 1013 if (err == vec->digest_error)
1014 return 0; 1014 return 0;
1015 pr_err("alg: hash: %s digest() failed on test vector %u; expected_error=%d, actual_error=%d, cfg=\"%s\"\n", 1015 pr_err("alg: hash: %s digest() failed on test vector %s; expected_error=%d, actual_error=%d, cfg=\"%s\"\n",
1016 driver, vec_num, vec->digest_error, err, 1016 driver, vec_name, vec->digest_error, err,
1017 cfg->name); 1017 cfg->name);
1018 return err; 1018 return err;
1019 } 1019 }
1020 if (vec->digest_error) { 1020 if (vec->digest_error) {
1021 pr_err("alg: hash: %s digest() unexpectedly succeeded on test vector %u; expected_error=%d, cfg=\"%s\"\n", 1021 pr_err("alg: hash: %s digest() unexpectedly succeeded on test vector %s; expected_error=%d, cfg=\"%s\"\n",
1022 driver, vec_num, vec->digest_error, cfg->name); 1022 driver, vec_name, vec->digest_error, cfg->name);
1023 return -EINVAL; 1023 return -EINVAL;
1024 } 1024 }
1025 goto result_ready; 1025 goto result_ready;
@@ -1031,7 +1031,7 @@ static int test_hash_vec_cfg(const char *driver,
1031 ahash_request_set_crypt(req, NULL, result, 0); 1031 ahash_request_set_crypt(req, NULL, result, 0);
1032 err = do_ahash_op(crypto_ahash_init, req, &wait, cfg->nosimd); 1032 err = do_ahash_op(crypto_ahash_init, req, &wait, cfg->nosimd);
1033 err = check_nonfinal_hash_op("init", err, result, digestsize, 1033 err = check_nonfinal_hash_op("init", err, result, digestsize,
1034 driver, vec_num, cfg); 1034 driver, vec_name, cfg);
1035 if (err) 1035 if (err)
1036 return err; 1036 return err;
1037 1037
@@ -1049,7 +1049,7 @@ static int test_hash_vec_cfg(const char *driver,
1049 divs[i]->nosimd); 1049 divs[i]->nosimd);
1050 err = check_nonfinal_hash_op("update", err, 1050 err = check_nonfinal_hash_op("update", err,
1051 result, digestsize, 1051 result, digestsize,
1052 driver, vec_num, cfg); 1052 driver, vec_name, cfg);
1053 if (err) 1053 if (err)
1054 return err; 1054 return err;
1055 pending_sgl = NULL; 1055 pending_sgl = NULL;
@@ -1062,13 +1062,13 @@ static int test_hash_vec_cfg(const char *driver,
1062 err = crypto_ahash_export(req, hashstate); 1062 err = crypto_ahash_export(req, hashstate);
1063 err = check_nonfinal_hash_op("export", err, 1063 err = check_nonfinal_hash_op("export", err,
1064 result, digestsize, 1064 result, digestsize,
1065 driver, vec_num, cfg); 1065 driver, vec_name, cfg);
1066 if (err) 1066 if (err)
1067 return err; 1067 return err;
1068 if (!testmgr_is_poison(hashstate + statesize, 1068 if (!testmgr_is_poison(hashstate + statesize,
1069 TESTMGR_POISON_LEN)) { 1069 TESTMGR_POISON_LEN)) {
1070 pr_err("alg: hash: %s export() overran state buffer on test vector %u, cfg=\"%s\"\n", 1070 pr_err("alg: hash: %s export() overran state buffer on test vector %s, cfg=\"%s\"\n",
1071 driver, vec_num, cfg->name); 1071 driver, vec_name, cfg->name);
1072 return -EOVERFLOW; 1072 return -EOVERFLOW;
1073 } 1073 }
1074 1074
@@ -1076,7 +1076,7 @@ static int test_hash_vec_cfg(const char *driver,
1076 err = crypto_ahash_import(req, hashstate); 1076 err = crypto_ahash_import(req, hashstate);
1077 err = check_nonfinal_hash_op("import", err, 1077 err = check_nonfinal_hash_op("import", err,
1078 result, digestsize, 1078 result, digestsize,
1079 driver, vec_num, cfg); 1079 driver, vec_name, cfg);
1080 if (err) 1080 if (err)
1081 return err; 1081 return err;
1082 } 1082 }
@@ -1091,21 +1091,21 @@ static int test_hash_vec_cfg(const char *driver,
1091 /* finish with update() and final() */ 1091 /* finish with update() and final() */
1092 err = do_ahash_op(crypto_ahash_update, req, &wait, cfg->nosimd); 1092 err = do_ahash_op(crypto_ahash_update, req, &wait, cfg->nosimd);
1093 err = check_nonfinal_hash_op("update", err, result, digestsize, 1093 err = check_nonfinal_hash_op("update", err, result, digestsize,
1094 driver, vec_num, cfg); 1094 driver, vec_name, cfg);
1095 if (err) 1095 if (err)
1096 return err; 1096 return err;
1097 err = do_ahash_op(crypto_ahash_final, req, &wait, cfg->nosimd); 1097 err = do_ahash_op(crypto_ahash_final, req, &wait, cfg->nosimd);
1098 if (err) { 1098 if (err) {
1099 pr_err("alg: hash: %s final() failed with err %d on test vector %u, cfg=\"%s\"\n", 1099 pr_err("alg: hash: %s final() failed with err %d on test vector %s, cfg=\"%s\"\n",
1100 driver, err, vec_num, cfg->name); 1100 driver, err, vec_name, cfg->name);
1101 return err; 1101 return err;
1102 } 1102 }
1103 } else { 1103 } else {
1104 /* finish with finup() */ 1104 /* finish with finup() */
1105 err = do_ahash_op(crypto_ahash_finup, req, &wait, cfg->nosimd); 1105 err = do_ahash_op(crypto_ahash_finup, req, &wait, cfg->nosimd);
1106 if (err) { 1106 if (err) {
1107 pr_err("alg: hash: %s finup() failed with err %d on test vector %u, cfg=\"%s\"\n", 1107 pr_err("alg: hash: %s finup() failed with err %d on test vector %s, cfg=\"%s\"\n",
1108 driver, err, vec_num, cfg->name); 1108 driver, err, vec_name, cfg->name);
1109 return err; 1109 return err;
1110 } 1110 }
1111 } 1111 }
@@ -1113,13 +1113,13 @@ static int test_hash_vec_cfg(const char *driver,
1113result_ready: 1113result_ready:
1114 /* Check that the algorithm produced the correct digest */ 1114 /* Check that the algorithm produced the correct digest */
1115 if (memcmp(result, vec->digest, digestsize) != 0) { 1115 if (memcmp(result, vec->digest, digestsize) != 0) {
1116 pr_err("alg: hash: %s test failed (wrong result) on test vector %u, cfg=\"%s\"\n", 1116 pr_err("alg: hash: %s test failed (wrong result) on test vector %s, cfg=\"%s\"\n",
1117 driver, vec_num, cfg->name); 1117 driver, vec_name, cfg->name);
1118 return -EINVAL; 1118 return -EINVAL;
1119 } 1119 }
1120 if (!testmgr_is_poison(&result[digestsize], TESTMGR_POISON_LEN)) { 1120 if (!testmgr_is_poison(&result[digestsize], TESTMGR_POISON_LEN)) {
1121 pr_err("alg: hash: %s overran result buffer on test vector %u, cfg=\"%s\"\n", 1121 pr_err("alg: hash: %s overran result buffer on test vector %s, cfg=\"%s\"\n",
1122 driver, vec_num, cfg->name); 1122 driver, vec_name, cfg->name);
1123 return -EOVERFLOW; 1123 return -EOVERFLOW;
1124 } 1124 }
1125 1125
@@ -1130,11 +1130,14 @@ static int test_hash_vec(const char *driver, const struct hash_testvec *vec,
1130 unsigned int vec_num, struct ahash_request *req, 1130 unsigned int vec_num, struct ahash_request *req,
1131 struct test_sglist *tsgl, u8 *hashstate) 1131 struct test_sglist *tsgl, u8 *hashstate)
1132{ 1132{
1133 char vec_name[16];
1133 unsigned int i; 1134 unsigned int i;
1134 int err; 1135 int err;
1135 1136
1137 sprintf(vec_name, "%u", vec_num);
1138
1136 for (i = 0; i < ARRAY_SIZE(default_hash_testvec_configs); i++) { 1139 for (i = 0; i < ARRAY_SIZE(default_hash_testvec_configs); i++) {
1137 err = test_hash_vec_cfg(driver, vec, vec_num, 1140 err = test_hash_vec_cfg(driver, vec, vec_name,
1138 &default_hash_testvec_configs[i], 1141 &default_hash_testvec_configs[i],
1139 req, tsgl, hashstate); 1142 req, tsgl, hashstate);
1140 if (err) 1143 if (err)
@@ -1149,7 +1152,7 @@ static int test_hash_vec(const char *driver, const struct hash_testvec *vec,
1149 for (i = 0; i < fuzz_iterations; i++) { 1152 for (i = 0; i < fuzz_iterations; i++) {
1150 generate_random_testvec_config(&cfg, cfgname, 1153 generate_random_testvec_config(&cfg, cfgname,
1151 sizeof(cfgname)); 1154 sizeof(cfgname));
1152 err = test_hash_vec_cfg(driver, vec, vec_num, &cfg, 1155 err = test_hash_vec_cfg(driver, vec, vec_name, &cfg,
1153 req, tsgl, hashstate); 1156 req, tsgl, hashstate);
1154 if (err) 1157 if (err)
1155 return err; 1158 return err;
@@ -1261,7 +1264,7 @@ static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
1261 1264
1262static int test_aead_vec_cfg(const char *driver, int enc, 1265static int test_aead_vec_cfg(const char *driver, int enc,
1263 const struct aead_testvec *vec, 1266 const struct aead_testvec *vec,
1264 unsigned int vec_num, 1267 const char *vec_name,
1265 const struct testvec_config *cfg, 1268 const struct testvec_config *cfg,
1266 struct aead_request *req, 1269 struct aead_request *req,
1267 struct cipher_test_sglists *tsgls) 1270 struct cipher_test_sglists *tsgls)
@@ -1288,27 +1291,27 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1288 crypto_aead_clear_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); 1291 crypto_aead_clear_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
1289 err = crypto_aead_setkey(tfm, vec->key, vec->klen); 1292 err = crypto_aead_setkey(tfm, vec->key, vec->klen);
1290 if (err && err != vec->setkey_error) { 1293 if (err && err != vec->setkey_error) {
1291 pr_err("alg: aead: %s setkey failed on test vector %u; expected_error=%d, actual_error=%d, flags=%#x\n", 1294 pr_err("alg: aead: %s setkey failed on test vector %s; expected_error=%d, actual_error=%d, flags=%#x\n",
1292 driver, vec_num, vec->setkey_error, err, 1295 driver, vec_name, vec->setkey_error, err,
1293 crypto_aead_get_flags(tfm)); 1296 crypto_aead_get_flags(tfm));
1294 return err; 1297 return err;
1295 } 1298 }
1296 if (!err && vec->setkey_error) { 1299 if (!err && vec->setkey_error) {
1297 pr_err("alg: aead: %s setkey unexpectedly succeeded on test vector %u; expected_error=%d\n", 1300 pr_err("alg: aead: %s setkey unexpectedly succeeded on test vector %s; expected_error=%d\n",
1298 driver, vec_num, vec->setkey_error); 1301 driver, vec_name, vec->setkey_error);
1299 return -EINVAL; 1302 return -EINVAL;
1300 } 1303 }
1301 1304
1302 /* Set the authentication tag size */ 1305 /* Set the authentication tag size */
1303 err = crypto_aead_setauthsize(tfm, authsize); 1306 err = crypto_aead_setauthsize(tfm, authsize);
1304 if (err && err != vec->setauthsize_error) { 1307 if (err && err != vec->setauthsize_error) {
1305 pr_err("alg: aead: %s setauthsize failed on test vector %u; expected_error=%d, actual_error=%d\n", 1308 pr_err("alg: aead: %s setauthsize failed on test vector %s; expected_error=%d, actual_error=%d\n",
1306 driver, vec_num, vec->setauthsize_error, err); 1309 driver, vec_name, vec->setauthsize_error, err);
1307 return err; 1310 return err;
1308 } 1311 }
1309 if (!err && vec->setauthsize_error) { 1312 if (!err && vec->setauthsize_error) {
1310 pr_err("alg: aead: %s setauthsize unexpectedly succeeded on test vector %u; expected_error=%d\n", 1313 pr_err("alg: aead: %s setauthsize unexpectedly succeeded on test vector %s; expected_error=%d\n",
1311 driver, vec_num, vec->setauthsize_error); 1314 driver, vec_name, vec->setauthsize_error);
1312 return -EINVAL; 1315 return -EINVAL;
1313 } 1316 }
1314 1317
@@ -1335,8 +1338,8 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1335 vec->plen), 1338 vec->plen),
1336 input, 2); 1339 input, 2);
1337 if (err) { 1340 if (err) {
1338 pr_err("alg: aead: %s %s: error preparing scatterlists for test vector %u, cfg=\"%s\"\n", 1341 pr_err("alg: aead: %s %s: error preparing scatterlists for test vector %s, cfg=\"%s\"\n",
1339 driver, op, vec_num, cfg->name); 1342 driver, op, vec_name, cfg->name);
1340 return err; 1343 return err;
1341 } 1344 }
1342 1345
@@ -1363,8 +1366,8 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1363 req->base.complete != crypto_req_done || 1366 req->base.complete != crypto_req_done ||
1364 req->base.flags != req_flags || 1367 req->base.flags != req_flags ||
1365 req->base.data != &wait) { 1368 req->base.data != &wait) {
1366 pr_err("alg: aead: %s %s corrupted request struct on test vector %u, cfg=\"%s\"\n", 1369 pr_err("alg: aead: %s %s corrupted request struct on test vector %s, cfg=\"%s\"\n",
1367 driver, op, vec_num, cfg->name); 1370 driver, op, vec_name, cfg->name);
1368 if (req->cryptlen != (enc ? vec->plen : vec->clen)) 1371 if (req->cryptlen != (enc ? vec->plen : vec->clen))
1369 pr_err("alg: aead: changed 'req->cryptlen'\n"); 1372 pr_err("alg: aead: changed 'req->cryptlen'\n");
1370 if (req->assoclen != vec->alen) 1373 if (req->assoclen != vec->alen)
@@ -1386,14 +1389,14 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1386 return -EINVAL; 1389 return -EINVAL;
1387 } 1390 }
1388 if (is_test_sglist_corrupted(&tsgls->src)) { 1391 if (is_test_sglist_corrupted(&tsgls->src)) {
1389 pr_err("alg: aead: %s %s corrupted src sgl on test vector %u, cfg=\"%s\"\n", 1392 pr_err("alg: aead: %s %s corrupted src sgl on test vector %s, cfg=\"%s\"\n",
1390 driver, op, vec_num, cfg->name); 1393 driver, op, vec_name, cfg->name);
1391 return -EINVAL; 1394 return -EINVAL;
1392 } 1395 }
1393 if (tsgls->dst.sgl_ptr != tsgls->src.sgl && 1396 if (tsgls->dst.sgl_ptr != tsgls->src.sgl &&
1394 is_test_sglist_corrupted(&tsgls->dst)) { 1397 is_test_sglist_corrupted(&tsgls->dst)) {
1395 pr_err("alg: aead: %s %s corrupted dst sgl on test vector %u, cfg=\"%s\"\n", 1398 pr_err("alg: aead: %s %s corrupted dst sgl on test vector %s, cfg=\"%s\"\n",
1396 driver, op, vec_num, cfg->name); 1399 driver, op, vec_name, cfg->name);
1397 return -EINVAL; 1400 return -EINVAL;
1398 } 1401 }
1399 1402
@@ -1402,13 +1405,13 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1402 if (err) { 1405 if (err) {
1403 if (err == expected_error) 1406 if (err == expected_error)
1404 return 0; 1407 return 0;
1405 pr_err("alg: aead: %s %s failed on test vector %u; expected_error=%d, actual_error=%d, cfg=\"%s\"\n", 1408 pr_err("alg: aead: %s %s failed on test vector %s; expected_error=%d, actual_error=%d, cfg=\"%s\"\n",
1406 driver, op, vec_num, expected_error, err, cfg->name); 1409 driver, op, vec_name, expected_error, err, cfg->name);
1407 return err; 1410 return err;
1408 } 1411 }
1409 if (expected_error) { 1412 if (expected_error) {
1410 pr_err("alg: aead: %s %s unexpectedly succeeded on test vector %u; expected_error=%d, cfg=\"%s\"\n", 1413 pr_err("alg: aead: %s %s unexpectedly succeeded on test vector %s; expected_error=%d, cfg=\"%s\"\n",
1411 driver, op, vec_num, expected_error, cfg->name); 1414 driver, op, vec_name, expected_error, cfg->name);
1412 return -EINVAL; 1415 return -EINVAL;
1413 } 1416 }
1414 1417
@@ -1417,13 +1420,13 @@ static int test_aead_vec_cfg(const char *driver, int enc,
1417 enc ? vec->clen : vec->plen, 1420 enc ? vec->clen : vec->plen,
1418 vec->alen, enc || !cfg->inplace); 1421 vec->alen, enc || !cfg->inplace);
1419 if (err == -EOVERFLOW) { 1422 if (err == -EOVERFLOW) {
1420 pr_err("alg: aead: %s %s overran dst buffer on test vector %u, cfg=\"%s\"\n", 1423 pr_err("alg: aead: %s %s overran dst buffer on test vector %s, cfg=\"%s\"\n",
1421 driver, op, vec_num, cfg->name); 1424 driver, op, vec_name, cfg->name);
1422 return err; 1425 return err;
1423 } 1426 }
1424 if (err) { 1427 if (err) {
1425 pr_err("alg: aead: %s %s test failed (wrong result) on test vector %u, cfg=\"%s\"\n", 1428 pr_err("alg: aead: %s %s test failed (wrong result) on test vector %s, cfg=\"%s\"\n",
1426 driver, op, vec_num, cfg->name); 1429 driver, op, vec_name, cfg->name);
1427 return err; 1430 return err;
1428 } 1431 }
1429 1432
@@ -1435,14 +1438,17 @@ static int test_aead_vec(const char *driver, int enc,
1435 struct aead_request *req, 1438 struct aead_request *req,
1436 struct cipher_test_sglists *tsgls) 1439 struct cipher_test_sglists *tsgls)
1437{ 1440{
1441 char vec_name[16];
1438 unsigned int i; 1442 unsigned int i;
1439 int err; 1443 int err;
1440 1444
1441 if (enc && vec->novrfy) 1445 if (enc && vec->novrfy)
1442 return 0; 1446 return 0;
1443 1447
1448 sprintf(vec_name, "%u", vec_num);
1449
1444 for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) { 1450 for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) {
1445 err = test_aead_vec_cfg(driver, enc, vec, vec_num, 1451 err = test_aead_vec_cfg(driver, enc, vec, vec_name,
1446 &default_cipher_testvec_configs[i], 1452 &default_cipher_testvec_configs[i],
1447 req, tsgls); 1453 req, tsgls);
1448 if (err) 1454 if (err)
@@ -1457,7 +1463,7 @@ static int test_aead_vec(const char *driver, int enc,
1457 for (i = 0; i < fuzz_iterations; i++) { 1463 for (i = 0; i < fuzz_iterations; i++) {
1458 generate_random_testvec_config(&cfg, cfgname, 1464 generate_random_testvec_config(&cfg, cfgname,
1459 sizeof(cfgname)); 1465 sizeof(cfgname));
1460 err = test_aead_vec_cfg(driver, enc, vec, vec_num, 1466 err = test_aead_vec_cfg(driver, enc, vec, vec_name,
1461 &cfg, req, tsgls); 1467 &cfg, req, tsgls);
1462 if (err) 1468 if (err)
1463 return err; 1469 return err;
@@ -1622,7 +1628,7 @@ out_nobuf:
1622 1628
1623static int test_skcipher_vec_cfg(const char *driver, int enc, 1629static int test_skcipher_vec_cfg(const char *driver, int enc,
1624 const struct cipher_testvec *vec, 1630 const struct cipher_testvec *vec,
1625 unsigned int vec_num, 1631 const char *vec_name,
1626 const struct testvec_config *cfg, 1632 const struct testvec_config *cfg,
1627 struct skcipher_request *req, 1633 struct skcipher_request *req,
1628 struct cipher_test_sglists *tsgls) 1634 struct cipher_test_sglists *tsgls)
@@ -1650,14 +1656,14 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1650 if (err) { 1656 if (err) {
1651 if (err == vec->setkey_error) 1657 if (err == vec->setkey_error)
1652 return 0; 1658 return 0;
1653 pr_err("alg: skcipher: %s setkey failed on test vector %u; expected_error=%d, actual_error=%d, flags=%#x\n", 1659 pr_err("alg: skcipher: %s setkey failed on test vector %s; expected_error=%d, actual_error=%d, flags=%#x\n",
1654 driver, vec_num, vec->setkey_error, err, 1660 driver, vec_name, vec->setkey_error, err,
1655 crypto_skcipher_get_flags(tfm)); 1661 crypto_skcipher_get_flags(tfm));
1656 return err; 1662 return err;
1657 } 1663 }
1658 if (vec->setkey_error) { 1664 if (vec->setkey_error) {
1659 pr_err("alg: skcipher: %s setkey unexpectedly succeeded on test vector %u; expected_error=%d\n", 1665 pr_err("alg: skcipher: %s setkey unexpectedly succeeded on test vector %s; expected_error=%d\n",
1660 driver, vec_num, vec->setkey_error); 1666 driver, vec_name, vec->setkey_error);
1661 return -EINVAL; 1667 return -EINVAL;
1662 } 1668 }
1663 1669
@@ -1673,8 +1679,8 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1673 memset(iv, 0, ivsize); 1679 memset(iv, 0, ivsize);
1674 } else { 1680 } else {
1675 if (vec->generates_iv) { 1681 if (vec->generates_iv) {
1676 pr_err("alg: skcipher: %s has ivsize=0 but test vector %u generates IV!\n", 1682 pr_err("alg: skcipher: %s has ivsize=0 but test vector %s generates IV!\n",
1677 driver, vec_num); 1683 driver, vec_name);
1678 return -EINVAL; 1684 return -EINVAL;
1679 } 1685 }
1680 iv = NULL; 1686 iv = NULL;
@@ -1686,8 +1692,8 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1686 err = build_cipher_test_sglists(tsgls, cfg, alignmask, 1692 err = build_cipher_test_sglists(tsgls, cfg, alignmask,
1687 vec->len, vec->len, &input, 1); 1693 vec->len, vec->len, &input, 1);
1688 if (err) { 1694 if (err) {
1689 pr_err("alg: skcipher: %s %s: error preparing scatterlists for test vector %u, cfg=\"%s\"\n", 1695 pr_err("alg: skcipher: %s %s: error preparing scatterlists for test vector %s, cfg=\"%s\"\n",
1690 driver, op, vec_num, cfg->name); 1696 driver, op, vec_name, cfg->name);
1691 return err; 1697 return err;
1692 } 1698 }
1693 1699
@@ -1712,8 +1718,8 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1712 req->base.complete != crypto_req_done || 1718 req->base.complete != crypto_req_done ||
1713 req->base.flags != req_flags || 1719 req->base.flags != req_flags ||
1714 req->base.data != &wait) { 1720 req->base.data != &wait) {
1715 pr_err("alg: skcipher: %s %s corrupted request struct on test vector %u, cfg=\"%s\"\n", 1721 pr_err("alg: skcipher: %s %s corrupted request struct on test vector %s, cfg=\"%s\"\n",
1716 driver, op, vec_num, cfg->name); 1722 driver, op, vec_name, cfg->name);
1717 if (req->cryptlen != vec->len) 1723 if (req->cryptlen != vec->len)
1718 pr_err("alg: skcipher: changed 'req->cryptlen'\n"); 1724 pr_err("alg: skcipher: changed 'req->cryptlen'\n");
1719 if (req->iv != iv) 1725 if (req->iv != iv)
@@ -1733,14 +1739,14 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1733 return -EINVAL; 1739 return -EINVAL;
1734 } 1740 }
1735 if (is_test_sglist_corrupted(&tsgls->src)) { 1741 if (is_test_sglist_corrupted(&tsgls->src)) {
1736 pr_err("alg: skcipher: %s %s corrupted src sgl on test vector %u, cfg=\"%s\"\n", 1742 pr_err("alg: skcipher: %s %s corrupted src sgl on test vector %s, cfg=\"%s\"\n",
1737 driver, op, vec_num, cfg->name); 1743 driver, op, vec_name, cfg->name);
1738 return -EINVAL; 1744 return -EINVAL;
1739 } 1745 }
1740 if (tsgls->dst.sgl_ptr != tsgls->src.sgl && 1746 if (tsgls->dst.sgl_ptr != tsgls->src.sgl &&
1741 is_test_sglist_corrupted(&tsgls->dst)) { 1747 is_test_sglist_corrupted(&tsgls->dst)) {
1742 pr_err("alg: skcipher: %s %s corrupted dst sgl on test vector %u, cfg=\"%s\"\n", 1748 pr_err("alg: skcipher: %s %s corrupted dst sgl on test vector %s, cfg=\"%s\"\n",
1743 driver, op, vec_num, cfg->name); 1749 driver, op, vec_name, cfg->name);
1744 return -EINVAL; 1750 return -EINVAL;
1745 } 1751 }
1746 1752
@@ -1748,13 +1754,13 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1748 if (err) { 1754 if (err) {
1749 if (err == vec->crypt_error) 1755 if (err == vec->crypt_error)
1750 return 0; 1756 return 0;
1751 pr_err("alg: skcipher: %s %s failed on test vector %u; expected_error=%d, actual_error=%d, cfg=\"%s\"\n", 1757 pr_err("alg: skcipher: %s %s failed on test vector %s; expected_error=%d, actual_error=%d, cfg=\"%s\"\n",
1752 driver, op, vec_num, vec->crypt_error, err, cfg->name); 1758 driver, op, vec_name, vec->crypt_error, err, cfg->name);
1753 return err; 1759 return err;
1754 } 1760 }
1755 if (vec->crypt_error) { 1761 if (vec->crypt_error) {
1756 pr_err("alg: skcipher: %s %s unexpectedly succeeded on test vector %u; expected_error=%d, cfg=\"%s\"\n", 1762 pr_err("alg: skcipher: %s %s unexpectedly succeeded on test vector %s; expected_error=%d, cfg=\"%s\"\n",
1757 driver, op, vec_num, vec->crypt_error, cfg->name); 1763 driver, op, vec_name, vec->crypt_error, cfg->name);
1758 return -EINVAL; 1764 return -EINVAL;
1759 } 1765 }
1760 1766
@@ -1762,20 +1768,20 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
1762 err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext, 1768 err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext,
1763 vec->len, 0, true); 1769 vec->len, 0, true);
1764 if (err == -EOVERFLOW) { 1770 if (err == -EOVERFLOW) {
1765 pr_err("alg: skcipher: %s %s overran dst buffer on test vector %u, cfg=\"%s\"\n", 1771 pr_err("alg: skcipher: %s %s overran dst buffer on test vector %s, cfg=\"%s\"\n",
1766 driver, op, vec_num, cfg->name); 1772 driver, op, vec_name, cfg->name);
1767 return err; 1773 return err;
1768 } 1774 }
1769 if (err) { 1775 if (err) {
1770 pr_err("alg: skcipher: %s %s test failed (wrong result) on test vector %u, cfg=\"%s\"\n", 1776 pr_err("alg: skcipher: %s %s test failed (wrong result) on test vector %s, cfg=\"%s\"\n",
1771 driver, op, vec_num, cfg->name); 1777 driver, op, vec_name, cfg->name);
1772 return err; 1778 return err;
1773 } 1779 }
1774 1780
1775 /* If applicable, check that the algorithm generated the correct IV */ 1781 /* If applicable, check that the algorithm generated the correct IV */
1776 if (vec->iv_out && memcmp(iv, vec->iv_out, ivsize) != 0) { 1782 if (vec->iv_out && memcmp(iv, vec->iv_out, ivsize) != 0) {
1777 pr_err("alg: skcipher: %s %s test failed (wrong output IV) on test vector %u, cfg=\"%s\"\n", 1783 pr_err("alg: skcipher: %s %s test failed (wrong output IV) on test vector %s, cfg=\"%s\"\n",
1778 driver, op, vec_num, cfg->name); 1784 driver, op, vec_name, cfg->name);
1779 hexdump(iv, ivsize); 1785 hexdump(iv, ivsize);
1780 return -EINVAL; 1786 return -EINVAL;
1781 } 1787 }
@@ -1789,14 +1795,17 @@ static int test_skcipher_vec(const char *driver, int enc,
1789 struct skcipher_request *req, 1795 struct skcipher_request *req,
1790 struct cipher_test_sglists *tsgls) 1796 struct cipher_test_sglists *tsgls)
1791{ 1797{
1798 char vec_name[16];
1792 unsigned int i; 1799 unsigned int i;
1793 int err; 1800 int err;
1794 1801
1795 if (fips_enabled && vec->fips_skip) 1802 if (fips_enabled && vec->fips_skip)
1796 return 0; 1803 return 0;
1797 1804
1805 sprintf(vec_name, "%u", vec_num);
1806
1798 for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) { 1807 for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) {
1799 err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, 1808 err = test_skcipher_vec_cfg(driver, enc, vec, vec_name,
1800 &default_cipher_testvec_configs[i], 1809 &default_cipher_testvec_configs[i],
1801 req, tsgls); 1810 req, tsgls);
1802 if (err) 1811 if (err)
@@ -1811,7 +1820,7 @@ static int test_skcipher_vec(const char *driver, int enc,
1811 for (i = 0; i < fuzz_iterations; i++) { 1820 for (i = 0; i < fuzz_iterations; i++) {
1812 generate_random_testvec_config(&cfg, cfgname, 1821 generate_random_testvec_config(&cfg, cfgname,
1813 sizeof(cfgname)); 1822 sizeof(cfgname));
1814 err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, 1823 err = test_skcipher_vec_cfg(driver, enc, vec, vec_name,
1815 &cfg, req, tsgls); 1824 &cfg, req, tsgls);
1816 if (err) 1825 if (err)
1817 return err; 1826 return err;