Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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"

+24 -133
+24 -133
crypto/testmgr.c
··· 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. ··· 321 328 enum finalization_type finalization_type; 322 329 bool nosimd; 323 330 bool nosimd_setkey; 324 - bool multibuffer; 325 - unsigned int multibuffer_index; 326 - unsigned int multibuffer_count; 327 - bool multibuffer_uneven; 328 - unsigned int multibuffer_lens[MAX_MB_MSGS]; 329 331 }; 330 332 331 333 #define TESTVEC_CONFIG_NAMELEN 192 ··· 560 572 char *bufs[XBUFSIZE]; 561 573 struct scatterlist sgl[XBUFSIZE]; 562 574 struct scatterlist sgl_saved[XBUFSIZE]; 563 - struct scatterlist full_sgl[XBUFSIZE]; 564 575 struct scatterlist *sgl_ptr; 565 576 unsigned int nents; 566 577 }; ··· 673 686 sg_mark_end(&tsgl->sgl[tsgl->nents - 1]); 674 687 tsgl->sgl_ptr = tsgl->sgl; 675 688 memcpy(tsgl->sgl_saved, tsgl->sgl, tsgl->nents * sizeof(tsgl->sgl[0])); 676 - 677 - sg_init_table(tsgl->full_sgl, XBUFSIZE); 678 - for (i = 0; i < XBUFSIZE; i++) 679 - sg_set_buf(tsgl->full_sgl, tsgl->bufs[i], PAGE_SIZE * 2); 680 - 681 689 return 0; 682 690 } 683 691 ··· 1149 1167 break; 1150 1168 } 1151 1169 1152 - if (prandom_bool(rng)) { 1153 - int i; 1154 - 1155 - cfg->multibuffer = true; 1156 - cfg->multibuffer_count = prandom_u32_state(rng); 1157 - cfg->multibuffer_count %= MAX_MB_MSGS; 1158 - if (cfg->multibuffer_count++) { 1159 - cfg->multibuffer_index = prandom_u32_state(rng); 1160 - cfg->multibuffer_index %= cfg->multibuffer_count; 1161 - } 1162 - 1163 - cfg->multibuffer_uneven = prandom_bool(rng); 1164 - for (i = 0; i < MAX_MB_MSGS; i++) 1165 - cfg->multibuffer_lens[i] = 1166 - generate_random_length(rng, PAGE_SIZE * 2 * XBUFSIZE); 1167 - 1168 - p += scnprintf(p, end - p, " multibuffer(%d/%d%s)", 1169 - cfg->multibuffer_index, cfg->multibuffer_count, 1170 - cfg->multibuffer_uneven ? "/uneven" : ""); 1171 - } 1172 - 1173 1170 if (!(cfg->req_flags & CRYPTO_TFM_REQ_MAY_SLEEP)) { 1174 1171 if (prandom_bool(rng)) { 1175 1172 cfg->nosimd = true; ··· 1453 1492 struct ahash_request *req, 1454 1493 struct crypto_wait *wait, bool nosimd) 1455 1494 { 1456 - struct ahash_request *r2; 1457 1495 int err; 1458 1496 1459 1497 if (nosimd) ··· 1463 1503 if (nosimd) 1464 1504 crypto_reenable_simd_for_test(); 1465 1505 1466 - err = crypto_wait_req(err, wait); 1467 - if (err) 1468 - return err; 1469 - 1470 - list_for_each_entry(r2, &req->base.list, base.list) 1471 - if (r2->base.err) 1472 - return r2->base.err; 1473 - 1474 - return 0; 1506 + return crypto_wait_req(err, wait); 1475 1507 } 1476 1508 1477 1509 static int check_nonfinal_ahash_op(const char *op, int err, ··· 1484 1532 return 0; 1485 1533 } 1486 1534 1487 - static void setup_ahash_multibuffer( 1488 - struct ahash_request *reqs[MAX_MB_MSGS], 1489 - const struct testvec_config *cfg, 1490 - struct test_sglist *tsgl) 1491 - { 1492 - struct scatterlist *sg = tsgl->full_sgl; 1493 - static u8 trash[HASH_MAX_DIGESTSIZE]; 1494 - struct ahash_request *req = reqs[0]; 1495 - unsigned int num_msgs; 1496 - unsigned int msg_idx; 1497 - int i; 1498 - 1499 - if (!cfg->multibuffer) 1500 - return; 1501 - 1502 - num_msgs = cfg->multibuffer_count; 1503 - if (num_msgs == 1) 1504 - return; 1505 - 1506 - msg_idx = cfg->multibuffer_index; 1507 - for (i = 1; i < num_msgs; i++) { 1508 - struct ahash_request *r2 = reqs[i]; 1509 - unsigned int nbytes = req->nbytes; 1510 - 1511 - if (cfg->multibuffer_uneven) 1512 - nbytes = cfg->multibuffer_lens[i]; 1513 - 1514 - ahash_request_set_callback(r2, req->base.flags, NULL, NULL); 1515 - ahash_request_set_crypt(r2, sg, trash, nbytes); 1516 - ahash_request_chain(r2, req); 1517 - } 1518 - 1519 - if (msg_idx) { 1520 - reqs[msg_idx]->src = req->src; 1521 - reqs[msg_idx]->nbytes = req->nbytes; 1522 - reqs[msg_idx]->result = req->result; 1523 - req->src = sg; 1524 - if (cfg->multibuffer_uneven) 1525 - req->nbytes = cfg->multibuffer_lens[0]; 1526 - req->result = trash; 1527 - } 1528 - } 1529 - 1530 1535 /* Test one hash test vector in one configuration, using the ahash API */ 1531 1536 static int test_ahash_vec_cfg(const struct hash_testvec *vec, 1532 1537 const char *vec_name, 1533 1538 const struct testvec_config *cfg, 1534 - struct ahash_request *reqs[MAX_MB_MSGS], 1539 + struct ahash_request *req, 1535 1540 struct test_sglist *tsgl, 1536 1541 u8 *hashstate) 1537 1542 { 1538 - struct ahash_request *req = reqs[0]; 1539 1543 struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); 1540 1544 const unsigned int digestsize = crypto_ahash_digestsize(tfm); 1541 1545 const unsigned int statesize = crypto_ahash_statesize(tfm); 1542 1546 const char *driver = crypto_ahash_driver_name(tfm); 1543 1547 const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; 1544 1548 const struct test_sg_division *divs[XBUFSIZE]; 1545 - struct ahash_request *reqi = req; 1546 1549 DECLARE_CRYPTO_WAIT(wait); 1547 1550 unsigned int i; 1548 1551 struct scatterlist *pending_sgl; 1549 1552 unsigned int pending_len; 1550 1553 u8 result[HASH_MAX_DIGESTSIZE + TESTMGR_POISON_LEN]; 1551 1554 int err; 1552 - 1553 - if (cfg->multibuffer) 1554 - reqi = reqs[cfg->multibuffer_index]; 1555 1555 1556 1556 /* Set the key, if specified */ 1557 1557 if (vec->ksize) { ··· 1534 1630 1535 1631 /* Do the actual hashing */ 1536 1632 1537 - testmgr_poison(reqi->__ctx, crypto_ahash_reqsize(tfm)); 1633 + testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm)); 1538 1634 testmgr_poison(result, digestsize + TESTMGR_POISON_LEN); 1539 1635 1540 1636 if (cfg->finalization_type == FINALIZATION_TYPE_DIGEST || ··· 1543 1639 ahash_request_set_callback(req, req_flags, crypto_req_done, 1544 1640 &wait); 1545 1641 ahash_request_set_crypt(req, tsgl->sgl, result, vec->psize); 1546 - setup_ahash_multibuffer(reqs, cfg, tsgl); 1547 1642 err = do_ahash_op(crypto_ahash_digest, req, &wait, cfg->nosimd); 1548 1643 if (err) { 1549 1644 if (err == vec->digest_error) ··· 1564 1661 1565 1662 ahash_request_set_callback(req, req_flags, crypto_req_done, &wait); 1566 1663 ahash_request_set_crypt(req, NULL, result, 0); 1567 - setup_ahash_multibuffer(reqs, cfg, tsgl); 1568 1664 err = do_ahash_op(crypto_ahash_init, req, &wait, cfg->nosimd); 1569 1665 err = check_nonfinal_ahash_op("init", err, result, digestsize, 1570 1666 driver, vec_name, cfg); ··· 1580 1678 crypto_req_done, &wait); 1581 1679 ahash_request_set_crypt(req, pending_sgl, result, 1582 1680 pending_len); 1583 - setup_ahash_multibuffer(reqs, cfg, tsgl); 1584 1681 err = do_ahash_op(crypto_ahash_update, req, &wait, 1585 1682 divs[i]->nosimd); 1586 1683 err = check_nonfinal_ahash_op("update", err, ··· 1594 1693 /* Test ->export() and ->import() */ 1595 1694 testmgr_poison(hashstate + statesize, 1596 1695 TESTMGR_POISON_LEN); 1597 - err = crypto_ahash_export(reqi, hashstate); 1696 + err = crypto_ahash_export(req, hashstate); 1598 1697 err = check_nonfinal_ahash_op("export", err, 1599 1698 result, digestsize, 1600 1699 driver, vec_name, cfg); ··· 1607 1706 return -EOVERFLOW; 1608 1707 } 1609 1708 1610 - testmgr_poison(reqi->__ctx, crypto_ahash_reqsize(tfm)); 1611 - err = crypto_ahash_import(reqi, hashstate); 1709 + testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm)); 1710 + err = crypto_ahash_import(req, hashstate); 1612 1711 err = check_nonfinal_ahash_op("import", err, 1613 1712 result, digestsize, 1614 1713 driver, vec_name, cfg); ··· 1622 1721 1623 1722 ahash_request_set_callback(req, req_flags, crypto_req_done, &wait); 1624 1723 ahash_request_set_crypt(req, pending_sgl, result, pending_len); 1625 - setup_ahash_multibuffer(reqs, cfg, tsgl); 1626 1724 if (cfg->finalization_type == FINALIZATION_TYPE_FINAL) { 1627 1725 /* finish with update() and final() */ 1628 1726 err = do_ahash_op(crypto_ahash_update, req, &wait, cfg->nosimd); ··· 1653 1753 static int test_hash_vec_cfg(const struct hash_testvec *vec, 1654 1754 const char *vec_name, 1655 1755 const struct testvec_config *cfg, 1656 - struct ahash_request *reqs[MAX_MB_MSGS], 1756 + struct ahash_request *req, 1657 1757 struct shash_desc *desc, 1658 1758 struct test_sglist *tsgl, 1659 1759 u8 *hashstate) ··· 1673 1773 return err; 1674 1774 } 1675 1775 1676 - return test_ahash_vec_cfg(vec, vec_name, cfg, reqs, tsgl, hashstate); 1776 + return test_ahash_vec_cfg(vec, vec_name, cfg, req, tsgl, hashstate); 1677 1777 } 1678 1778 1679 1779 static int test_hash_vec(const struct hash_testvec *vec, unsigned int vec_num, 1680 - struct ahash_request *reqs[MAX_MB_MSGS], 1681 - struct shash_desc *desc, 1780 + struct ahash_request *req, struct shash_desc *desc, 1682 1781 struct test_sglist *tsgl, u8 *hashstate) 1683 1782 { 1684 1783 char vec_name[16]; ··· 1689 1790 for (i = 0; i < ARRAY_SIZE(default_hash_testvec_configs); i++) { 1690 1791 err = test_hash_vec_cfg(vec, vec_name, 1691 1792 &default_hash_testvec_configs[i], 1692 - reqs, desc, tsgl, hashstate); 1793 + req, desc, tsgl, hashstate); 1693 1794 if (err) 1694 1795 return err; 1695 1796 } ··· 1706 1807 generate_random_testvec_config(&rng, &cfg, cfgname, 1707 1808 sizeof(cfgname)); 1708 1809 err = test_hash_vec_cfg(vec, vec_name, &cfg, 1709 - reqs, desc, tsgl, hashstate); 1810 + req, desc, tsgl, hashstate); 1710 1811 if (err) 1711 1812 return err; 1712 1813 cond_resched(); ··· 1765 1866 */ 1766 1867 static int test_hash_vs_generic_impl(const char *generic_driver, 1767 1868 unsigned int maxkeysize, 1768 - struct ahash_request *reqs[MAX_MB_MSGS], 1869 + struct ahash_request *req, 1769 1870 struct shash_desc *desc, 1770 1871 struct test_sglist *tsgl, 1771 1872 u8 *hashstate) 1772 1873 { 1773 - struct ahash_request *req = reqs[0]; 1774 1874 struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); 1775 1875 const unsigned int digestsize = crypto_ahash_digestsize(tfm); 1776 1876 const unsigned int blocksize = crypto_ahash_blocksize(tfm); ··· 1867 1969 sizeof(cfgname)); 1868 1970 1869 1971 err = test_hash_vec_cfg(&vec, vec_name, cfg, 1870 - reqs, desc, tsgl, hashstate); 1972 + req, desc, tsgl, hashstate); 1871 1973 if (err) 1872 1974 goto out; 1873 1975 cond_resched(); ··· 1885 1987 #else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */ 1886 1988 static int test_hash_vs_generic_impl(const char *generic_driver, 1887 1989 unsigned int maxkeysize, 1888 - struct ahash_request *reqs[MAX_MB_MSGS], 1990 + struct ahash_request *req, 1889 1991 struct shash_desc *desc, 1890 1992 struct test_sglist *tsgl, 1891 1993 u8 *hashstate) ··· 1932 2034 u32 type, u32 mask, 1933 2035 const char *generic_driver, unsigned int maxkeysize) 1934 2036 { 1935 - struct ahash_request *reqs[MAX_MB_MSGS] = {}; 1936 2037 struct crypto_ahash *atfm = NULL; 2038 + struct ahash_request *req = NULL; 1937 2039 struct crypto_shash *stfm = NULL; 1938 2040 struct shash_desc *desc = NULL; 1939 2041 struct test_sglist *tsgl = NULL; ··· 1957 2059 } 1958 2060 driver = crypto_ahash_driver_name(atfm); 1959 2061 1960 - for (i = 0; i < MAX_MB_MSGS; i++) { 1961 - reqs[i] = ahash_request_alloc(atfm, GFP_KERNEL); 1962 - if (!reqs[i]) { 1963 - pr_err("alg: hash: failed to allocate request for %s\n", 1964 - driver); 1965 - err = -ENOMEM; 1966 - goto out; 1967 - } 2062 + req = ahash_request_alloc(atfm, GFP_KERNEL); 2063 + if (!req) { 2064 + pr_err("alg: hash: failed to allocate request for %s\n", 2065 + driver); 2066 + err = -ENOMEM; 2067 + goto out; 1968 2068 } 1969 2069 1970 2070 /* ··· 1998 2102 if (fips_enabled && vecs[i].fips_skip) 1999 2103 continue; 2000 2104 2001 - err = test_hash_vec(&vecs[i], i, reqs, desc, tsgl, hashstate); 2105 + err = test_hash_vec(&vecs[i], i, req, desc, tsgl, hashstate); 2002 2106 if (err) 2003 2107 goto out; 2004 2108 cond_resched(); 2005 2109 } 2006 - err = test_hash_vs_generic_impl(generic_driver, maxkeysize, reqs, 2110 + err = test_hash_vs_generic_impl(generic_driver, maxkeysize, req, 2007 2111 desc, tsgl, hashstate); 2008 2112 out: 2009 2113 kfree(hashstate); ··· 2013 2117 } 2014 2118 kfree(desc); 2015 2119 crypto_free_shash(stfm); 2016 - if (reqs[0]) { 2017 - ahash_request_set_callback(reqs[0], 0, NULL, NULL); 2018 - for (i = 1; i < MAX_MB_MSGS && reqs[i]; i++) 2019 - ahash_request_chain(reqs[i], reqs[0]); 2020 - ahash_request_free(reqs[0]); 2021 - } 2120 + ahash_request_free(req); 2022 2121 crypto_free_ahash(atfm); 2023 2122 return err; 2024 2123 }