Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp461513ybl; Tue, 28 Jan 2020 06:20:22 -0800 (PST) X-Google-Smtp-Source: APXvYqy8HnmXkdAUkLEyNJPQbxZ67geKBHvPXp08MXKx++vOgXcGuZLm8NajqAb7pNoww4xf5a0n X-Received: by 2002:a05:6830:139a:: with SMTP id d26mr17096180otq.75.1580221222423; Tue, 28 Jan 2020 06:20:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580221222; cv=none; d=google.com; s=arc-20160816; b=Axt8ycYc/ZxvDZ0IHkd30iacaPScDs1O4rJ+v3nRUmdurElaWp+tO67OorZBnsVkIx H1ggZQkpZxXokDsbVljLSghamTb7fq1SYNSuLTTJOP5xrSmk+PrZGxg0jBBKG/ElevYC e6eMk40UuWqe7RfdveN4EiFQmGSq5bYy3drghFoLmprtlsjJHhPl0YcPOkwrovfrBjcp hCilty5Icm/oWJpmyKNaqIvNFZSRJJceGMfsw+6p2Ii96R9gxgp7WsHNOoku8zAM1xLE xSZYkzyZgnhSvnlpqwpBnjk4r4O9C33MV8crePi3zErEzr7xr67A99lKEh9n+aJT/5hO xT3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from; bh=UYtVIY3rbaXO9UDQoAJxO8H2upSEXhoeU4PXsawWjNk=; b=yRD88tQ/9Pld1BOHWmhEuMW//Dxox0k+GPVoJwn7e+Qn97yjIgDKTrwczdYGYBMbK1 EwBTrLdVfymaTE0T5hGOB7ajI/XUIMz1U3s0FwekuRm2Jx3Duhak+YN3Im0UEdX6nbrc mSNBa2ZppPa/huoDsEor0yuZptHC/jdlLn9BvGTnK7Mn2yCTiRXbHjaFjG34DPo40bmV hAe2jrrDDEcA5AXOmAnyJB+sc0KL1egWlnqjJsUnSYkSa1qPCIUHZXLtsbPQhXYP4Na4 6IDSKBHd0wEuPoRFOnjuOQtsksIhFJYwVJ8Y2eoMg6vxDGy73kbMDA3Q6X1y8dEMtn4Z Wpfw== 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 30si8281937otr.75.2020.01.28.06.20.08; Tue, 28 Jan 2020 06:20:22 -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 S1730840AbgA1OTO convert rfc822-to-8bit (ORCPT + 99 others); Tue, 28 Jan 2020 09:19:14 -0500 Received: from lhrrgout.huawei.com ([185.176.76.210]:2317 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730828AbgA1OTL (ORCPT ); Tue, 28 Jan 2020 09:19:11 -0500 Received: from lhreml704-cah.china.huawei.com (unknown [172.18.7.107]) by Forcepoint Email with ESMTP id B52AA4558B5B07A8D235; Tue, 28 Jan 2020 14:19:08 +0000 (GMT) Received: from fraeml706-chm.china.huawei.com (10.206.15.55) by lhreml704-cah.china.huawei.com (10.201.108.45) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 28 Jan 2020 14:19:07 +0000 Received: from fraeml714-chm.china.huawei.com (10.206.15.33) by fraeml706-chm.china.huawei.com (10.206.15.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 28 Jan 2020 15:19:07 +0100 Received: from fraeml714-chm.china.huawei.com ([10.206.15.33]) by fraeml714-chm.china.huawei.com ([10.206.15.33]) with mapi id 15.01.1713.004; Tue, 28 Jan 2020 15:19:07 +0100 From: Roberto Sassu To: Mimi Zohar , "linux-integrity@vger.kernel.org" CC: Jerry Snitselaar , James Bottomley , "linux-kernel@vger.kernel.org" , Silviu Vlasceanu Subject: RE: [PATCH 2/2] ima: support calculating the boot_aggregate based on different TPM banks Thread-Topic: [PATCH 2/2] ima: support calculating the boot_aggregate based on different TPM banks Thread-Index: AQHV1SsuUuwpXjLewk6D/BEn4qmmH6gAHIeg Date: Tue, 28 Jan 2020 14:19:07 +0000 Message-ID: <465015d0c9ca4e278ed32f78eb3eb4a4@huawei.com> References: <1580140919-6127-1-git-send-email-zohar@linux.ibm.com> <1580140919-6127-2-git-send-email-zohar@linux.ibm.com> In-Reply-To: <1580140919-6127-2-git-send-email-zohar@linux.ibm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.220.96.108] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > -----Original Message----- > From: linux-integrity-owner@vger.kernel.org [mailto:linux-integrity- > owner@vger.kernel.org] On Behalf Of Mimi Zohar > Sent: Monday, January 27, 2020 5:02 PM > To: linux-integrity@vger.kernel.org > Cc: Jerry Snitselaar ; James Bottomley > ; linux- > kernel@vger.kernel.org; Mimi Zohar > Subject: [PATCH 2/2] ima: support calculating the boot_aggregate based on > different TPM banks > > Calculating the boot_aggregate attempts to read the TPM SHA1 bank, > assuming it is always enabled. With TPM 2.0 hash agility, TPM chips > could support multiple TPM PCR banks, allowing firmware to configure and > enable different banks. > > Instead of hard coding the TPM 2.0 bank hash algorithm used for calculating > the boot-aggregate, see if the configured IMA_DEFAULT_HASH algorithm is > an allocated TPM bank, otherwise use the first allocated TPM bank. > > For TPM 1.2 SHA1 is the only supported hash algorithm. > > Reported-by: Jerry Snitselaar > Signed-off-by: Mimi Zohar > --- > security/integrity/ima/ima_crypto.c | 37 > ++++++++++++++++++++++++++++++++++++- > 1 file changed, 36 insertions(+), 1 deletion(-) > > diff --git a/security/integrity/ima/ima_crypto.c > b/security/integrity/ima/ima_crypto.c > index 7967a6904851..b1b26d61f174 100644 > --- a/security/integrity/ima/ima_crypto.c > +++ b/security/integrity/ima/ima_crypto.c > @@ -656,8 +656,25 @@ static void __init ima_pcrread(u32 idx, struct > tpm_digest *d) > pr_err("Error Communicating to TPM chip\n"); > } > > +/* tpm2_hash_map is the same as defined in tpm2-cmd.c and > trusted_tpm2.c */ > +static struct tpm2_hash tpm2_hash_map[] = { > + {HASH_ALGO_SHA1, TPM_ALG_SHA1}, > + {HASH_ALGO_SHA256, TPM_ALG_SHA256}, > + {HASH_ALGO_SHA384, TPM_ALG_SHA384}, > + {HASH_ALGO_SHA512, TPM_ALG_SHA512}, > + {HASH_ALGO_SM3_256, TPM_ALG_SM3_256}, > +}; > + > /* > - * Calculate the boot aggregate hash > + * The boot_aggregate is a cumulative hash over TPM registers 0 - 7. With > + * TPM 2.0 hash agility, TPM chips could support multiple TPM PCR banks, > + * allowing firmware to configure and enable different banks. > + * > + * Instead of hard coding the TPM bank hash algorithm used for calculating > + * the boot-aggregate, see if the configured IMA_DEFAULT_HASH > algorithm is > + * an allocated TPM bank, otherwise use the first allocated TPM bank. > + * > + * For TPM 1.2 SHA1 is the only hash algorithm. > */ > static int __init ima_calc_boot_aggregate_tfm(char *digest, > struct crypto_shash *tfm) > @@ -673,6 +690,24 @@ static int __init ima_calc_boot_aggregate_tfm(char > *digest, > if (rc != 0) > return rc; > > + for (i = 0; i < ARRAY_SIZE(tpm2_hash_map); i++) { > + if (tpm2_hash_map[i].crypto_id == ima_hash_algo) { It is not necessary to define a new map. ima_tpm_chip->allocated_banks has a crypto_id field. > + d.alg_id = tpm2_hash_map[i].tpm_id; > + break; > + } > + } > + > + for (i = 0; i < ima_tpm_chip->nr_allocated_banks; i++) { > + if (ima_tpm_chip->allocated_banks[i].alg_id == d.alg_id) > + break; > + } > + > + if (i == ima_tpm_chip->nr_allocated_banks) > + d.alg_id = ima_tpm_chip->allocated_banks[0].alg_id; This code assumes that the algorithm used to calculate boot_aggregate and the algorithm of the PCR bank can be different. I don't know if it is possible to communicate to the verifier which bank has been selected (it depends on the local configuration). In my opinion the safest approach would be to use the same algorithm for the digest and the PCR bank. If you agree to this, then the code above must be moved to ima_calc_boot_aggregate() so that the algorithm of the selected PCR bank can be passed to ima_alloc_tfm(). The selected PCR bank might be not the first, if the algorithm is unknown to the crypto subsystem. > + pr_info("Calculating the boot-aggregregate, reading TPM PCR Typo. Roberto HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063 Managing Director: Li Peng, Li Jian, Shi Yanli