summaryrefslogtreecommitdiffstats
path: root/crypto/testmgr.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2019-06-18 05:21:52 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2019-06-27 02:28:01 -0400
commit6b5ca646ca9d99611e30f3c8f6b4837b9890eb73 (patch)
tree3c8c9a93558e4ed654e530c65a351fb4884850e6 /crypto/testmgr.c
parentc8c74647b2945e3522b77b659917766d7e1c6ed9 (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.c43
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;
1646out: 1652out:
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;
2240out: 2253out:
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;
2784out: 2804out:
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);