]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/Smbios: Add TCG PFP rev 105 support.
authorJiewen Yao <jiewen.yao@intel.com>
Tue, 31 Dec 2019 01:47:11 +0000 (09:47 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 6 Jan 2020 06:23:19 +0000 (06:23 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2439

Report EV_EFI_HANDOFF_TABLES2 if the platform chooses PFP >= 105.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurementDxe.c
MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurementDxe.inf

index 5ec2aca0953ff05c205d684d8425c68a35433bd5..1050c9b17b871841b2c359fc95c386d3f84f9a49 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   This driver measures SMBIOS table to TPM.\r
 \r
-Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
@@ -20,6 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/PcdLib.h>\r
 #include <Library/TpmMeasurementLib.h>\r
 \r
 #define FIELD_SIZE_OF(TYPE, Field) ((UINTN)sizeof(((TYPE *)0)->Field))\r
@@ -108,6 +109,18 @@ SMBIOS_FILTER_STRUCT  mSmbiosFilterStandardTableBlackList[] = {
 EFI_SMBIOS_PROTOCOL *mSmbios;\r
 UINTN               mMaxLen;\r
 \r
+#pragma pack (1)\r
+\r
+#define SMBIOS_HANDOFF_TABLE_DESC  "SmbiosTable"\r
+typedef struct {\r
+  UINT8                             TableDescriptionSize;\r
+  UINT8                             TableDescription[sizeof(SMBIOS_HANDOFF_TABLE_DESC)];\r
+  UINT64                            NumberOfTables;\r
+  EFI_CONFIGURATION_TABLE           TableEntry[1];\r
+} SMBIOS_HANDOFF_TABLE_POINTERS2;\r
+\r
+#pragma pack ()\r
+\r
 /**\r
 \r
   This function dump raw data.\r
@@ -460,6 +473,10 @@ MeasureSmbiosTable (
 {\r
   EFI_STATUS                        Status;\r
   EFI_HANDOFF_TABLE_POINTERS        HandoffTables;\r
+  SMBIOS_HANDOFF_TABLE_POINTERS2    SmbiosHandoffTables2;\r
+  UINT32                            EventType;\r
+  VOID                              *EventLog;\r
+  UINT32                            EventLogSize;\r
   SMBIOS_TABLE_ENTRY_POINT          *SmbiosTable;\r
   SMBIOS_TABLE_3_0_ENTRY_POINT      *Smbios3Table;\r
   VOID                              *SmbiosTableAddress;\r
@@ -569,11 +586,24 @@ MeasureSmbiosTable (
       CopyGuid (&(HandoffTables.TableEntry[0].VendorGuid), &gEfiSmbiosTableGuid);\r
       HandoffTables.TableEntry[0].VendorTable = SmbiosTable;\r
     }\r
+    EventType = EV_EFI_HANDOFF_TABLES;\r
+    EventLog = &HandoffTables;\r
+    EventLogSize = sizeof (HandoffTables);\r
+\r
+    if (PcdGet32(PcdTcgPfpMeasurementRevision) >= TCG_EfiSpecIDEventStruct_SPEC_ERRATA_TPM2_REV_105) {\r
+      SmbiosHandoffTables2.TableDescriptionSize = sizeof(SmbiosHandoffTables2.TableDescription);\r
+      CopyMem (SmbiosHandoffTables2.TableDescription, SMBIOS_HANDOFF_TABLE_DESC, sizeof(SmbiosHandoffTables2.TableDescription));\r
+      SmbiosHandoffTables2.NumberOfTables = HandoffTables.NumberOfTables;\r
+      CopyMem (&(SmbiosHandoffTables2.TableEntry[0]), &(HandoffTables.TableEntry[0]), sizeof(SmbiosHandoffTables2.TableEntry[0]));\r
+      EventType = EV_EFI_HANDOFF_TABLES2;\r
+      EventLog = &SmbiosHandoffTables2;\r
+      EventLogSize = sizeof (SmbiosHandoffTables2);\r
+    }\r
     Status = TpmMeasureAndLogData (\r
                1,                       // PCRIndex\r
-               EV_EFI_HANDOFF_TABLES,   // EventType\r
-               &HandoffTables,          // EventLog\r
-               sizeof (HandoffTables),  // LogLen\r
+               EventType,               // EventType\r
+               EventLog,                // EventLog\r
+               EventLogSize,            // LogLen\r
                TableAddress,            // HashData\r
                TableLength              // HashDataLen\r
                );\r
index a074044c84885481f93497850b3b949918c2d524..7537bfb519ae33264fdfc0760d7ebf16683ccfe8 100644 (file)
@@ -11,7 +11,7 @@
 #\r
 # A platform may use its own policy to filter some fields in SMBIOS table.\r
 #\r
-# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
@@ -48,6 +48,7 @@
   UefiLib\r
   UefiDriverEntryPoint\r
   DebugLib\r
+  PcdLib\r
   TpmMeasurementLib\r
 \r
 [Protocols]\r
@@ -57,6 +58,9 @@
   gEfiSmbiosTableGuid                               ## SOMETIMES_CONSUMES ## SystemTable\r
   gEfiSmbios3TableGuid                              ## SOMETIMES_CONSUMES ## SystemTable\r
 \r
+[Pcd]\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdTcgPfpMeasurementRevision            ## CONSUMES\r
+\r
 [Depex]\r
   gEfiSmbiosProtocolGuid\r
 \r