Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp4246055img; Tue, 26 Mar 2019 06:01:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqwPpOHIYI1ifune/biM38H143bnByc+PmPZy0t6A26oDxd0VMRHjzf5ZrR4nR5j2MZB4dIo X-Received: by 2002:a62:1249:: with SMTP id a70mr29720094pfj.160.1553605311241; Tue, 26 Mar 2019 06:01:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553605311; cv=none; d=google.com; s=arc-20160816; b=AgKsPCdIb0gOq+NMisGDdL3EKEcEhrbACY+kXfpyyw00mxMjsDzuV620xZBuivTaj9 7e56a5N4LdQQwINcmNPYn+LdKseEZMEW+7GeG3BsWJsBuYE+gUPIL73WfY71B04dsq7C dsIRnVtQ7yxxkD41VSNZU5CGkJyU5swIk+uohN2phFNc/Odet2qczQKo8PtnUWCO2P0i 7QXJ182R2aomfjwkINuRf93pjPWHrgzLWS4F4smSUNFkEFOM8q3s+QX7mEk84LZk2EOi lDP1FChmj35zVX/1XuKayAf/BFasHCfHlXwPemDmtf2bsQZSbk+9j0w5v5QHqXYV+aP6 ZtMA== 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:to:from; bh=iS0a2uqRSmBz4/sKdd3rfW3ofnVYOod3DTq78fEIiys=; b=GC+jhwrSbgYkzsG7sQS15Ba1ZyuyM4duiyIqRPWB9+6FA5+68kQJ0akquYXg2t5gBa U/jEReOeuUty7gjUcQYjp8YgmrkW4QcjRsDYoSWDbyxFEfW8lY4CUiGqoViYojhyUt7v LE9WsBIDuafWax4aTmxtuWejxVe+uzJvltlbtvTdda9203pHrSgUkCQ7DDX1h8oXggKs DXqTQyc9XZB6C67mPKGcstPGZKTgZsi9PzgtqXezKQnr82X8ejyGf8/+Mfbuj4IXxH3w OBNEi89KYzHUcniWKx6eM65peK/HWp+ReWLanAN/2xTOUHRvwOAWHvP6tKeOItHB82NT /jwg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 g4si17696563plm.184.2019.03.26.06.01.34; Tue, 26 Mar 2019 06:01:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731619AbfCZM7W (ORCPT + 99 others); Tue, 26 Mar 2019 08:59:22 -0400 Received: from vmicros1.altlinux.org ([194.107.17.57]:45014 "EHLO vmicros1.altlinux.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726258AbfCZM7W (ORCPT ); Tue, 26 Mar 2019 08:59:22 -0400 Received: from imap.altlinux.org (imap.altlinux.org [194.107.17.38]) by vmicros1.altlinux.org (Postfix) with ESMTP id 0492C72CCAC; Tue, 26 Mar 2019 15:59:19 +0300 (MSK) Received: from beacon.altlinux.org (unknown [185.6.174.98]) by imap.altlinux.org (Postfix) with ESMTPSA id E17304A4AE9; Tue, 26 Mar 2019 15:59:17 +0300 (MSK) From: Vitaly Chikunov To: Herbert Xu , David Howells , Mimi Zohar , Dmitry Kasatkin , linux-integrity@vger.kernel.org, keyrings@vger.kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v8 04/10] KEYS: do not kmemdup digest in {public,tpm}_key_verify_signature Date: Tue, 26 Mar 2019 15:58:36 +0300 Message-Id: <20190326125842.24110-5-vt@altlinux.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190326125842.24110-1-vt@altlinux.org> References: <20190326125842.24110-1-vt@altlinux.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Treat (struct public_key_signature)'s digest same as its signature (s). Since digest should be already in the kmalloc'd memory do not kmemdup digest value before calling {public,tpm}_key_verify_signature. Patch is split from the previous as suggested by Herbert Xu. Suggested-by: David Howells Cc: David Howells Cc: keyrings@vger.kernel.org Signed-off-by: Vitaly Chikunov --- crypto/asymmetric_keys/asym_tpm.c | 10 +--------- crypto/asymmetric_keys/public_key.c | 9 +-------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/crypto/asymmetric_keys/asym_tpm.c b/crypto/asymmetric_keys/asym_tpm.c index 4e5b6fb57a94..402fc34ca044 100644 --- a/crypto/asymmetric_keys/asym_tpm.c +++ b/crypto/asymmetric_keys/asym_tpm.c @@ -748,7 +748,6 @@ static int tpm_key_verify_signature(const struct key *key, char alg_name[CRYPTO_MAX_ALG_NAME]; uint8_t der_pub_key[PUB_KEY_BUF_SIZE]; uint32_t der_pub_key_len; - void *digest; int ret; pr_devel("==>%s()\n", __func__); @@ -780,14 +779,9 @@ static int tpm_key_verify_signature(const struct key *key, if (!req) goto error_free_tfm; - ret = -ENOMEM; - digest = kmemdup(sig->digest, sig->digest_size, GFP_KERNEL); - if (!digest) - goto error_free_req; - sg_init_table(src_sg, 2); sg_set_buf(&src_sg[0], sig->s, sig->s_size); - sg_set_buf(&src_sg[1], digest, sig->digest_size); + sg_set_buf(&src_sg[1], sig->digest, sig->digest_size); akcipher_request_set_crypt(req, src_sg, NULL, sig->s_size, sig->digest_size); crypto_init_wait(&cwait); @@ -796,8 +790,6 @@ static int tpm_key_verify_signature(const struct key *key, crypto_req_done, &cwait); ret = crypto_wait_req(crypto_akcipher_verify(req), &cwait); - kfree(digest); -error_free_req: akcipher_request_free(req); error_free_tfm: crypto_free_akcipher(tfm); diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c index 0c069fe8a59c..33093b7bcc47 100644 --- a/crypto/asymmetric_keys/public_key.c +++ b/crypto/asymmetric_keys/public_key.c @@ -229,7 +229,6 @@ int public_key_verify_signature(const struct public_key *pkey, struct akcipher_request *req; struct scatterlist src_sg[2]; char alg_name[CRYPTO_MAX_ALG_NAME]; - void *digest; int ret; pr_devel("==>%s()\n", __func__); @@ -262,14 +261,9 @@ int public_key_verify_signature(const struct public_key *pkey, if (ret) goto error_free_req; - ret = -ENOMEM; - digest = kmemdup(sig->digest, sig->digest_size, GFP_KERNEL); - if (!digest) - goto error_free_req; - sg_init_table(src_sg, 2); sg_set_buf(&src_sg[0], sig->s, sig->s_size); - sg_set_buf(&src_sg[1], digest, sig->digest_size); + sg_set_buf(&src_sg[1], sig->digest, sig->digest_size); akcipher_request_set_crypt(req, src_sg, NULL, sig->s_size, sig->digest_size); crypto_init_wait(&cwait); @@ -278,7 +272,6 @@ int public_key_verify_signature(const struct public_key *pkey, crypto_req_done, &cwait); ret = crypto_wait_req(crypto_akcipher_verify(req), &cwait); - kfree(digest); error_free_req: akcipher_request_free(req); error_free_tfm: -- 2.11.0