@@ -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
15171469static 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 */
15791488static 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,
17531653static 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
17791679static 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 */
18671766static 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 */
19881886static 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 );
21122008out :
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