/** @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
#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
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
{\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
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