Signed-off-by: Jinhua Cao <caojinhua1@huawei.com> Signed-off-by: yezengruan <yezengruan@huawei.com>
192 lines
5.2 KiB
Diff
192 lines
5.2 KiB
Diff
From ede5db34ee1e35c16cf016b974046b1c499c19a6 Mon Sep 17 00:00:00 2001
|
|
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
|
|
Date: Mon, 13 Sep 2021 22:21:03 +0800
|
|
Subject: [PATCH 6/8] SecurityPkg/Tcg: Import Tcg2PlatformPei from
|
|
edk2-platforms
|
|
|
|
Import Tcg2PlatformPei from edk2-platforms without any modifications.
|
|
|
|
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
|
|
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
|
|
---
|
|
.../Tcg/Tcg2PlatformPei/Tcg2PlatformPei.c | 107 ++++++++++++++++++
|
|
.../Tcg/Tcg2PlatformPei/Tcg2PlatformPei.inf | 52 +++++++++
|
|
2 files changed, 159 insertions(+)
|
|
create mode 100644 SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.c
|
|
create mode 100644 SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.inf
|
|
|
|
diff --git a/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.c b/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.c
|
|
new file mode 100644
|
|
index 0000000000..66ec75ad0e
|
|
--- /dev/null
|
|
+++ b/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.c
|
|
@@ -0,0 +1,107 @@
|
|
+/** @file
|
|
+
|
|
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
|
+Copyright (c) Microsoft Corporation.<BR>
|
|
+SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
+
|
|
+**/
|
|
+
|
|
+#include <PiPei.h>
|
|
+#include <Library/PeiServicesLib.h>
|
|
+#include <Library/DebugLib.h>
|
|
+#include <Library/BaseMemoryLib.h>
|
|
+#include <Library/MemoryAllocationLib.h>
|
|
+#include <Library/HobLib.h>
|
|
+#include <Library/Tpm2CommandLib.h>
|
|
+#include <Library/Tpm2DeviceLib.h>
|
|
+#include <Library/TpmPlatformHierarchyLib.h>
|
|
+#include <Library/RngLib.h>
|
|
+
|
|
+#include <Ppi/EndOfPeiPhase.h>
|
|
+
|
|
+#define MAX_NEW_AUTHORIZATION_SIZE SHA512_DIGEST_SIZE
|
|
+
|
|
+/**
|
|
+ This function handles PlatformInit task at the end of PEI
|
|
+
|
|
+ @param[in] PeiServices Pointer to PEI Services Table.
|
|
+ @param[in] NotifyDesc Pointer to the descriptor for the Notification event that
|
|
+ caused this function to execute.
|
|
+ @param[in] Ppi Pointer to the PPI data associated with this function.
|
|
+
|
|
+ @retval EFI_SUCCESS The function completes successfully
|
|
+ @retval others
|
|
+**/
|
|
+EFI_STATUS
|
|
+EFIAPI
|
|
+PlatformInitEndOfPei (
|
|
+ IN CONST EFI_PEI_SERVICES **PeiServices,
|
|
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
|
|
+ IN VOID *Ppi
|
|
+ )
|
|
+{
|
|
+ VOID *TcgEventLog;
|
|
+
|
|
+ //
|
|
+ // Try to get TcgEventLog in S3 to see if S3 error is reported.
|
|
+ //
|
|
+ TcgEventLog = GetFirstGuidHob(&gTcgEventEntryHobGuid);
|
|
+ if (TcgEventLog == NULL) {
|
|
+ TcgEventLog = GetFirstGuidHob(&gTcgEvent2EntryHobGuid);
|
|
+ }
|
|
+
|
|
+ if (TcgEventLog == NULL) {
|
|
+ //
|
|
+ // no S3 error reported
|
|
+ //
|
|
+ return EFI_SUCCESS;
|
|
+ }
|
|
+
|
|
+ //
|
|
+ // If there is S3 error on TPM_SU_STATE and success on TPM_SU_CLEAR,
|
|
+ // configure the TPM Platform Hierarchy.
|
|
+ //
|
|
+ ConfigureTpmPlatformHierarchy ();
|
|
+
|
|
+ return EFI_SUCCESS;
|
|
+}
|
|
+
|
|
+static EFI_PEI_NOTIFY_DESCRIPTOR mEndOfPeiNotifyList = {
|
|
+ (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
|
+ &gEfiEndOfPeiSignalPpiGuid,
|
|
+ (EFI_PEIM_NOTIFY_ENTRY_POINT)PlatformInitEndOfPei
|
|
+};
|
|
+
|
|
+/**
|
|
+ Main entry
|
|
+
|
|
+ @param[in] FileHandle Handle of the file being invoked.
|
|
+ @param[in] PeiServices Pointer to PEI Services table.
|
|
+
|
|
+ @retval EFI_SUCCESS Install function successfully.
|
|
+
|
|
+**/
|
|
+EFI_STATUS
|
|
+EFIAPI
|
|
+Tcg2PlatformPeiEntryPoint (
|
|
+ IN EFI_PEI_FILE_HANDLE FileHandle,
|
|
+ IN CONST EFI_PEI_SERVICES **PeiServices
|
|
+ )
|
|
+{
|
|
+ EFI_STATUS Status;
|
|
+ EFI_BOOT_MODE BootMode;
|
|
+
|
|
+ Status = PeiServicesGetBootMode (&BootMode);
|
|
+ ASSERT_EFI_ERROR(Status);
|
|
+
|
|
+ if (BootMode != BOOT_ON_S3_RESUME) {
|
|
+ return EFI_SUCCESS;
|
|
+ }
|
|
+
|
|
+ //
|
|
+ // Performing PlatformInitEndOfPei after EndOfPei PPI produced
|
|
+ //
|
|
+ Status = PeiServicesNotifyPpi (&mEndOfPeiNotifyList);
|
|
+
|
|
+ return Status;
|
|
+}
|
|
diff --git a/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.inf b/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.inf
|
|
new file mode 100644
|
|
index 0000000000..579f09b940
|
|
--- /dev/null
|
|
+++ b/SecurityPkg/Tcg/Tcg2PlatformPei/Tcg2PlatformPei.inf
|
|
@@ -0,0 +1,52 @@
|
|
+### @file
|
|
+#
|
|
+# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
|
+#
|
|
+# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
+#
|
|
+###
|
|
+
|
|
+[Defines]
|
|
+ INF_VERSION = 0x00010017
|
|
+ BASE_NAME = Tcg2PlatformPei
|
|
+ FILE_GUID = 47727552-A54B-4A84-8CC1-BFF23E239636
|
|
+ VERSION_STRING = 1.0
|
|
+ MODULE_TYPE = PEIM
|
|
+ ENTRY_POINT = Tcg2PlatformPeiEntryPoint
|
|
+
|
|
+#
|
|
+# The following information is for reference only and not required by the build tools.
|
|
+#
|
|
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
|
+#
|
|
+
|
|
+[LibraryClasses]
|
|
+ PcdLib
|
|
+ BaseMemoryLib
|
|
+ MemoryAllocationLib
|
|
+ PeiServicesLib
|
|
+ PeimEntryPoint
|
|
+ DebugLib
|
|
+ Tpm2DeviceLib
|
|
+ Tpm2CommandLib
|
|
+ TpmPlatformHierarchyLib
|
|
+ RngLib
|
|
+
|
|
+[Packages]
|
|
+ MdePkg/MdePkg.dec
|
|
+ SecurityPkg/SecurityPkg.dec
|
|
+ MinPlatformPkg/MinPlatformPkg.dec
|
|
+
|
|
+[Sources]
|
|
+ Tcg2PlatformPei.c
|
|
+
|
|
+[Guids]
|
|
+ gTcgEventEntryHobGuid
|
|
+ gTcgEvent2EntryHobGuid
|
|
+
|
|
+[Ppis]
|
|
+ gEfiEndOfPeiSignalPpiGuid
|
|
+
|
|
+[Depex]
|
|
+ gEfiTpmDeviceSelectedGuid
|
|
+
|
|
--
|
|
2.27.0
|
|
|