@@ -302,13 +302,6 @@ struct test_sg_division {
302
302
* @key_offset_relative_to_alignmask: if true, add the algorithm's alignmask to
303
303
* the @key_offset
304
304
* @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
312
305
* @nosimd: execute with SIMD disabled? Requires !CRYPTO_TFM_REQ_MAY_SLEEP.
313
306
* This applies to the parts of the operation that aren't controlled
314
307
* individually by @nosimd_setkey or @src_divs[].nosimd.
@@ -328,11 +321,6 @@ struct testvec_config {
328
321
enum finalization_type finalization_type ;
329
322
bool nosimd ;
330
323
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 ];
336
324
};
337
325
338
326
#define TESTVEC_CONFIG_NAMELEN 192
@@ -572,7 +560,6 @@ struct test_sglist {
572
560
char * bufs [XBUFSIZE ];
573
561
struct scatterlist sgl [XBUFSIZE ];
574
562
struct scatterlist sgl_saved [XBUFSIZE ];
575
- struct scatterlist full_sgl [XBUFSIZE ];
576
563
struct scatterlist * sgl_ptr ;
577
564
unsigned int nents ;
578
565
};
@@ -686,11 +673,6 @@ static int build_test_sglist(struct test_sglist *tsgl,
686
673
sg_mark_end (& tsgl -> sgl [tsgl -> nents - 1 ]);
687
674
tsgl -> sgl_ptr = tsgl -> sgl ;
688
675
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
-
694
676
return 0 ;
695
677
}
696
678
@@ -1167,27 +1149,6 @@ static void generate_random_testvec_config(struct rnd_state *rng,
1167
1149
break ;
1168
1150
}
1169
1151
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
-
1191
1152
if (!(cfg -> req_flags & CRYPTO_TFM_REQ_MAY_SLEEP )) {
1192
1153
if (prandom_bool (rng )) {
1193
1154
cfg -> nosimd = true;
@@ -1492,7 +1453,6 @@ static int do_ahash_op(int (*op)(struct ahash_request *req),
1492
1453
struct ahash_request * req ,
1493
1454
struct crypto_wait * wait , bool nosimd )
1494
1455
{
1495
- struct ahash_request * r2 ;
1496
1456
int err ;
1497
1457
1498
1458
if (nosimd )
@@ -1503,15 +1463,7 @@ static int do_ahash_op(int (*op)(struct ahash_request *req),
1503
1463
if (nosimd )
1504
1464
crypto_reenable_simd_for_test ();
1505
1465
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 );
1515
1467
}
1516
1468
1517
1469
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,
1532
1484
return 0 ;
1533
1485
}
1534
1486
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
-
1578
1487
/* Test one hash test vector in one configuration, using the ahash API */
1579
1488
static int test_ahash_vec_cfg (const struct hash_testvec * vec ,
1580
1489
const char * vec_name ,
1581
1490
const struct testvec_config * cfg ,
1582
- struct ahash_request * reqs [ MAX_MB_MSGS ] ,
1491
+ struct ahash_request * req ,
1583
1492
struct test_sglist * tsgl ,
1584
1493
u8 * hashstate )
1585
1494
{
1586
- struct ahash_request * req = reqs [0 ];
1587
1495
struct crypto_ahash * tfm = crypto_ahash_reqtfm (req );
1588
1496
const unsigned int digestsize = crypto_ahash_digestsize (tfm );
1589
1497
const unsigned int statesize = crypto_ahash_statesize (tfm );
1590
1498
const char * driver = crypto_ahash_driver_name (tfm );
1591
1499
const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg -> req_flags ;
1592
1500
const struct test_sg_division * divs [XBUFSIZE ];
1593
- struct ahash_request * reqi = req ;
1594
1501
DECLARE_CRYPTO_WAIT (wait );
1595
1502
unsigned int i ;
1596
1503
struct scatterlist * pending_sgl ;
1597
1504
unsigned int pending_len ;
1598
1505
u8 result [HASH_MAX_DIGESTSIZE + TESTMGR_POISON_LEN ];
1599
1506
int err ;
1600
1507
1601
- if (cfg -> multibuffer )
1602
- reqi = reqs [cfg -> multibuffer_index ];
1603
-
1604
1508
/* Set the key, if specified */
1605
1509
if (vec -> ksize ) {
1606
1510
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,
1630
1534
1631
1535
/* Do the actual hashing */
1632
1536
1633
- testmgr_poison (reqi -> __ctx , crypto_ahash_reqsize (tfm ));
1537
+ testmgr_poison (req -> __ctx , crypto_ahash_reqsize (tfm ));
1634
1538
testmgr_poison (result , digestsize + TESTMGR_POISON_LEN );
1635
1539
1636
1540
if (cfg -> finalization_type == FINALIZATION_TYPE_DIGEST ||
@@ -1639,7 +1543,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1639
1543
ahash_request_set_callback (req , req_flags , crypto_req_done ,
1640
1544
& wait );
1641
1545
ahash_request_set_crypt (req , tsgl -> sgl , result , vec -> psize );
1642
- setup_ahash_multibuffer (reqs , cfg , tsgl );
1643
1546
err = do_ahash_op (crypto_ahash_digest , req , & wait , cfg -> nosimd );
1644
1547
if (err ) {
1645
1548
if (err == vec -> digest_error )
@@ -1661,7 +1564,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1661
1564
1662
1565
ahash_request_set_callback (req , req_flags , crypto_req_done , & wait );
1663
1566
ahash_request_set_crypt (req , NULL , result , 0 );
1664
- setup_ahash_multibuffer (reqs , cfg , tsgl );
1665
1567
err = do_ahash_op (crypto_ahash_init , req , & wait , cfg -> nosimd );
1666
1568
err = check_nonfinal_ahash_op ("init" , err , result , digestsize ,
1667
1569
driver , vec_name , cfg );
@@ -1678,7 +1580,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1678
1580
crypto_req_done , & wait );
1679
1581
ahash_request_set_crypt (req , pending_sgl , result ,
1680
1582
pending_len );
1681
- setup_ahash_multibuffer (reqs , cfg , tsgl );
1682
1583
err = do_ahash_op (crypto_ahash_update , req , & wait ,
1683
1584
divs [i ]-> nosimd );
1684
1585
err = check_nonfinal_ahash_op ("update" , err ,
@@ -1693,7 +1594,7 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1693
1594
/* Test ->export() and ->import() */
1694
1595
testmgr_poison (hashstate + statesize ,
1695
1596
TESTMGR_POISON_LEN );
1696
- err = crypto_ahash_export (reqi , hashstate );
1597
+ err = crypto_ahash_export (req , hashstate );
1697
1598
err = check_nonfinal_ahash_op ("export" , err ,
1698
1599
result , digestsize ,
1699
1600
driver , vec_name , cfg );
@@ -1706,8 +1607,8 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1706
1607
return - EOVERFLOW ;
1707
1608
}
1708
1609
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 );
1711
1612
err = check_nonfinal_ahash_op ("import" , err ,
1712
1613
result , digestsize ,
1713
1614
driver , vec_name , cfg );
@@ -1721,7 +1622,6 @@ static int test_ahash_vec_cfg(const struct hash_testvec *vec,
1721
1622
1722
1623
ahash_request_set_callback (req , req_flags , crypto_req_done , & wait );
1723
1624
ahash_request_set_crypt (req , pending_sgl , result , pending_len );
1724
- setup_ahash_multibuffer (reqs , cfg , tsgl );
1725
1625
if (cfg -> finalization_type == FINALIZATION_TYPE_FINAL ) {
1726
1626
/* finish with update() and final() */
1727
1627
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,
1753
1653
static int test_hash_vec_cfg (const struct hash_testvec * vec ,
1754
1654
const char * vec_name ,
1755
1655
const struct testvec_config * cfg ,
1756
- struct ahash_request * reqs [ MAX_MB_MSGS ] ,
1656
+ struct ahash_request * req ,
1757
1657
struct shash_desc * desc ,
1758
1658
struct test_sglist * tsgl ,
1759
1659
u8 * hashstate )
@@ -1773,12 +1673,11 @@ static int test_hash_vec_cfg(const struct hash_testvec *vec,
1773
1673
return err ;
1774
1674
}
1775
1675
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 );
1777
1677
}
1778
1678
1779
1679
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 ,
1782
1681
struct test_sglist * tsgl , u8 * hashstate )
1783
1682
{
1784
1683
char vec_name [16 ];
@@ -1790,7 +1689,7 @@ static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num,
1790
1689
for (i = 0 ; i < ARRAY_SIZE (default_hash_testvec_configs ); i ++ ) {
1791
1690
err = test_hash_vec_cfg (vec , vec_name ,
1792
1691
& default_hash_testvec_configs [i ],
1793
- reqs , desc , tsgl , hashstate );
1692
+ req , desc , tsgl , hashstate );
1794
1693
if (err )
1795
1694
return err ;
1796
1695
}
@@ -1807,7 +1706,7 @@ static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num,
1807
1706
generate_random_testvec_config (& rng , & cfg , cfgname ,
1808
1707
sizeof (cfgname ));
1809
1708
err = test_hash_vec_cfg (vec , vec_name , & cfg ,
1810
- reqs , desc , tsgl , hashstate );
1709
+ req , desc , tsgl , hashstate );
1811
1710
if (err )
1812
1711
return err ;
1813
1712
cond_resched ();
@@ -1866,12 +1765,11 @@ static void generate_random_hash_testvec(struct rnd_state *rng,
1866
1765
*/
1867
1766
static int test_hash_vs_generic_impl (const char * generic_driver ,
1868
1767
unsigned int maxkeysize ,
1869
- struct ahash_request * reqs [ MAX_MB_MSGS ] ,
1768
+ struct ahash_request * req ,
1870
1769
struct shash_desc * desc ,
1871
1770
struct test_sglist * tsgl ,
1872
1771
u8 * hashstate )
1873
1772
{
1874
- struct ahash_request * req = reqs [0 ];
1875
1773
struct crypto_ahash * tfm = crypto_ahash_reqtfm (req );
1876
1774
const unsigned int digestsize = crypto_ahash_digestsize (tfm );
1877
1775
const unsigned int blocksize = crypto_ahash_blocksize (tfm );
@@ -1969,7 +1867,7 @@ static int test_hash_vs_generic_impl(const char *generic_driver,
1969
1867
sizeof (cfgname ));
1970
1868
1971
1869
err = test_hash_vec_cfg (& vec , vec_name , cfg ,
1972
- reqs , desc , tsgl , hashstate );
1870
+ req , desc , tsgl , hashstate );
1973
1871
if (err )
1974
1872
goto out ;
1975
1873
cond_resched ();
@@ -1987,7 +1885,7 @@ static int test_hash_vs_generic_impl(const char *generic_driver,
1987
1885
#else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */
1988
1886
static int test_hash_vs_generic_impl (const char * generic_driver ,
1989
1887
unsigned int maxkeysize ,
1990
- struct ahash_request * reqs [ MAX_MB_MSGS ] ,
1888
+ struct ahash_request * req ,
1991
1889
struct shash_desc * desc ,
1992
1890
struct test_sglist * tsgl ,
1993
1891
u8 * hashstate )
@@ -2034,8 +1932,8 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
2034
1932
u32 type , u32 mask ,
2035
1933
const char * generic_driver , unsigned int maxkeysize )
2036
1934
{
2037
- struct ahash_request * reqs [MAX_MB_MSGS ] = {};
2038
1935
struct crypto_ahash * atfm = NULL ;
1936
+ struct ahash_request * req = NULL ;
2039
1937
struct crypto_shash * stfm = NULL ;
2040
1938
struct shash_desc * desc = NULL ;
2041
1939
struct test_sglist * tsgl = NULL ;
@@ -2059,14 +1957,12 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
2059
1957
}
2060
1958
driver = crypto_ahash_driver_name (atfm );
2061
1959
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 ;
2070
1966
}
2071
1967
2072
1968
/*
@@ -2102,12 +1998,12 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
2102
1998
if (fips_enabled && vecs [i ].fips_skip )
2103
1999
continue ;
2104
2000
2105
- err = test_hash_vec (& vecs [i ], i , reqs , desc , tsgl , hashstate );
2001
+ err = test_hash_vec (& vecs [i ], i , req , desc , tsgl , hashstate );
2106
2002
if (err )
2107
2003
goto out ;
2108
2004
cond_resched ();
2109
2005
}
2110
- err = test_hash_vs_generic_impl (generic_driver , maxkeysize , reqs ,
2006
+ err = test_hash_vs_generic_impl (generic_driver , maxkeysize , req ,
2111
2007
desc , tsgl , hashstate );
2112
2008
out :
2113
2009
kfree (hashstate );
@@ -2117,12 +2013,7 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
2117
2013
}
2118
2014
kfree (desc );
2119
2015
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 );
2126
2017
crypto_free_ahash (atfm );
2127
2018
return err ;
2128
2019
}
0 commit comments