Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp659560imb; Fri, 1 Mar 2019 10:25:33 -0800 (PST) X-Google-Smtp-Source: APXvYqyb+F7fE+uDWQhqOrGruGgdlx8QwXuXcoJnFFPOPgkw7yPSJ/4KJU+i6EBubvukNkN6rgwb X-Received: by 2002:a63:8743:: with SMTP id i64mr6074070pge.69.1551464733290; Fri, 01 Mar 2019 10:25:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551464733; cv=none; d=google.com; s=arc-20160816; b=FRMGje6cn1qgtvLB1aWWcglIxC3K2EbVM8ZmpjI+dS3DD0SqF4XMWVCAFcOMQJsvt+ snvw8fCMnXgJQWQyyP8q9ANZ3JMbdOPlC2V6gPP+NhI7mLV/v44CVTJ8/wEDb95lBWty zPr55iAhDtUSaYYHg7pNDWAaoNdjvTg2MDoLu4Htg+0KcGuax404+PuCO2N0HchG8rDx sUBn7s63l3Rdy+rDQ8a1N2MvjJsNrLtpmb7Ala7wDEllBJyfk/ZFSAUbC+u5ZrvcUUsD c4UmR+z1YUcI9LZSpgivDIZ+nLCVagxqNMns6gtIP3TKIK6fRn/fsKYFKp1yiG9VtWX8 5QZQ== 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=ikg9v/cZaipWbpPmNDgeFvYfoneGo3EfN1zaRvVzqrs=; b=PPgd+OksuXOPhbx0eHVAAm0G0zswdXBk2c2dVZcHkI4pV85/qrEVvVHJiVzrb1R2kW uiTJQDVf1YduN9LdCMjiOC3F+UG4GnvDan8bwvbJ62Ht9Xz0jcMq1UNrK1v5hFlFwCqY UzstVOH1IcHtZ6TtLohn8UdGqXvFKLU4KM8qIJd9eTRK+YURCzz8ZF7t6SdR/5AXT4Lo O6YL2QICTDOCpISdokioS9SwPjyk7pJjFx6sX9Imc7ierrr/TrhQnLcyv82N6CKRaBEn 8Rwh9m3nJ79gXDrjey+OHCtBix9VFucsEEhdgKcL7YeS5WIu663vHtwTdLulTA/ov/PH 3L3Q== 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 r12si20929602pgm.447.2019.03.01.10.25.17; Fri, 01 Mar 2019 10:25:33 -0800 (PST) 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 S2389843AbfCAR7j (ORCPT + 99 others); Fri, 1 Mar 2019 12:59:39 -0500 Received: from vmicros1.altlinux.org ([194.107.17.57]:40238 "EHLO vmicros1.altlinux.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389786AbfCAR7c (ORCPT ); Fri, 1 Mar 2019 12:59:32 -0500 Received: from imap.altlinux.org (imap.altlinux.org [194.107.17.38]) by vmicros1.altlinux.org (Postfix) with ESMTP id BD54672CA65; Fri, 1 Mar 2019 20:59:28 +0300 (MSK) Received: from beacon.altlinux.org (unknown [185.6.174.98]) by imap.altlinux.org (Postfix) with ESMTPSA id 85C484A4AE7; Fri, 1 Mar 2019 20:59:28 +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 v7 05/11] KEYS: do not kmemdup digest in {public,tpm}_key_verify_signature Date: Fri, 1 Mar 2019 20:59:12 +0300 Message-Id: <20190301175918.29694-6-vt@altlinux.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190301175918.29694-1-vt@altlinux.org> References: <20190301175918.29694-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 338f2b5352b1..4dcfe281b898 100644 --- a/crypto/asymmetric_keys/public_key.c +++ b/crypto/asymmetric_keys/public_key.c @@ -235,7 +235,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__); @@ -268,14 +267,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); @@ -284,7 +278,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