Qi,

A few comments below.

Regards,
Jian


> -----Original Message-----
> From: Zhang, Qi1 <qi1.zh...@intel.com>
> Sent: Friday, July 17, 2020 4:50 PM
> To: devel@edk2.groups.io
> Cc: Yao, Jiewen <jiewen....@intel.com>; Wang, Jian J <jian.j.w...@intel.com>;
> Zhang, Qi1 <qi1.zh...@intel.com>; Kumar, Rahul1 <rahul1.ku...@intel.com>
> Subject: [PATCH v4 4/6] SecurityPkg/Tcg2: Add TcgPpi
> 
> From: Jiewen Yao <jiewen....@intel.com>
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2841
> 
> Cc: Jiewen Yao <jiewen....@intel.com>
> Cc: Jian J Wang <jian.j.w...@intel.com>
> Cc: Qi Zhang <qi1.zh...@intel.com>
> Cc: Rahul Kumar <rahul1.ku...@intel.com>
> Signed-off-by: Jiewen Yao <jiewen....@intel.com>
> ---
>  SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c   | 110 +++++++++++++++++++++-------
>  SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf |   3 +-
>  2 files changed, 86 insertions(+), 27 deletions(-)
> 
> diff --git a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c
> b/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c
> index 19b8e4b318..592f760057 100644
> --- a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c
> +++ b/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Initialize TPM2 device and measure FVs before handing off control to DXE.
> 
> 
> 
> -Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  Copyright (c) 2017, Microsoft Corporation.  All rights reserved. <BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
> @@ -17,6 +17,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
>  #include <Ppi/EndOfPeiPhase.h>
> 
>  #include <Ppi/FirmwareVolumeInfoMeasurementExcluded.h>
> 
>  #include <Ppi/FirmwareVolumeInfoPrehashedFV.h>
> 
> +#include <Ppi/Tcg.h>
> 
> 
> 
>  #include <Guid/TcgEventHob.h>
> 
>  #include <Guid/MeasuredFvHob.h>
> 
> @@ -66,6 +67,48 @@ EFI_PEI_PPI_DESCRIPTOR  mTpmInitializationDonePpiList
> = {
>    NULL
> 
>  };
> 
> 
> 
> +/**
> 
> +  Do a hash operation on a data buffer, extend a specific TPM PCR with the
> hash result,
> 
> +  and build a GUIDed HOB recording the event which will be passed to the DXE
> phase and
> 
> +  added into the Event Log.
> 
> +
> 
> +  @param[in]      This          Indicates the calling context
> 
> +  @param[in]      Flags         Bitmap providing additional information.
> 
> +  @param[in]      HashData      If BIT0 of Flags is 0, it is physical 
> address of the
> 
> +                                start of the data buffer to be hashed, 
> extended, and logged.
> 
> +                                If BIT0 of Flags is 1, it is physical 
> address of the
> 
> +                                start of the pre-hash data buffter to be 
> extended, and logged.
> 
> +                                The pre-hash data format is 
> TPML_DIGEST_VALUES.
> 
> +  @param[in]      HashDataLen   The length, in bytes, of the buffer 
> referenced by
> HashData.
> 
> +  @param[in]      NewEventHdr   Pointer to a TCG_PCR_EVENT_HDR data
> structure.
> 
> +  @param[in]      NewEventData  Pointer to the new event data.
> 
> +
> 
> +  @retval EFI_SUCCESS           Operation completed successfully.
> 
> +  @retval EFI_OUT_OF_RESOURCES  No enough memory to log the new event.
> 
> +  @retval EFI_DEVICE_ERROR      The command was unsuccessful.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +HashLogExtendEvent (
> 
> +  IN      EDKII_TCG_PPI             *This,
> 
> +  IN      UINT64                    Flags,
> 
> +  IN      UINT8                     *HashData,
> 
> +  IN      UINTN                     HashDataLen,
> 
> +  IN      TCG_PCR_EVENT_HDR         *NewEventHdr,
> 
> +  IN      UINT8                     *NewEventData
> 
> +  );
> 
> +
> 
> +EDKII_TCG_PPI mEdkiiTcgPpi = {
> 
> +  HashLogExtendEvent
> 
> +};
> 
> +
> 
> +EFI_PEI_PPI_DESCRIPTOR  mTcgPpiList = {
> 
> +  EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
> 
> +  &gEdkiiTcgPpiGuid,
> 
> +  &mEdkiiTcgPpi
> 
> +};
> 
> +
> 
>  //
> 
>  // Number of firmware blobs to grow by each time we run out of room
> 
>  //
> 
> @@ -375,9 +418,13 @@ LogHashEvent (
>    and build a GUIDed HOB recording the event which will be passed to the DXE
> phase and
> 
>    added into the Event Log.
> 
> 
> 
> +  @param[in]      This          Indicates the calling context
> 
>    @param[in]      Flags         Bitmap providing additional information.
> 
> -  @param[in]      HashData      Physical address of the start of the data 
> buffer
> 
> -                                to be hashed, extended, and logged.
> 
> +  @param[in]      HashData      If BIT0 of Flags is 0, it is physical 
> address of the
> 
> +                                start of the data buffer to be hashed, 
> extended, and logged.
> 
> +                                If BIT0 of Flags is 1, it is physical 
> address of the
> 
> +                                start of the pre-hash data buffter to be 
> extended, and logged.
> 
> +                                The pre-hash data format is 
> TPML_DIGEST_VALUES.
> 
>    @param[in]      HashDataLen   The length, in bytes, of the buffer 
> referenced by
> HashData.
> 
>    @param[in]      NewEventHdr   Pointer to a TCG_PCR_EVENT_HDR data
> structure.
> 
>    @param[in]      NewEventData  Pointer to the new event data.
> 
> @@ -388,7 +435,9 @@ LogHashEvent (
> 
> 
>  **/
> 
>  EFI_STATUS
> 
> +EFIAPI
> 
>  HashLogExtendEvent (
> 
> +  IN      EDKII_TCG_PPI             *This,
> 
>    IN      UINT64                    Flags,
> 
>    IN      UINT8                     *HashData,
> 
>    IN      UINTN                     HashDataLen,
> 
> @@ -403,16 +452,23 @@ HashLogExtendEvent (
>      return EFI_DEVICE_ERROR;
> 
>    }
> 
> 
> 
> -  Status = HashAndExtend (
> 
> -             NewEventHdr->PCRIndex,
> 
> -             HashData,
> 
> -             HashDataLen,
> 
> +  if(Flags & EDKII_TCG_PRE_HASH) {
> 
> +    ZeroMem (&DigestList, sizeof(DigestList));
> 
> +    CopyMem(&DigestList, HashData, sizeof(DigestList));

Missing a space before '('.

> 
> +    Status = Tpm2PcrExtend(

Missing a space before '('.

> 
> +             0,
> 
>               &DigestList
> 
>               );
> 
> +  } else {
> 
> +    Status = HashAndExtend (
> 
> +               NewEventHdr->PCRIndex,
> 
> +               HashData,
> 
> +               HashDataLen,
> 
> +               &DigestList
> 
> +               );
> 
> +  }
> 
>    if (!EFI_ERROR (Status)) {
> 
> -    if ((Flags & EFI_TCG2_EXTEND_ONLY) == 0) {
> 
> -      Status = LogHashEvent (&DigestList, NewEventHdr, NewEventData);
> 
> -    }
> 
> +    Status = LogHashEvent (&DigestList, NewEventHdr, NewEventData);
> 
>    }
> 
> 
> 
>    if (Status == EFI_DEVICE_ERROR) {
> 
> @@ -452,6 +508,7 @@ MeasureCRTMVersion (
>    TcgEventHdr.EventSize = (UINT32) StrSize((CHAR16*)PcdGetPtr
> (PcdFirmwareVersionString));
> 
> 
> 
>    return HashLogExtendEvent (
> 
> +           &mEdkiiTcgPpi,
> 
>             0,
> 
>             (UINT8*)PcdGetPtr (PcdFirmwareVersionString),
> 
>             TcgEventHdr.EventSize,
> 
> @@ -651,27 +708,22 @@ MeasureFvImage (
>      // FV pre-hash algos comply with current TPM hash requirement
> 
>      // Skip hashing step in measure, only extend DigestList to PCR and log 
> event
> 
>      //
> 
> -    Status = Tpm2PcrExtend(
> 
> -               0,
> 
> -               &DigestList
> 
> +    Status = HashLogExtendEvent (
> 
> +               &mEdkiiTcgPpi,
> 
> +               EDKII_TCG_PRE_HASH,
> 
> +               (UINT8*) &DigestList,        // HashData
> 
> +               (UINTN) sizeof(DigestList),  // HashDataLen
> 
> +               &TcgEventHdr,                // EventHdr
> 
> +               EventData                    // EventData
> 
>                 );
> 
> -
> 
> -    if (!EFI_ERROR(Status)) {
> 
> -       Status = LogHashEvent (&DigestList, &TcgEventHdr, EventData);
> 
> -       DEBUG ((DEBUG_INFO, "The pre-hashed FV which is extended & logged by
> Tcg2Pei starts at: 0x%x\n", FvBase));
> 
> -       DEBUG ((DEBUG_INFO, "The pre-hashed FV which is extended & logged by
> Tcg2Pei has the size: 0x%x\n", FvLength));
> 
> -    } else if (Status == EFI_DEVICE_ERROR) {
> 
> -      BuildGuidHob (&gTpmErrorHobGuid,0);
> 
> -      REPORT_STATUS_CODE (
> 
> -        EFI_ERROR_CODE | EFI_ERROR_MINOR,
> 
> -        (PcdGet32 (PcdStatusCodeSubClassTpmDevice) |
> EFI_P_EC_INTERFACE_ERROR)
> 
> -        );
> 
> -    }

Please explain the purpose of the removal of this part of code in commit 
message.
It looks that it's not a relevant change to this patch series.

> 
> +    DEBUG ((DEBUG_INFO, "The pre-hashed FV which is extended & logged by
> Tcg2Pei starts at: 0x%x\n", FvBase));
> 
> +    DEBUG ((DEBUG_INFO, "The pre-hashed FV which is extended & logged by
> Tcg2Pei has the size: 0x%x\n", FvLength));
> 
>    } else {
> 
>      //
> 
>      // Hash the FV, extend digest to the TPM and log TCG event
> 
>      //
> 
>      Status = HashLogExtendEvent (
> 
> +               &mEdkiiTcgPpi,
> 
>                 0,
> 
>                 (UINT8*) (UINTN) FvBase, // HashData
> 
>                 (UINTN) FvLength,        // HashDataLen
> 
> @@ -849,6 +901,12 @@ PeimEntryMP (
>  {
> 
>    EFI_STATUS                        Status;
> 
> 
> 
> +  //
> 
> +  // install Tcg Services
> 
> +  //
> 
> +  Status = PeiServicesInstallPpi (&mTcgPpiList);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
>    if (PcdGet8 (PcdTpm2ScrtmPolicy) == 1) {
> 
>      Status = MeasureCRTMVersion ();
> 
>    }
> 
> @@ -893,7 +951,7 @@ MeasureSeparatorEventWithError (
>    TcgEvent.PCRIndex  = PCRIndex;
> 
>    TcgEvent.EventType = EV_SEPARATOR;
> 
>    TcgEvent.EventSize = (UINT32)sizeof (EventData);
> 
> -  return HashLogExtendEvent(0,(UINT8 *)&EventData, TcgEvent.EventSize,
> &TcgEvent,(UINT8 *)&EventData);
> 
> +  return HashLogExtendEvent(&mEdkiiTcgPpi, 0, (UINT8 *)&EventData,
> TcgEvent.EventSize, &TcgEvent,(UINT8 *)&EventData);
> 
>  }
> 
> 
> 
>  /**
> 
> diff --git a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf
> b/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf
> index 3d361e8859..f64b29f1ae 100644
> --- a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf
> +++ b/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf
> @@ -8,7 +8,7 @@
>  #
> 
>  #  This module will initialize TPM device, measure reported FVs and BIOS 
> version.
> 
>  #
> 
> -# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  # Copyright (c) 2017, Microsoft Corporation.  All rights reserved. <BR>
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -72,6 +72,7 @@
>    gPeiTpmInitializationDonePpiGuid                                     ## 
> PRODUCES
> 
>    gEfiEndOfPeiSignalPpiGuid                                            ## 
> SOMETIMES_CONSUMES
> ## NOTIFY
> 
>    gEdkiiPeiFirmwareVolumeInfoPrehashedFvPpiGuid                        ##
> SOMETIMES_CONSUMES
> 
> +  gEdkiiTcgPpiGuid                                                     ## 
> PRODUCES
> 
> 
> 
>  [Pcd]
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString              ##
> SOMETIMES_CONSUMES
> 
> --
> 2.26.2.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62972): https://edk2.groups.io/g/devel/message/62972
Mute This Topic: https://groups.io/mt/75608832/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to