May I know which platform you have run the test? I think we need cover both TD and TPM in real platform.
> -----Original Message----- > From: Xu, Min M <[email protected]> > Sent: Tuesday, November 2, 2021 10:51 AM > To: [email protected] > Cc: Xu, Min M <[email protected]>; Kinney, Michael D > <[email protected]>; Liming Gao <[email protected]>; Liu, > Zhiguang <[email protected]>; Yao, Jiewen <[email protected]>; > Wang, Jian J <[email protected]>; Sami Mujawar > <[email protected]>; Gerd Hoffmann <[email protected]> > Subject: [PATCH V4 3/3] SecurityPkg: Support CcMeasurementProtocol in > DxeTpmMeasurementLib > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3625 > > DxeTpmMeasurementLib supports TPM based measurement in DXE phase. > After CcMeasurementProtocol is introduced, CC based measurement needs > to be supported in DxeTpmMeasurementLib as well. > > In TpmMeasureAndLogData, CC based measurement will be first called. > If it failed, TPM based measurement will be called sequentially. > Currently there is an assumption that CC based measurement and > TPM based measurement won't be exist at the same time.If the > assumption is not true in the future, we will revisit here then. > > Cc: Michael D Kinney <[email protected]> > Cc: Liming Gao <[email protected]> > Cc: Zhiguang Liu <[email protected]> > Cc: Jiewen Yao <[email protected]> > Cc: Jian J Wang <[email protected]> > Cc: Sami Mujawar <[email protected]> > Cc: Gerd Hoffmann <[email protected]> > Signed-off-by: Min Xu <[email protected]> > --- > .../DxeTpmMeasurementLib.c | 91 ++++++++++++++++++- > .../DxeTpmMeasurementLib.inf | 9 +- > 2 files changed, 92 insertions(+), 8 deletions(-) > > diff --git > a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.c > b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.c > index 061136ee7860..2ddb9033a0d5 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 > Confidential > + Computing (CC) measure registers. > > Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved. <BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > @@ -19,8 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > #include <Guid/Acpi.h> > #include <IndustryStandard/Acpi.h> > - > - > +#include <Protocol/CcMeasurement.h> > > /** > Tpm12 measure and log data, and extend the measurement result into a > specific PCR. > @@ -149,6 +149,73 @@ Tpm20MeasureAndLogData ( > return Status; > } > > +/** > + Cc measure and log data, and extend the measurement result into a > + specific CC MR. > + > + @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 > referenced by > HashData > + > + @retval EFI_SUCCESS Operation completed successfully. > + @retval EFI_UNSUPPORTED Tdx device not available. > + @retval EFI_OUT_OF_RESOURCES Out of memory. > + @retval EFI_DEVICE_ERROR The operation was unsuccessful. > +**/ > +EFI_STATUS > +EFIAPI > +CcMeasureAndLogData ( > + IN UINT32 PcrIndex, > + IN UINT32 EventType, > + IN VOID *EventLog, > + IN UINT32 LogLen, > + IN VOID *HashData, > + IN UINT64 HashDataLen > + ) > +{ > + EFI_STATUS Status; > + EFI_CC_MEASUREMENT_PROTOCOL *CcProtocol; > + EFI_CC_EVENT *EfiCcEvent; > + UINT32 MrIndex; > + > + Status = gBS->LocateProtocol (&gEfiCcMeasurementProtocolGuid, NULL, > (VOID **) &CcProtocol); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + Status = CcProtocol->MapPcrToMrIndex (CcProtocol, PcrIndex, &MrIndex); > + if (EFI_ERROR (Status)) { > + return EFI_INVALID_PARAMETER; > + } > + > + EfiCcEvent = (EFI_CC_EVENT *) AllocateZeroPool (LogLen + sizeof > (EFI_CC_EVENT)); > + if(EfiCcEvent == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + EfiCcEvent->Size = (UINT32) LogLen + sizeof (EFI_CC_EVENT) - sizeof > (EfiCcEvent->Event); > + EfiCcEvent->Header.HeaderSize = sizeof (EFI_CC_EVENT_HEADER); > + EfiCcEvent->Header.HeaderVersion = EFI_CC_EVENT_HEADER_VERSION; > + EfiCcEvent->Header.MrIndex = MrIndex; > + EfiCcEvent->Header.EventType = EventType; > + CopyMem (&EfiCcEvent->Event[0], EventLog, LogLen); > + > + Status = 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 specific > PCR. > > @@ -178,9 +245,9 @@ TpmMeasureAndLogData ( > EFI_STATUS Status; > > // > - // Try to measure using Tpm20 protocol > + // Try to measure using Cc measurement protocol > // > - Status = Tpm20MeasureAndLogData( > + Status = CcMeasureAndLogData ( > PcrIndex, > EventType, > EventLog, > @@ -189,6 +256,20 @@ TpmMeasureAndLogData ( > HashDataLen > ); > > + if (EFI_ERROR (Status)) { > + // > + // Try to measure using Tpm20 protocol > + // > + Status = Tpm20MeasureAndLogData( > + PcrIndex, > + EventType, > + EventLog, > + LogLen, > + HashData, > + HashDataLen > + ); > + } > + > if (EFI_ERROR (Status)) { > // > // Try to measure using Tpm1.2 protocol > 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, and > # extend the measurement result into a specific PCR. > @@ -40,5 +42,6 @@ > UefiBootServicesTableLib > > [Protocols] > - gEfiTcgProtocolGuid ## SOMETIMES_CONSUMES > - gEfiTcg2ProtocolGuid ## SOMETIMES_CONSUMES > + gEfiTcgProtocolGuid ## SOMETIMES_CONSUMES > + gEfiTcg2ProtocolGuid ## SOMETIMES_CONSUMES > + gEfiCcMeasurementProtocolGuid ## SOMETIMES_CONSUMES > -- > 2.29.2.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83093): https://edk2.groups.io/g/devel/message/83093 Mute This Topic: https://groups.io/mt/86758672/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
