From nobody Fri Dec 19 19:20:27 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+83611+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83611+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1636590197; cv=none; d=zohomail.com; s=zohoarc; b=FidmTXs1v6HjfAABHReP0gYHHzy6mvERvgik8aADSiaY2Mcgj9N59iGOwtarfrO6eFhuz5RT1OuAED/GHUN1slhZdMKZyT4VNQOq9/pR12HNXMIRV8vSjlsDutzQLRXIlbw9UUaWtri1CMLL+Clqvs/fv2733oBdAK/RGsmj1Tw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636590197; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=QqL+Bo5x9Rqt7gRI667v6HBlyqmONAbVhBdMKDqCPEc=; b=ZzRTt/nqoi4Tg3AsT2eiwywXQiof2gRrLWkRe0gNfHvnb59VuCWk/ECvnLsaz8hvxAvU5WpZTA9WSpfO0+O0ybEBQI7yFKvTTt5Ixp26lbUZZnCDLP5wIBDMrUbgD6ecgqhfuTAXRSkaiUETryzd/mr8mh0JIAqWROefTo5/cKM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83611+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1636590197894471.67840039395514; Wed, 10 Nov 2021 16:23:17 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id HkRSYY1788612xAiWsbY3UPZ; Wed, 10 Nov 2021 16:23:17 -0800 X-Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web12.3921.1636590189866719464 for ; Wed, 10 Nov 2021 16:23:17 -0800 X-IronPort-AV: E=McAfee;i="6200,9189,10164"; a="296260513" X-IronPort-AV: E=Sophos;i="5.87,225,1631602800"; d="scan'208";a="296260513" X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Nov 2021 16:23:16 -0800 X-IronPort-AV: E=Sophos;i="5.87,225,1631602800"; d="scan'208";a="504206682" X-Received: from mxu9-mobl1.ccr.corp.intel.com ([10.238.4.37]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Nov 2021 16:23:14 -0800 From: "Min Xu" To: devel@edk2.groups.io Cc: Min Xu , Michael D Kinney , Liming Gao , Zhiguang Liu , Jiewen Yao , Jian J Wang , Sami Mujawar , Gerd Hoffmann Subject: [edk2-devel] [PATCH V6 3/3] SecurityPkg: Support CcMeasurementProtocol in DxeTpmMeasurementLib Date: Thu, 11 Nov 2021 08:22:25 +0800 Message-Id: <06db065ef332895d2de2ed17a754ba83532cb401.1636589529.git.min.m.xu@intel.com> In-Reply-To: References: MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,min.m.xu@intel.com X-Gm-Message-State: 5IOWgzYl0BTFV9QG65kaxa5Bx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1636590197; bh=Uxi/MQPMBabmiLANWYAN62vz8MhdvVqfpoPkRSUGNY8=; h=Cc:Date:From:Reply-To:Subject:To; b=Ub7xeZbiO9ecSsCV5UtR75j7NvWdmEEzJPs2LgTCh0aK/v2jaXdp+OfgPu2T9Rlj2uw 8fBvxsY5JsdS58uFiHEkGRZtladicXJLWN5Xk1fryJnBSvfTsSPOs82fPuaChrW7xABrz PZkNjVvtBMicMH4C/aNa/QDOWEWdI27q0iI= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1636590199478100002 Content-Type: text/plain; charset="utf-8" BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3625 DxeTpmMeasurementLib supports TPM based measurement in DXE phase. After CcMeasurementProtocol is introduced, CC based measurement needs to be supported in DxeTpmMeasurementLib as well. A platform should have only one RTS/RTR. Only one of (virtual)TPM1.2, (virtual)TPM2.0 and CC MR exists. Then only one TCG_SERVICE_PROTOCOL, TCG2_PROTOCOL, CC_MEASUREMENT_PROTOCOL is exposed. In this library when do measurement only one of above 3 protocols will be called. Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Cc: Jiewen Yao Cc: Jian J Wang Cc: Sami Mujawar Cc: Gerd Hoffmann Reviewed-by: Sami Mujawar Signed-off-by: Min Xu --- .../DxeTpmMeasurementLib.c | 125 +++++++++++++++--- .../DxeTpmMeasurementLib.inf | 9 +- 2 files changed, 112 insertions(+), 22 deletions(-) diff --git a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.= c b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.c index 061136ee7860..a6337715a167 100644 --- a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.c +++ b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.c @@ -1,5 +1,6 @@ /** @file - This library is used by other modules to measure data to TPM. + This library is used by other modules to measure data to TPM and Confide= ntial + Computing (CC) measure registers. =20 Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -19,8 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent =20 #include #include - - +#include =20 /** Tpm12 measure and log data, and extend the measurement result into a spe= cific PCR. @@ -37,6 +37,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent @retval EFI_OUT_OF_RESOURCES Out of memory. @retval EFI_DEVICE_ERROR The operation was unsuccessful. **/ +STATIC EFI_STATUS Tpm12MeasureAndLogData ( IN UINT32 PcrIndex, @@ -103,6 +104,7 @@ Tpm12MeasureAndLogData ( @retval EFI_OUT_OF_RESOURCES Out of memory. @retval EFI_DEVICE_ERROR The operation was unsuccessful. **/ +STATIC EFI_STATUS Tpm20MeasureAndLogData ( IN UINT32 PcrIndex, @@ -149,6 +151,74 @@ Tpm20MeasureAndLogData ( return Status; } =20 +/** + Cc measure and log data, and extend the measurement result into a + specific CC MR. + + @param[in] CcProtocol Instance of CC measurement protocol + @param[in] PcrIndex PCR Index. + @param[in] EventType Event type. + @param[in] EventLog Measurement event log. + @param[in] LogLen Event log length in bytes. + @param[in] HashData The start of the data buffer to be hashed, = extended. + @param[in] HashDataLen The length, in bytes, of the buffer referen= ced by HashData + + @retval EFI_SUCCESS Operation completed successfully. + @retval EFI_UNSUPPORTED CC guest not available. + @retval EFI_OUT_OF_RESOURCES Out of memory. + @retval EFI_DEVICE_ERROR The operation was unsuccessful. + @retval EFI_INVALID_PARAMETER The input parameter is invalid. +**/ +STATIC +EFI_STATUS +CcMeasureAndLogData ( + IN EFI_CC_MEASUREMENT_PROTOCOL *CcProtocol, + IN UINT32 PcrIndex, + IN UINT32 EventType, + IN VOID *EventLog, + IN UINT32 LogLen, + IN VOID *HashData, + IN UINT64 HashDataLen + ) +{ + EFI_STATUS Status; + EFI_CC_EVENT *EfiCcEvent; + EFI_CC_MR_INDEX MrIndex; + + if (CcProtocol =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + Status =3D CcProtocol->MapPcrToMrIndex (CcProtocol, PcrIndex, &MrIndex); + if (EFI_ERROR (Status)) { + return Status; + } + + EfiCcEvent =3D (EFI_CC_EVENT *) AllocateZeroPool (LogLen + sizeof (EFI_C= C_EVENT)); + if(EfiCcEvent =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + EfiCcEvent->Size =3D (UINT32) LogLen + sizeof (EFI_CC_EVENT) - sizeof (E= fiCcEvent->Event); + EfiCcEvent->Header.HeaderSize =3D sizeof (EFI_CC_EVENT_HEADER); + EfiCcEvent->Header.HeaderVersion =3D EFI_CC_EVENT_HEADER_VERSION; + EfiCcEvent->Header.MrIndex =3D MrIndex; + EfiCcEvent->Header.EventType =3D EventType; + CopyMem (&EfiCcEvent->Event[0], EventLog, LogLen); + + Status =3D CcProtocol->HashLogExtendEvent ( + CcProtocol, + 0, + (EFI_PHYSICAL_ADDRESS) (UINTN) HashData, + HashDataLen, + EfiCcEvent + ); + FreePool (EfiCcEvent); + + return Status; +} + + /** Tpm measure and log data, and extend the measurement result into a speci= fic PCR. =20 @@ -175,25 +245,16 @@ TpmMeasureAndLogData ( IN UINT64 HashDataLen ) { - EFI_STATUS Status; + EFI_STATUS Status; + EFI_CC_MEASUREMENT_PROTOCOL *CcProtocol; =20 - // - // Try to measure using Tpm20 protocol - // - Status =3D Tpm20MeasureAndLogData( - PcrIndex, - EventType, - EventLog, - LogLen, - HashData, - HashDataLen - ); - - if (EFI_ERROR (Status)) { + Status =3D gBS->LocateProtocol (&gEfiCcMeasurementProtocolGuid, NULL, (V= OID **) &CcProtocol); + if (!EFI_ERROR (Status)) { // - // Try to measure using Tpm1.2 protocol + // Try to measure using Cc measurement protocol // - Status =3D Tpm12MeasureAndLogData( + Status =3D CcMeasureAndLogData ( + CcProtocol, PcrIndex, EventType, EventLog, @@ -201,6 +262,32 @@ TpmMeasureAndLogData ( HashData, HashDataLen ); + } else { + // + // Try to measure using Tpm20 protocol + // + Status =3D Tpm20MeasureAndLogData ( + PcrIndex, + EventType, + EventLog, + LogLen, + HashData, + HashDataLen + ); + + if (EFI_ERROR (Status)) { + // + // Try to measure using Tpm1.2 protocol + // + Status =3D Tpm12MeasureAndLogData( + PcrIndex, + EventType, + EventLog, + LogLen, + HashData, + HashDataLen + ); + } } =20 return Status; diff --git a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.= inf b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf index 7d41bc41f95d..3af3d4e33b25 100644 --- a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf +++ b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf @@ -1,5 +1,7 @@ ## @file -# Provides TPM measurement functions for TPM1.2 and TPM 2.0 +# Provides below measurement functions: +# 1. TPM measurement functions for TPM1.2 and TPM 2.0 +# 2. Confidential Computing (CC) measurement functions # # This library provides TpmMeasureAndLogData() to measure and log data, a= nd # extend the measurement result into a specific PCR. @@ -40,5 +42,6 @@ UefiBootServicesTableLib =20 [Protocols] - gEfiTcgProtocolGuid ## SOMETIMES_CONSUMES - gEfiTcg2ProtocolGuid ## SOMETIMES_CONSUMES + gEfiTcgProtocolGuid ## SOMETIMES_CONSUMES + gEfiTcg2ProtocolGuid ## SOMETIMES_CONSUMES + gEfiCcMeasurementProtocolGuid ## SOMETIMES_CONSUMES --=20 2.29.2.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83611): https://edk2.groups.io/g/devel/message/83611 Mute This Topic: https://groups.io/mt/86971517/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-