diff options
author | Arnd Bergmann <arnd@arndb.de> | 2019-06-18 05:21:52 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-06-27 02:28:01 -0400 |
commit | 6b5ca646ca9d99611e30f3c8f6b4837b9890eb73 (patch) | |
tree | 3c8c9a93558e4ed654e530c65a351fb4884850e6 /crypto/testmgr.c | |
parent | c8c74647b2945e3522b77b659917766d7e1c6ed9 (diff) |
crypto: testmgr - dynamically allocate testvec_config
On arm32, we get warnings about high stack usage in some of the functions:
crypto/testmgr.c:2269:12: error: stack frame size of 1032 bytes in function 'alg_test_aead' [-Werror,-Wframe-larger-than=]
static int alg_test_aead(const struct alg_test_desc *desc, const char *driver,
^
crypto/testmgr.c:1693:12: error: stack frame size of 1312 bytes in function '__alg_test_hash' [-Werror,-Wframe-larger-than=]
static int __alg_test_hash(const struct hash_testvec *vecs,
^
On of the larger objects on the stack here is struct testvec_config, so
change that to dynamic allocation.
Fixes: 40153b10d91c ("crypto: testmgr - fuzz AEADs against their generic implementation")
Fixes: d435e10e67be ("crypto: testmgr - fuzz skciphers against their generic implementation")
Fixes: 9a8a6b3f0950 ("crypto: testmgr - fuzz hashes against their generic implementation")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/testmgr.c')
-rw-r--r-- | crypto/testmgr.c | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/crypto/testmgr.c b/crypto/testmgr.c index 5d163dd2ffac..ace4c260ea5d 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c | |||
@@ -1570,7 +1570,7 @@ static int test_hash_vs_generic_impl(const char *driver, | |||
1570 | unsigned int i; | 1570 | unsigned int i; |
1571 | struct hash_testvec vec = { 0 }; | 1571 | struct hash_testvec vec = { 0 }; |
1572 | char vec_name[64]; | 1572 | char vec_name[64]; |
1573 | struct testvec_config cfg; | 1573 | struct testvec_config *cfg; |
1574 | char cfgname[TESTVEC_CONFIG_NAMELEN]; | 1574 | char cfgname[TESTVEC_CONFIG_NAMELEN]; |
1575 | int err; | 1575 | int err; |
1576 | 1576 | ||
@@ -1600,6 +1600,12 @@ static int test_hash_vs_generic_impl(const char *driver, | |||
1600 | return err; | 1600 | return err; |
1601 | } | 1601 | } |
1602 | 1602 | ||
1603 | cfg = kzalloc(sizeof(*cfg), GFP_KERNEL); | ||
1604 | if (!cfg) { | ||
1605 | err = -ENOMEM; | ||
1606 | goto out; | ||
1607 | } | ||
1608 | |||
1603 | /* Check the algorithm properties for consistency. */ | 1609 | /* Check the algorithm properties for consistency. */ |
1604 | 1610 | ||
1605 | if (digestsize != crypto_shash_digestsize(generic_tfm)) { | 1611 | if (digestsize != crypto_shash_digestsize(generic_tfm)) { |
@@ -1634,9 +1640,9 @@ static int test_hash_vs_generic_impl(const char *driver, | |||
1634 | generate_random_hash_testvec(generic_tfm, &vec, | 1640 | generate_random_hash_testvec(generic_tfm, &vec, |
1635 | maxkeysize, maxdatasize, | 1641 | maxkeysize, maxdatasize, |
1636 | vec_name, sizeof(vec_name)); | 1642 | vec_name, sizeof(vec_name)); |
1637 | generate_random_testvec_config(&cfg, cfgname, sizeof(cfgname)); | 1643 | generate_random_testvec_config(cfg, cfgname, sizeof(cfgname)); |
1638 | 1644 | ||
1639 | err = test_hash_vec_cfg(driver, &vec, vec_name, &cfg, | 1645 | err = test_hash_vec_cfg(driver, &vec, vec_name, cfg, |
1640 | req, desc, tsgl, hashstate); | 1646 | req, desc, tsgl, hashstate); |
1641 | if (err) | 1647 | if (err) |
1642 | goto out; | 1648 | goto out; |
@@ -1644,6 +1650,7 @@ static int test_hash_vs_generic_impl(const char *driver, | |||
1644 | } | 1650 | } |
1645 | err = 0; | 1651 | err = 0; |
1646 | out: | 1652 | out: |
1653 | kfree(cfg); | ||
1647 | kfree(vec.key); | 1654 | kfree(vec.key); |
1648 | kfree(vec.plaintext); | 1655 | kfree(vec.plaintext); |
1649 | kfree(vec.digest); | 1656 | kfree(vec.digest); |
@@ -2140,7 +2147,7 @@ static int test_aead_vs_generic_impl(const char *driver, | |||
2140 | unsigned int i; | 2147 | unsigned int i; |
2141 | struct aead_testvec vec = { 0 }; | 2148 | struct aead_testvec vec = { 0 }; |
2142 | char vec_name[64]; | 2149 | char vec_name[64]; |
2143 | struct testvec_config cfg; | 2150 | struct testvec_config *cfg; |
2144 | char cfgname[TESTVEC_CONFIG_NAMELEN]; | 2151 | char cfgname[TESTVEC_CONFIG_NAMELEN]; |
2145 | int err; | 2152 | int err; |
2146 | 2153 | ||
@@ -2170,6 +2177,12 @@ static int test_aead_vs_generic_impl(const char *driver, | |||
2170 | return err; | 2177 | return err; |
2171 | } | 2178 | } |
2172 | 2179 | ||
2180 | cfg = kzalloc(sizeof(*cfg), GFP_KERNEL); | ||
2181 | if (!cfg) { | ||
2182 | err = -ENOMEM; | ||
2183 | goto out; | ||
2184 | } | ||
2185 | |||
2173 | generic_req = aead_request_alloc(generic_tfm, GFP_KERNEL); | 2186 | generic_req = aead_request_alloc(generic_tfm, GFP_KERNEL); |
2174 | if (!generic_req) { | 2187 | if (!generic_req) { |
2175 | err = -ENOMEM; | 2188 | err = -ENOMEM; |
@@ -2224,13 +2237,13 @@ static int test_aead_vs_generic_impl(const char *driver, | |||
2224 | generate_random_aead_testvec(generic_req, &vec, | 2237 | generate_random_aead_testvec(generic_req, &vec, |
2225 | maxkeysize, maxdatasize, | 2238 | maxkeysize, maxdatasize, |
2226 | vec_name, sizeof(vec_name)); | 2239 | vec_name, sizeof(vec_name)); |
2227 | generate_random_testvec_config(&cfg, cfgname, sizeof(cfgname)); | 2240 | generate_random_testvec_config(cfg, cfgname, sizeof(cfgname)); |
2228 | 2241 | ||
2229 | err = test_aead_vec_cfg(driver, ENCRYPT, &vec, vec_name, &cfg, | 2242 | err = test_aead_vec_cfg(driver, ENCRYPT, &vec, vec_name, cfg, |
2230 | req, tsgls); | 2243 | req, tsgls); |
2231 | if (err) | 2244 | if (err) |
2232 | goto out; | 2245 | goto out; |
2233 | err = test_aead_vec_cfg(driver, DECRYPT, &vec, vec_name, &cfg, | 2246 | err = test_aead_vec_cfg(driver, DECRYPT, &vec, vec_name, cfg, |
2234 | req, tsgls); | 2247 | req, tsgls); |
2235 | if (err) | 2248 | if (err) |
2236 | goto out; | 2249 | goto out; |
@@ -2238,6 +2251,7 @@ static int test_aead_vs_generic_impl(const char *driver, | |||
2238 | } | 2251 | } |
2239 | err = 0; | 2252 | err = 0; |
2240 | out: | 2253 | out: |
2254 | kfree(cfg); | ||
2241 | kfree(vec.key); | 2255 | kfree(vec.key); |
2242 | kfree(vec.iv); | 2256 | kfree(vec.iv); |
2243 | kfree(vec.assoc); | 2257 | kfree(vec.assoc); |
@@ -2687,7 +2701,7 @@ static int test_skcipher_vs_generic_impl(const char *driver, | |||
2687 | unsigned int i; | 2701 | unsigned int i; |
2688 | struct cipher_testvec vec = { 0 }; | 2702 | struct cipher_testvec vec = { 0 }; |
2689 | char vec_name[64]; | 2703 | char vec_name[64]; |
2690 | struct testvec_config cfg; | 2704 | struct testvec_config *cfg; |
2691 | char cfgname[TESTVEC_CONFIG_NAMELEN]; | 2705 | char cfgname[TESTVEC_CONFIG_NAMELEN]; |
2692 | int err; | 2706 | int err; |
2693 | 2707 | ||
@@ -2721,6 +2735,12 @@ static int test_skcipher_vs_generic_impl(const char *driver, | |||
2721 | return err; | 2735 | return err; |
2722 | } | 2736 | } |
2723 | 2737 | ||
2738 | cfg = kzalloc(sizeof(*cfg), GFP_KERNEL); | ||
2739 | if (!cfg) { | ||
2740 | err = -ENOMEM; | ||
2741 | goto out; | ||
2742 | } | ||
2743 | |||
2724 | generic_req = skcipher_request_alloc(generic_tfm, GFP_KERNEL); | 2744 | generic_req = skcipher_request_alloc(generic_tfm, GFP_KERNEL); |
2725 | if (!generic_req) { | 2745 | if (!generic_req) { |
2726 | err = -ENOMEM; | 2746 | err = -ENOMEM; |
@@ -2768,20 +2788,21 @@ static int test_skcipher_vs_generic_impl(const char *driver, | |||
2768 | for (i = 0; i < fuzz_iterations * 8; i++) { | 2788 | for (i = 0; i < fuzz_iterations * 8; i++) { |
2769 | generate_random_cipher_testvec(generic_req, &vec, maxdatasize, | 2789 | generate_random_cipher_testvec(generic_req, &vec, maxdatasize, |
2770 | vec_name, sizeof(vec_name)); | 2790 | vec_name, sizeof(vec_name)); |
2771 | generate_random_testvec_config(&cfg, cfgname, sizeof(cfgname)); | 2791 | generate_random_testvec_config(cfg, cfgname, sizeof(cfgname)); |
2772 | 2792 | ||
2773 | err = test_skcipher_vec_cfg(driver, ENCRYPT, &vec, vec_name, | 2793 | err = test_skcipher_vec_cfg(driver, ENCRYPT, &vec, vec_name, |
2774 | &cfg, req, tsgls); | 2794 | cfg, req, tsgls); |
2775 | if (err) | 2795 | if (err) |
2776 | goto out; | 2796 | goto out; |
2777 | err = test_skcipher_vec_cfg(driver, DECRYPT, &vec, vec_name, | 2797 | err = test_skcipher_vec_cfg(driver, DECRYPT, &vec, vec_name, |
2778 | &cfg, req, tsgls); | 2798 | cfg, req, tsgls); |
2779 | if (err) | 2799 | if (err) |
2780 | goto out; | 2800 | goto out; |
2781 | cond_resched(); | 2801 | cond_resched(); |
2782 | } | 2802 | } |
2783 | err = 0; | 2803 | err = 0; |
2784 | out: | 2804 | out: |
2805 | kfree(cfg); | ||
2785 | kfree(vec.key); | 2806 | kfree(vec.key); |
2786 | kfree(vec.iv); | 2807 | kfree(vec.iv); |
2787 | kfree(vec.ptext); | 2808 | kfree(vec.ptext); |