Skip to content

Commit 5de0afb

Browse files
committed
Merge tag 'v6.15-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fix from Herbert Xu: - revert the multibuffer hash testing as it is buggy * tag 'v6.15-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: Revert "crypto: testmgr - Add multibuffer hash testing"
2 parents acc4d5f + 9764d5b commit 5de0afb

File tree

1 file changed

+24
-133
lines changed

1 file changed

+24
-133
lines changed

Diff for: crypto/testmgr.c

+24-133
Original file line numberDiff line numberDiff line change
@@ -302,13 +302,6 @@ struct test_sg_division {
302302
* @key_offset_relative_to_alignmask: if true, add the algorithm's alignmask to
303303
* the @key_offset
304304
* @finalization_type: what finalization function to use for hashes
305-
* @multibuffer: test with multibuffer
306-
* @multibuffer_index: random number used to generate the message index to use
307-
* for multibuffer.
308-
* @multibuffer_uneven: test with multibuffer using uneven lengths
309-
* @multibuffer_lens: random lengths to make chained request uneven
310-
* @multibuffer_count: random number used to generate the num_msgs parameter
311-
* for multibuffer
312305
* @nosimd: execute with SIMD disabled? Requires !CRYPTO_TFM_REQ_MAY_SLEEP.
313306
* This applies to the parts of the operation that aren't controlled
314307
* individually by @nosimd_setkey or @src_divs[].nosimd.
@@ -328,11 +321,6 @@ struct testvec_config {
328321
enum finalization_type finalization_type;
329322
bool nosimd;
330323
bool nosimd_setkey;
331-
bool multibuffer;
332-
unsigned int multibuffer_index;
333-
unsigned int multibuffer_count;
334-
bool multibuffer_uneven;
335-
unsigned int multibuffer_lens[MAX_MB_MSGS];
336324
};
337325

338326
#define TESTVEC_CONFIG_NAMELEN 192
@@ -572,7 +560,6 @@ struct test_sglist {
572560
char *bufs[XBUFSIZE];
573561
struct scatterlist sgl[XBUFSIZE];
574562
struct scatterlist sgl_saved[XBUFSIZE];
575-
struct scatterlist full_sgl[XBUFSIZE];
576563
struct scatterlist *sgl_ptr;
577564
unsigned int nents;
578565
};
@@ -686,11 +673,6 @@ static int build_test_sglist(struct test_sglist *tsgl,
686673
sg_mark_end(&tsgl->sgl[tsgl->nents - 1]);
687674
tsgl->sgl_ptr = tsgl->sgl;
688675
memcpy(tsgl->sgl_saved, tsgl->sgl, tsgl->nents * sizeof(tsgl->sgl[0]));
689-
690-
sg_init_table(tsgl->full_sgl, XBUFSIZE);
691-
for (i = 0; i < XBUFSIZE; i++)
692-
sg_set_buf(tsgl->full_sgl, tsgl->bufs[i], PAGE_SIZE * 2);
693-
694676
return 0;
695677
}
696678

@@ -1167,27 +1149,6 @@ static void generate_random_testvec_config(struct rnd_state *rng,
11671149
break;
11681150
}
11691151

1170-
if (prandom_bool(rng)) {
1171-
int i;
1172-
1173-
cfg->multibuffer = true;
1174-
cfg->multibuffer_count = prandom_u32_state(rng);
1175-
cfg->multibuffer_count %= MAX_MB_MSGS;
1176-
if (cfg->multibuffer_count++) {
1177-
cfg->multibuffer_index = prandom_u32_state(rng);
1178-
cfg->multibuffer_index %= cfg->multibuffer_count;
1179-
}
1180-
1181-
cfg->multibuffer_uneven = prandom_bool(rng);
1182-
for (i = 0; i < MAX_MB_MSGS; i++)
1183-
cfg->multibuffer_lens[i] =
1184-
generate_random_length(rng, PAGE_SIZE * 2 * XBUFSIZE);
1185-
1186-
p += scnprintf(p, end - p, " multibuffer(%d/%d%s)",
1187-
cfg->multibuffer_index, cfg->multibuffer_count,
1188-
cfg->multibuffer_uneven ? "/uneven" : "");
1189-
}
1190-
11911152
if (!(cfg->req_flags & CRYPTO_TFM_REQ_MAY_SLEEP)) {
11921153
if (prandom_bool(rng)) {
11931154
cfg->nosimd = true;
@@ -1492,7 +1453,6 @@ static int do_ahash_op(int (*op)(struct ahash_request *req),
14921453
struct ahash_request *req,
14931454
struct crypto_wait *wait, bool nosimd)
14941455
{
1495-
struct ahash_request *r2;
14961456
int err;
14971457

14981458
if (nosimd)
@@ -1503,15 +1463,7 @@ static int do_ahash_op(int (*op)(struct ahash_request *req),
15031463
if (nosimd)
15041464
crypto_reenable_simd_for_test();
15051465

1506-
err = crypto_wait_req(err, wait);
1507-
if (err)
1508-
return err;
1509-
1510-
list_for_each_entry(r2, &req->base.list, base.list)
1511-
if (r2->base.err)
1512-
return r2->base.err;
1513-
1514-
return 0;
1466+
return crypto_wait_req(err, wait);
15151467
}
15161468

15171469
static int check_nonfinal_ahash_op(const char *op, int err,
@@ -1532,75 +1484,27 @@ static int check_nonfinal_ahash_op(const char *op, int err,
15321484
return 0;
15331485
}
15341486

1535-
static void setup_ahash_multibuffer(
1536-
struct ahash_request *reqs[MAX_MB_MSGS],
1537-
const struct testvec_config *cfg,
1538-
struct test_sglist *tsgl)
1539-
{
1540-
struct scatterlist *sg = tsgl->full_sgl;
1541-
static u8 trash[HASH_MAX_DIGESTSIZE];
1542-
struct ahash_request *req = reqs[0];
1543-
unsigned int num_msgs;
1544-
unsigned int msg_idx;
1545-
int i;
1546-
1547-
if (!cfg->multibuffer)
1548-
return;
1549-
1550-
num_msgs = cfg->multibuffer_count;
1551-
if (num_msgs == 1)
1552-
return;
1553-
1554-
msg_idx = cfg->multibuffer_index;
1555-
for (i = 1; i < num_msgs; i++) {
1556-
struct ahash_request *r2 = reqs[i];
1557-
unsigned int nbytes = req->nbytes;
1558-
1559-
if (cfg->multibuffer_uneven)
1560-
nbytes = cfg->multibuffer_lens[i];
1561-
1562-
ahash_request_set_callback(r2, req->base.flags, NULL, NULL);
1563-
ahash_request_set_crypt(r2, sg, trash, nbytes);
1564-
ahash_request_chain(r2, req);
1565-
}
1566-
1567-
if (msg_idx) {
1568-
reqs[msg_idx]->src = req->src;
1569-
reqs[msg_idx]->nbytes = req->nbytes;
1570-
reqs[msg_idx]->result = req->result;
1571-
req->src = sg;
1572-
if (cfg->multibuffer_uneven)
1573-
req->nbytes = cfg->multibuffer_lens[0];
1574-
req->result = trash;
1575-
}
1576-
}
1577-
15781487
/* Test one hash test vector in one configuration, using the ahash API */
15791488
static int test_ahash_vec_cfg(const struct hash_testvec *vec,
15801489
const char *vec_name,
15811490
const struct testvec_config *cfg,
1582-
struct ahash_request *reqs[MAX_MB_MSGS],
1491+
struct ahash_request *req,
15831492
struct test_sglist *tsgl,
15841493
u8 *hashstate)
15851494
{
1586-
struct ahash_request *req = reqs[0];
15871495
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
15881496
const unsigned int digestsize = crypto_ahash_digestsize(tfm);
15891497
const unsigned int statesize = crypto_ahash_statesize(tfm);
15901498
const char *driver = crypto_ahash_driver_name(tfm);
15911499
const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags;
15921500
const struct test_sg_division *divs[XBUFSIZE];
1593-
struct ahash_request *reqi = req;
15941501
DECLARE_CRYPTO_WAIT(wait);
15951502
unsigned int i;
15961503
struct scatterlist *pending_sgl;
15971504
unsigned int pending_len;
15981505
u8 result[HASH_MAX_DIGESTSIZE + TESTMGR_POISON_LEN];
15991506
int err;
16001507

1601-
if (cfg->multibuffer)
1602-
reqi = reqs[cfg->multibuffer_index];
1603-
16041508
/* Set the key, if specified */
16051509
if (vec->ksize) {
16061510
err = do_setkey(crypto_ahash_setkey, tfm, vec->key, vec->ksize,
@@ -1630,7 +1534,7 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
16301534

16311535
/* Do the actual hashing */
16321536

1633-
testmgr_poison(reqi->__ctx, crypto_ahash_reqsize(tfm));
1537+
testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm));
16341538
testmgr_poison(result, digestsize + TESTMGR_POISON_LEN);
16351539

16361540
if (cfg->finalization_type == FINALIZATION_TYPE_DIGEST ||
@@ -1639,7 +1543,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
16391543
ahash_request_set_callback(req, req_flags, crypto_req_done,
16401544
&wait);
16411545
ahash_request_set_crypt(req, tsgl->sgl, result, vec->psize);
1642-
setup_ahash_multibuffer(reqs, cfg, tsgl);
16431546
err = do_ahash_op(crypto_ahash_digest, req, &wait, cfg->nosimd);
16441547
if (err) {
16451548
if (err == vec->digest_error)
@@ -1661,7 +1564,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
16611564

16621565
ahash_request_set_callback(req, req_flags, crypto_req_done, &wait);
16631566
ahash_request_set_crypt(req, NULL, result, 0);
1664-
setup_ahash_multibuffer(reqs, cfg, tsgl);
16651567
err = do_ahash_op(crypto_ahash_init, req, &wait, cfg->nosimd);
16661568
err = check_nonfinal_ahash_op("init", err, result, digestsize,
16671569
driver, vec_name, cfg);
@@ -1678,7 +1580,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
16781580
crypto_req_done, &wait);
16791581
ahash_request_set_crypt(req, pending_sgl, result,
16801582
pending_len);
1681-
setup_ahash_multibuffer(reqs, cfg, tsgl);
16821583
err = do_ahash_op(crypto_ahash_update, req, &wait,
16831584
divs[i]->nosimd);
16841585
err = check_nonfinal_ahash_op("update", err,
@@ -1693,7 +1594,7 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
16931594
/* Test ->export() and ->import() */
16941595
testmgr_poison(hashstate + statesize,
16951596
TESTMGR_POISON_LEN);
1696-
err = crypto_ahash_export(reqi, hashstate);
1597+
err = crypto_ahash_export(req, hashstate);
16971598
err = check_nonfinal_ahash_op("export", err,
16981599
result, digestsize,
16991600
driver, vec_name, cfg);
@@ -1706,8 +1607,8 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
17061607
return -EOVERFLOW;
17071608
}
17081609

1709-
testmgr_poison(reqi->__ctx, crypto_ahash_reqsize(tfm));
1710-
err = crypto_ahash_import(reqi, hashstate);
1610+
testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm));
1611+
err = crypto_ahash_import(req, hashstate);
17111612
err = check_nonfinal_ahash_op("import", err,
17121613
result, digestsize,
17131614
driver, vec_name, cfg);
@@ -1721,7 +1622,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
17211622

17221623
ahash_request_set_callback(req, req_flags, crypto_req_done, &wait);
17231624
ahash_request_set_crypt(req, pending_sgl, result, pending_len);
1724-
setup_ahash_multibuffer(reqs, cfg, tsgl);
17251625
if (cfg->finalization_type == FINALIZATION_TYPE_FINAL) {
17261626
/* finish with update() and final() */
17271627
err = do_ahash_op(crypto_ahash_update, req, &wait, cfg->nosimd);
@@ -1753,7 +1653,7 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
17531653
static int test_hash_vec_cfg(const struct hash_testvec *vec,
17541654
const char *vec_name,
17551655
const struct testvec_config *cfg,
1756-
struct ahash_request *reqs[MAX_MB_MSGS],
1656+
struct ahash_request *req,
17571657
struct shash_desc *desc,
17581658
struct test_sglist *tsgl,
17591659
u8 *hashstate)
@@ -1773,12 +1673,11 @@ static int test_hash_vec_cfg(const struct hash_testvec *vec,
17731673
return err;
17741674
}
17751675

1776-
return test_ahash_vec_cfg(vec, vec_name, cfg, reqs, tsgl, hashstate);
1676+
return test_ahash_vec_cfg(vec, vec_name, cfg, req, tsgl, hashstate);
17771677
}
17781678

17791679
static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num,
1780-
struct ahash_request *reqs[MAX_MB_MSGS],
1781-
struct shash_desc *desc,
1680+
struct ahash_request *req, struct shash_desc *desc,
17821681
struct test_sglist *tsgl, u8 *hashstate)
17831682
{
17841683
char vec_name[16];
@@ -1790,7 +1689,7 @@ static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num,
17901689
for (i = 0; i < ARRAY_SIZE(default_hash_testvec_configs); i++) {
17911690
err = test_hash_vec_cfg(vec, vec_name,
17921691
&default_hash_testvec_configs[i],
1793-
reqs, desc, tsgl, hashstate);
1692+
req, desc, tsgl, hashstate);
17941693
if (err)
17951694
return err;
17961695
}
@@ -1807,7 +1706,7 @@ static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num,
18071706
generate_random_testvec_config(&rng, &cfg, cfgname,
18081707
sizeof(cfgname));
18091708
err = test_hash_vec_cfg(vec, vec_name, &cfg,
1810-
reqs, desc, tsgl, hashstate);
1709+
req, desc, tsgl, hashstate);
18111710
if (err)
18121711
return err;
18131712
cond_resched();
@@ -1866,12 +1765,11 @@ static void generate_random_hash_testvec(struct rnd_state *rng,
18661765
*/
18671766
static int test_hash_vs_generic_impl(const char *generic_driver,
18681767
unsigned int maxkeysize,
1869-
struct ahash_request *reqs[MAX_MB_MSGS],
1768+
struct ahash_request *req,
18701769
struct shash_desc *desc,
18711770
struct test_sglist *tsgl,
18721771
u8 *hashstate)
18731772
{
1874-
struct ahash_request *req = reqs[0];
18751773
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
18761774
const unsigned int digestsize = crypto_ahash_digestsize(tfm);
18771775
const unsigned int blocksize = crypto_ahash_blocksize(tfm);
@@ -1969,7 +1867,7 @@ static int test_hash_vs_generic_impl(const char *generic_driver,
19691867
sizeof(cfgname));
19701868

19711869
err = test_hash_vec_cfg(&vec, vec_name, cfg,
1972-
reqs, desc, tsgl, hashstate);
1870+
req, desc, tsgl, hashstate);
19731871
if (err)
19741872
goto out;
19751873
cond_resched();
@@ -1987,7 +1885,7 @@ static int test_hash_vs_generic_impl(const char *generic_driver,
19871885
#else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */
19881886
static int test_hash_vs_generic_impl(const char *generic_driver,
19891887
unsigned int maxkeysize,
1990-
struct ahash_request *reqs[MAX_MB_MSGS],
1888+
struct ahash_request *req,
19911889
struct shash_desc *desc,
19921890
struct test_sglist *tsgl,
19931891
u8 *hashstate)
@@ -2034,8 +1932,8 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
20341932
u32 type, u32 mask,
20351933
const char *generic_driver, unsigned int maxkeysize)
20361934
{
2037-
struct ahash_request *reqs[MAX_MB_MSGS] = {};
20381935
struct crypto_ahash *atfm = NULL;
1936+
struct ahash_request *req = NULL;
20391937
struct crypto_shash *stfm = NULL;
20401938
struct shash_desc *desc = NULL;
20411939
struct test_sglist *tsgl = NULL;
@@ -2059,14 +1957,12 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
20591957
}
20601958
driver = crypto_ahash_driver_name(atfm);
20611959

2062-
for (i = 0; i < MAX_MB_MSGS; i++) {
2063-
reqs[i] = ahash_request_alloc(atfm, GFP_KERNEL);
2064-
if (!reqs[i]) {
2065-
pr_err("alg: hash: failed to allocate request for %s\n",
2066-
driver);
2067-
err = -ENOMEM;
2068-
goto out;
2069-
}
1960+
req = ahash_request_alloc(atfm, GFP_KERNEL);
1961+
if (!req) {
1962+
pr_err("alg: hash: failed to allocate request for %s\n",
1963+
driver);
1964+
err = -ENOMEM;
1965+
goto out;
20701966
}
20711967

20721968
/*
@@ -2102,12 +1998,12 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
21021998
if (fips_enabled && vecs[i].fips_skip)
21031999
continue;
21042000

2105-
err = test_hash_vec(&vecs[i], i, reqs, desc, tsgl, hashstate);
2001+
err = test_hash_vec(&vecs[i], i, req, desc, tsgl, hashstate);
21062002
if (err)
21072003
goto out;
21082004
cond_resched();
21092005
}
2110-
err = test_hash_vs_generic_impl(generic_driver, maxkeysize, reqs,
2006+
err = test_hash_vs_generic_impl(generic_driver, maxkeysize, req,
21112007
desc, tsgl, hashstate);
21122008
out:
21132009
kfree(hashstate);
@@ -2117,12 +2013,7 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
21172013
}
21182014
kfree(desc);
21192015
crypto_free_shash(stfm);
2120-
if (reqs[0]) {
2121-
ahash_request_set_callback(reqs[0], 0, NULL, NULL);
2122-
for (i = 1; i < MAX_MB_MSGS && reqs[i]; i++)
2123-
ahash_request_chain(reqs[i], reqs[0]);
2124-
ahash_request_free(reqs[0]);
2125-
}
2016+
ahash_request_free(req);
21262017
crypto_free_ahash(atfm);
21272018
return err;
21282019
}

0 commit comments

Comments
 (0)