Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1140157ybi; Wed, 3 Jul 2019 10:10:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqxxKM7jkcXVIf1ssII505MbOgcvZzDubMc2U83jW3k69vbZNEnQhGmzuz5f3uviIwlujnA6 X-Received: by 2002:a65:4085:: with SMTP id t5mr38927707pgp.109.1562173811933; Wed, 03 Jul 2019 10:10:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562173811; cv=none; d=google.com; s=arc-20160816; b=RDyRCK/eDoL9pwcnN61a0Ur0s0W0ABKQ1r/4noVhnAFh+dCGIXb7NcIt3Hny4wPs10 5arkVQ0bfu5g2NBbUzio9vBEJGTclm7mqd3a2TcO1IvKoyTkmrpWvdflu4+EJMukGPGf RESqVvozD9OgiLhI9ptNkCRJtbgGwZXKq3tx9p3TVMAYGwHjmN3Q2gVvKqSd/zZycIvc oqi88ewheZkG1KmsZfEzc9NHR7do/8bjQAMa8IxCnoPGL6GiI3qY9cU1bJYTwlsU1d99 afAAM/8YQMFNlM1wWwNxsL3HEJOZBDsZ0UL0Zt4BlzS9Ol9EiFVOWh2v79vTSovQ10Ku HKOA== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=mhg+NCmS+iYaY1P+cKKIyCtmeXvridPuwydYzrXEQ0k=; b=TZwnSiqCS9PLf4lweUp1GozH9w9ondZhvBFxY8cOSQTiL+9e6hv4BVygj9/0Gh1g6e xnEBSREU7JZ2ErL0nas/vVXgGNdNgAL/6sAoF3/yrOHJXBXDaNhUsdZFD/YXng5unFAU DuKfHB1oVI1pdfljPaIXHLzahRNgulL9Ym6ZsFOkVXaHZkNj3Yp3kKY4oBrAkKN/qW7u mmJuyOp8bM9vrAIj1xgtDSzhgscgpyaieMujWy56/RRZpSE9jrP5bQcty4BpPcw7j4o4 BZ+krvlYUn5Hq3zzHsXpSYt/+Old4/E+DiCy3z+p6z5WfwAMkwD1qWVUG5Z3UXJ3WdIa IvvQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3si2722931plz.57.2019.07.03.10.09.56; Wed, 03 Jul 2019 10:10:11 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727169AbfGCRIk (ORCPT + 99 others); Wed, 3 Jul 2019 13:08:40 -0400 Received: from linux.microsoft.com ([13.77.154.182]:33640 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726430AbfGCRIj (ORCPT ); Wed, 3 Jul 2019 13:08:39 -0400 Received: from [10.91.6.157] (unknown [131.107.159.157]) by linux.microsoft.com (Postfix) with ESMTPSA id 7C54E20BCFB8; Wed, 3 Jul 2019 10:08:38 -0700 (PDT) Subject: Re: [PATCH] tpm: Document UEFI event log quirks To: Jarkko Sakkinen , linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-doc@vger.kernel.org Cc: tweek@google.com, matthewgarrett@google.com, Jonathan Corbet References: <20190703161109.22935-1-jarkko.sakkinen@linux.intel.com> From: Jordan Hand Message-ID: Date: Wed, 3 Jul 2019 10:08:38 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20190703161109.22935-1-jarkko.sakkinen@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/3/19 9:11 AM, Jarkko Sakkinen wrote: > There are some weird quirks when it comes to UEFI event log. Provide a > brief introduction to TPM event log mechanism and describe the quirks > and how they can be sorted out. > > Signed-off-by: Jarkko Sakkinen > --- > Documentation/security/tpm/tpm-eventlog.rst | 53 +++++++++++++++++++++ > 1 file changed, 53 insertions(+) > create mode 100644 Documentation/security/tpm/tpm-eventlog.rst > > diff --git a/Documentation/security/tpm/tpm-eventlog.rst b/Documentation/security/tpm/tpm-eventlog.rst > new file mode 100644 > index 000000000000..2ca8042bdb17 > --- /dev/null > +++ b/Documentation/security/tpm/tpm-eventlog.rst > @@ -0,0 +1,53 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +============= > +TPM Event Log > +============= > + > +| Authors: > +| Stefan Berger > + > +This document briefly describes what TPM log is and how it is handed > +over from the preboot firmware to the operating system. > + > +Introduction > +============ > + > +The preboot firmware maintains an event log that gets new entries every > +time something gets hashed by it to any of the PCR registers. The events > +are segregated by their type and contain the value of the hashed PCR > +register. Typically, the preboot firmware will hash the components to > +who execution is to be handed over or actions relevant to the boot > +process. > + > +The main application for this is remote attestation and the reason why > +it is useful is nicely put in the very first section of [1]: > + > +"Attestation is used to provide information about the platform’s state > +to a challenger. However, PCR contents are difficult to interpret; > +therefore, attestation is typically more useful when the PCR contents > +are accompanied by a measurement log. While not trusted on their own, > +the measurement log contains a richer set of information than do the PCR > +contents. The PCR contents are used to provide the validation of the > +measurement log." > + > +UEFI event log > +============== > + > +UEFI provided event log has a few somewhat weird quirks. > + > +Before calling ExitBootServices() Linux EFI stub copies the event log to > +a custom configuration table defined by the stub itself. Unfortanely, > +the events generated by ExitBootServices() do end up to the table. do not > + > +The firmware provides so called final events configuration table to sort > +out this issue. Events gets mirrored to this table after the first time > +EFI_TCG2_PROTOCOL.GetEventLog() gets called. > + > +This introduces another problem: nothing guarantees that it is not > +called before the stub gets to run. Thus, it needs to copy the final > +events table preboot size to the custom configuration table so that > +kernel offset it later on. This doesn't really explain what the size will be used for. Matthew's patch description for "tpm: Don't duplicate events from the final event log in the TCG2 log" outlines this well. You could maybe word it differently but I think the information is necessary: "We can avoid this problem by looking at the size of the Final Event Log just before we call ExitBootServices() and exporting this to the main kernel. The kernel can then skip over all events that occured before ExitBootServices() and only append events that were not also logged to the main log." > + > +[1] https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ > +[2] The final concatenation is done in drivers/char/tpm/eventlog/efi.c > Thanks, Jordan