Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp5944686yba; Thu, 11 Apr 2019 08:53:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqxSdY3QV+Lfzje/xruqQyfR407E3DfixuUjZRE1M/+Yz12rFCDBh4JIvQOLAujgv6lEfmLK X-Received: by 2002:a63:1203:: with SMTP id h3mr48559274pgl.164.1554997983864; Thu, 11 Apr 2019 08:53:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554997983; cv=none; d=google.com; s=arc-20160816; b=qNfzXcTfIaaxIH0k8LGsRlk0ubkeKAOBSOVtYywPulnAvYzaCj4VALhzjRQ41H2lg3 Iac4WEwqnU20MdsU9z3mVz7PiHPPN+3GgSNIxW0RYenJXHVAQ8KuYQmRyWgYGVLLiA47 O3d0SyyoscW5T5chSCnZkh4vpY2N7xbNWWhc4kGdkPJJ7Z0T6j0F7H5imXZNDTfPGdqk n0ijolZmoGve3ask5NMmXqSLLiZtVSJOP0reSsFFPRaAqyB4YJXPqXYdItwMvg+S9Vj0 DxiU4Q0pd2a4ZiecJeK/Kma7b0NVEw1iYABGeWKkGhNcMyEnGqea6r4ardCc2IfB04iL UXOw== 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=SF9yRyoM+skUklfJ6KoMOYq6MZSA3eExMsAbeCoJNmA=; b=hWcJvCGQTt/tfk2c7NEIHQ7WlDB5vmqu9yzhdWpIWdkzPZ7HnKGs4QdSkiT+llHQGf KtbPebfbT9sO5TDmLogU6OXCHMPnRdvKUVWOXwGc2ESGMQMaJE09uBlOhaWNteaqC1yn 9wQFAs1czebgQJ9BeAus1RigAXVMnkY3mFjyBz2kBSDFFx3LGLXXM1XEuSTh588Lz3uT tBe2HD+I7pn27wLesmiUTwfBjRxWjhyQlZrybp0dGAPFxG27CnsdgJjHCNTrCHlcoQsA FrYn1KG6/D6XaQg/YwfyQpC/KNK478VJ81na+qWmDzwxkp6q/9N4yTmWWBBHpLh8NMpf VSHw== 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 x186si23482534pgx.399.2019.04.11.08.52.47; Thu, 11 Apr 2019 08:53:03 -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 S1726962AbfDKPv6 (ORCPT + 99 others); Thu, 11 Apr 2019 11:51:58 -0400 Received: from vmicros1.altlinux.org ([194.107.17.57]:44548 "EHLO vmicros1.altlinux.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726895AbfDKPv4 (ORCPT ); Thu, 11 Apr 2019 11:51:56 -0400 Received: from imap.altlinux.org (imap.altlinux.org [194.107.17.38]) by vmicros1.altlinux.org (Postfix) with ESMTP id 72C0C72CC58; Thu, 11 Apr 2019 18:51:53 +0300 (MSK) Received: from beacon.altlinux.org (unknown [185.6.174.98]) by imap.altlinux.org (Postfix) with ESMTPSA id 238144A4A2A; Thu, 11 Apr 2019 18:51:53 +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 Cc: Denis Kenzior Subject: [PATCH v9 04/10] KEYS: do not kmemdup digest in {public,tpm}_key_verify_signature Date: Thu, 11 Apr 2019 18:51:16 +0300 Message-Id: <20190411155122.13245-5-vt@altlinux.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190411155122.13245-1-vt@altlinux.org> References: <20190411155122.13245-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 Reviewed-by: Denis Kenzior --- 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