Reviewed by: [email protected]

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Zhang, Chao B
> Sent: Wednesday, June 8, 2016 3:38 PM
> To: [email protected]
> Cc: Yao, Jiewen <[email protected]>; Zhang, Chao B
> <[email protected]>; Long, Qin <[email protected]>
> Subject: [edk2] [PATCH] SecurityPkg: Tcg2Smm: Make TCG2 PP version
> configurable
> 
> Make TCG2 PP version configurable to meet different request. Current
> default version is 1.3.
> http://www.trustedcomputinggroup.org/physical-presence-interface_1-30_
> 0-52/
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Chao Zhang <[email protected]>
> ---
>  SecurityPkg/SecurityPkg.dec         |  4 ++++
>  SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c   | 42
> ++++++++++++++++++++++++++++++++++++-
>  SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.h   |  6 ++++++
>  SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf |  1 +
>  SecurityPkg/Tcg/Tcg2Smm/Tpm.asl     |  4 ++--
>  5 files changed, 54 insertions(+), 3 deletions(-)
> 
> diff --git a/SecurityPkg/SecurityPkg.dec b/SecurityPkg/SecurityPkg.dec
> index f4f3174..a9da5a6 100644
> --- a/SecurityPkg/SecurityPkg.dec
> +++ b/SecurityPkg/SecurityPkg.dec
> @@ -299,6 +299,10 @@
>    # @ValidList  0x80000003 | 0x010D0000
> 
> gEfiSecurityPkgTokenSpaceGuid.PcdStatusCodeSubClassTpmDevice|0x010D0
> 000|UINT32|0x00000007
> 
> +  ## Null-terminated string of the Version of Physical Presence interface
> supported by platform.
> +  # @Prompt Version of Physical Presence interface supported by
> platform.
> +
> gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer|"1.3"|
> VOID*|0x00000008
> +
>  [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
>    ## Indicates the presence or absence of the platform operator during
> firmware booting.
>    #  If platform operator is not physical presence during boot. TPM will be
> locked and the TPM commands
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> index dab1f53..b497475 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> @@ -251,6 +251,41 @@ AssignOpRegion (
>  }
> 
>  /**
> +  Patch version string of Physical Presence interface supported by platform.
> The initial string tag in TPM
> +ACPI table is "$PV".
> +
> +  @param[in, out] Table          The TPM item in ACPI table.
> +  @param[in]      PPVer          Version string of Physical Presence
> interface supported by platform.
> +
> +  @return                        The allocated address for the
> found region.
> +
> +**/
> +EFI_STATUS
> +UpdatePPVersion (
> +  EFI_ACPI_DESCRIPTION_HEADER    *Table,
> +  CHAR8                          *PPVer
> +  )
> +{
> +  EFI_STATUS  Status;
> +  UINT8       *DataPtr;
> +
> +  //
> +  // Patch some pointers for the ASL code before loading the SSDT.
> +  //
> +  for (DataPtr  = (UINT8 *)(Table + 1);
> +       DataPtr <= (UINT8 *) ((UINT8 *) Table + Table->Length -
> PHYSICAL_PRESENCE_VERSION_SIZE);
> +       DataPtr += 1) {
> +    if (AsciiStrCmp(DataPtr,  PHYSICAL_PRESENCE_VERSION_TAG) == 0) {
> +      Status = AsciiStrCpyS(DataPtr, PHYSICAL_PRESENCE_VERSION_SIZE,
> PPVer);
> +      DEBUG((EFI_D_INFO, "TPM2 Physical Presence Interface Version
> update status 0x%x\n", Status));
> +      return Status;
> +    }
> +  }
> +
> +  return EFI_NOT_FOUND;
> +}
> +
> +/**
>    Initialize and publish TPM items in ACPI table.
> 
>    @retval   EFI_SUCCESS     The TCG ACPI table is published
> successfully.
> @@ -277,6 +312,11 @@ PublishAcpiTable (
>               );
>    ASSERT_EFI_ERROR (Status);
> 
> +  //
> +  // Update Table version before measuring it to PCR
> +  //
> +  Status = UpdatePPVersion(Table, (CHAR8
> *)PcdGetPtr(PcdTcgPhysicalPresenceInterfaceVer));
> +  ASSERT_EFI_ERROR (Status);
> 
>    //
>    // Measure to PCR[0] with event EV_POST_CODE ACPI DATA
> @@ -297,7 +337,7 @@ PublishAcpiTable (
>    ASSERT (mTcgNvs != NULL);
> 
>    //
> -  // Publish the TPM ACPI table
> +  // Publish the TPM ACPI table. Table is re-checksumed.
>    //
>    Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID
> **) &AcpiTable);
>    ASSERT_EFI_ERROR (Status);
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.h
> b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.h
> index 62374a2..fa77c9a 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.h
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.h
> @@ -87,4 +87,10 @@ typedef struct {
>  #define MOR_REQUEST_SUCCESS
> 0
>  #define MOR_REQUEST_GENERAL_FAILURE
> 1
> 
> +//
> +// Physical Presence Interface Version supported by Platform
> +//
> +#define PHYSICAL_PRESENCE_VERSION_TAG
> "$PV"
> +#define PHYSICAL_PRESENCE_VERSION_SIZE
> 4
> +
>  #endif  // __TCG_SMM_H__
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf
> b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf
> index 0cc0cc6..0de4fce 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf
> @@ -72,6 +72,7 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId
> ## SOMETIMES_CONSUMES
>    gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision  ##
> SOMETIMES_CONSUMES
>    gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress
> ## CONSUMES
> +  gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer
> ## CONSUMES
> 
>  [Depex]
>    gEfiAcpiTableProtocolGuid AND
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
> b/SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
> index ba316cf..9ff74f7 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
> @@ -2,7 +2,7 @@
>    The TPM2 definition block in ACPI table for TCG2 physical presence
>    and MemoryClear.
> 
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
>  (c)Copyright 2016 HP Development Company, L.P.<BR>
>  This program and the accompanying materials
>  are licensed and made available under the terms and conditions of the BSD
> License
> @@ -188,7 +188,7 @@ DefinitionBlock (
>              //
>              // a) Get Physical Presence Interface Version
>              //
> -            Return ("1.3")
> +            Return ("$PV")
>            }
>            Case (2)
>            {
> --
> 1.9.5.msysgit.1
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to