From patchwork Tue Jun 18 09:21:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 167119 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp3964520ilk; Tue, 18 Jun 2019 02:23:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqxiZUGLJUgwGdAqmRsDFzrysPoQ+MDhYv7m7pJRmR3Yo+3f+GL9fYgq7XCjJsdZsj8L0Z4/ X-Received: by 2002:a62:1515:: with SMTP id 21mr41356020pfv.100.1560849783866; Tue, 18 Jun 2019 02:23:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560849783; cv=none; d=google.com; s=arc-20160816; b=H26Gvv5nzdyP1P/Fcok8FuckU1A8GjnHlBPpbeevAjEquTpoMDgSJnGyKTLuW6wSAe s+E8HtiCIcc732WZQBgNc2pZxFGvEVAJoWVVflHNiQ3OSrOjIHLqGy3c/Ls488jRqOp0 PsRXSCMG0IErEbj1w/70zQC/+tpGp7jTBo7iEluvSCU1DVtNhPOwAQla7TJpmelf1zjH nuMbHJwPv6ZHkNwBkC+70cm2lgLVrC1j4KqkSYOllaBT5ksktZskft+k3iPPHd9hGUZB l/oqjcZnmNN21ZRZryUmHLHELxr8JmrnJG36Kska4tRQuTRvBFHRpgeWKOzljeFIxqVH cwIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=wzWbHkOHfCJ/0VQ6qP/OQrMpK1siATnJ7YvKnRL61uM=; b=huDYF16qWADMxv8yHABd7uWHFVk2kLS1HMYZDwgmiVfa7WF8DUcfJmZmAwEN/teNPd ka6r9PcqXhf+WeESH0INMsFKMUQduvgjM0gjEBsjGc5jR5Kez52HjX+Gdgu/vgrjyOmE 0hn0DL4uJ3g5ZGtZ3Bomo+aBC7bGwrkofVCKgzMns+owJpKxDcZhAIt7jDj3mC4zXwj+ atnwDGsMJW2DZ7iWFnN3QNCqBdGfw+bidFoDHWP2Hzk91jPkHhDy6siMFMK5MxoxWy4s UcRu9fcXbn+IjWAiVNwOQJq7sisSviWXmWd17YPCEEcoTUm8yGmxRHgqSBmGh4nY3Wo1 o6nQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u13si1802748pjn.89.2019.06.18.02.23.03; Tue, 18 Jun 2019 02:23:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729370AbfFRJXD (ORCPT + 3 others); Tue, 18 Jun 2019 05:23:03 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:55425 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728810AbfFRJXC (ORCPT ); Tue, 18 Jun 2019 05:23:02 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue009 [212.227.15.129]) with ESMTPA (Nemesis) id 1N49Yn-1icvsZ0urh-0102X2; Tue, 18 Jun 2019 11:22:50 +0200 From: Arnd Bergmann To: Herbert Xu , "David S. Miller" Cc: Arnd Bergmann , Eric Biggers , Eric Biggers , Ard Biesheuvel , Vitaly Chikunov , Gilad Ben-Yossef , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] crypto: testmgr - dynamically allocate crypto_shash Date: Tue, 18 Jun 2019 11:21:53 +0200 Message-Id: <20190618092215.2790800-2-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20190618092215.2790800-1-arnd@arndb.de> References: <20190618092215.2790800-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:bO58TLJx+C6E/baJmdAkbG6/15WeaVirgQ4dxIMpxNhBaUxJa5q 0LKHAxCuKLWNgpKkZ91FP0UvVB47wZdeUjjc61FoclVxBvJf2I1v5Lu5BcENrE0kniyr+0J +hODOn4LOGP3bVsy0N4Cx8wn4xmyhQuSss3GQlFZ4YBDSPdXtPXI/L26EZOdiZZThdlwHBp xfKLQe3DBIyGjTamWkFbQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:xnuTpmV9pJQ=:mv+KzxkuI/BpPdXtwon4WS 5shJO2YB6vQAJJemqacnK21USBZLkoBpP8/VKXFPIlFTobKD/fI3IA2kH0RnpKZvgmzUCrNb5 X6k5SxAHAU30zt60pQr7xmvjipGmDc4os34k9Aoi3Fa7Nf5fTrUo+P6AnO7+UrGZo4jS2FDhy YOWuDG4VgNHa7CufBQVtNMRAji4Rpu0Xd9/qmXaUtlpqIm0BcysNlhUF+OwW4Nd3lMJKghQTn NKxOaocvsQhgkafE5dMpxKOB0YOMqiW61BllNUrc5iTu55nV6t2iSvjBVRadzcxQGAYvctwwb paBlwyOzwThsTB+CJUovcjrjst4So/LMVKgbBj0V236qhhI3t77s4GP7woVyRXH2NsPC2PC75 SQgMggoN7eFBUqym4l9eRCuPnY6wusHgBGOSJVxpX0KVw7v0ZmAfAEFOM1oi+vOhHQ/Pjgf5q M89f1SlLqrNfh1p1xbcDorCWYz0lYADjp2UryTMuMWQM8dTxak1N4KUvqTP7EFvROmY7BarVw s5arN/KJcJJ/M37Nnp2COlUmdeegyj6x0Gs4UTc61itOgamC5k7i5xrgnNdGQCvQM6hLYKTZi PMDCQwRiWCsX2SFn/GQgimHYIOZSk9x12Tg3/E/1qnXUEUFz40/3rQ/XRM7tDcKCld5tMO129 JIDVtzDbqtKOmPfqnBj276akm1LbdCuQuypX7m72K/UPM7DL6RvX+Ri3RX6snuYNz/639V2Wf sZekFWHuWQ9XlzapnkMv4aDG94VP+ZFf6BDefA== Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org The largest stack object in this file is now the shash descriptor. Since there are many other stack variables, this can push it over the 1024 byte warning limit, in particular with clang and KASAN: crypto/testmgr.c:1693:12: error: stack frame size of 1312 bytes in function '__alg_test_hash' [-Werror,-Wframe-larger-than=] Make test_hash_vs_generic_impl() do the same thing as the corresponding eaed and skcipher functions by allocating the descriptor dynamically. We can still do better than this, but it brings us well below the 1024 byte limit. Suggested-by: Eric Biggers Fixes: 9a8a6b3f0950 ("crypto: testmgr - fuzz hashes against their generic implementation") Signed-off-by: Arnd Bergmann --- crypto/testmgr.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) -- 2.20.0 diff --git a/crypto/testmgr.c b/crypto/testmgr.c index 0e07f61f1a31..0ce28b3aab3c 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -1503,14 +1503,12 @@ static int test_hash_vec(const char *driver, const struct hash_testvec *vec, * Generate a hash test vector from the given implementation. * Assumes the buffers in 'vec' were already allocated. */ -static void generate_random_hash_testvec(struct crypto_shash *tfm, +static void generate_random_hash_testvec(struct shash_desc *desc, struct hash_testvec *vec, unsigned int maxkeysize, unsigned int maxdatasize, char *name, size_t max_namelen) { - SHASH_DESC_ON_STACK(desc, tfm); - /* Data */ vec->psize = generate_random_length(maxdatasize); generate_random_bytes((u8 *)vec->plaintext, vec->psize); @@ -1527,7 +1525,7 @@ static void generate_random_hash_testvec(struct crypto_shash *tfm, vec->ksize = 1 + (prandom_u32() % maxkeysize); generate_random_bytes((u8 *)vec->key, vec->ksize); - vec->setkey_error = crypto_shash_setkey(tfm, vec->key, + vec->setkey_error = crypto_shash_setkey(desc->tfm, vec->key, vec->ksize); /* If the key couldn't be set, no need to continue to digest. */ if (vec->setkey_error) @@ -1535,7 +1533,6 @@ static void generate_random_hash_testvec(struct crypto_shash *tfm, } /* Digest */ - desc->tfm = tfm; vec->digest_error = crypto_shash_digest(desc, vec->plaintext, vec->psize, (u8 *)vec->digest); done: @@ -1562,6 +1559,7 @@ static int test_hash_vs_generic_impl(const char *driver, const char *algname = crypto_hash_alg_common(tfm)->base.cra_name; char _generic_driver[CRYPTO_MAX_ALG_NAME]; struct crypto_shash *generic_tfm = NULL; + struct shash_desc *generic_desc = NULL; unsigned int i; struct hash_testvec vec = { 0 }; char vec_name[64]; @@ -1601,6 +1599,14 @@ static int test_hash_vs_generic_impl(const char *driver, goto out; } + generic_desc = kzalloc(sizeof(*desc) + + crypto_shash_descsize(generic_tfm), GFP_KERNEL); + if (!generic_desc) { + err = -ENOMEM; + goto out; + } + generic_desc->tfm = generic_tfm; + /* Check the algorithm properties for consistency. */ if (digestsize != crypto_shash_digestsize(generic_tfm)) { @@ -1632,7 +1638,7 @@ static int test_hash_vs_generic_impl(const char *driver, } for (i = 0; i < fuzz_iterations * 8; i++) { - generate_random_hash_testvec(generic_tfm, &vec, + generate_random_hash_testvec(generic_desc, &vec, maxkeysize, maxdatasize, vec_name, sizeof(vec_name)); generate_random_testvec_config(cfg, cfgname, sizeof(cfgname)); @@ -1650,6 +1656,7 @@ static int test_hash_vs_generic_impl(const char *driver, kfree(vec.plaintext); kfree(vec.digest); crypto_free_shash(generic_tfm); + kzfree(generic_desc); return err; } #else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */