]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/PeilessStartupLib/IntelTdx.c
OvmfPkg: Refactor MeaureFvImage
[mirror_edk2.git] / OvmfPkg / Library / PeilessStartupLib / IntelTdx.c
diff --git a/OvmfPkg/Library/PeilessStartupLib/IntelTdx.c b/OvmfPkg/Library/PeilessStartupLib/IntelTdx.c
deleted file mode 100644 (file)
index ae0ffcc..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/** @file\r
-  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>\r
-  SPDX-License-Identifier: BSD-2-Clause-Patent\r
-**/\r
-\r
-#include <PiPei.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <IndustryStandard/Tpm20.h>\r
-#include <IndustryStandard/UefiTcgPlatform.h>\r
-#include <Library/HobLib.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/TcgEventLogRecordLib.h>\r
-#include <Library/TpmMeasurementLib.h>\r
-\r
-#include "PeilessStartupInternal.h"\r
-\r
-#define FV_HANDOFF_TABLE_DESC  "Fv(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)"\r
-typedef PLATFORM_FIRMWARE_BLOB2_STRUCT CFV_HANDOFF_TABLE_POINTERS2;\r
-\r
-/**\r
-  Get the FvName from the FV header.\r
-\r
-  Causion: The FV is untrusted input.\r
-\r
-  @param[in]  FvBase            Base address of FV image.\r
-  @param[in]  FvLength          Length of FV image.\r
-\r
-  @return FvName pointer\r
-  @retval NULL   FvName is NOT found\r
-**/\r
-VOID *\r
-GetFvName (\r
-  IN EFI_PHYSICAL_ADDRESS  FvBase,\r
-  IN UINT64                FvLength\r
-  )\r
-{\r
-  EFI_FIRMWARE_VOLUME_HEADER      *FvHeader;\r
-  EFI_FIRMWARE_VOLUME_EXT_HEADER  *FvExtHeader;\r
-\r
-  if (FvBase >= MAX_ADDRESS) {\r
-    return NULL;\r
-  }\r
-\r
-  if (FvLength >= MAX_ADDRESS - FvBase) {\r
-    return NULL;\r
-  }\r
-\r
-  if (FvLength < sizeof (EFI_FIRMWARE_VOLUME_HEADER)) {\r
-    return NULL;\r
-  }\r
-\r
-  FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FvBase;\r
-  if (FvHeader->ExtHeaderOffset < sizeof (EFI_FIRMWARE_VOLUME_HEADER)) {\r
-    return NULL;\r
-  }\r
-\r
-  if (FvHeader->ExtHeaderOffset + sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER) > FvLength) {\r
-    return NULL;\r
-  }\r
-\r
-  FvExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *)(UINTN)(FvBase + FvHeader->ExtHeaderOffset);\r
-\r
-  return &FvExtHeader->FvName;\r
-}\r
-\r
-/**\r
-  Measure FV image.\r
-\r
-  @param[in]  FvBase            Base address of FV image.\r
-  @param[in]  FvLength          Length of FV image.\r
-  @param[in]  PcrIndex          Index of PCR\r
-\r
-  @retval EFI_SUCCESS           Fv image is measured successfully\r
-                                or it has been already measured.\r
-  @retval EFI_OUT_OF_RESOURCES  No enough memory to log the new event.\r
-  @retval EFI_DEVICE_ERROR      The command was unsuccessful.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-MeasureFvImage (\r
-  IN EFI_PHYSICAL_ADDRESS  FvBase,\r
-  IN UINT64                FvLength,\r
-  IN UINT8                 PcrIndex\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  CFV_HANDOFF_TABLE_POINTERS2  FvBlob2;\r
-  VOID                         *FvName;\r
-\r
-  //\r
-  // Init the log event for FV measurement\r
-  //\r
-  FvBlob2.BlobDescriptionSize = sizeof (FvBlob2.BlobDescription);\r
-  CopyMem (FvBlob2.BlobDescription, FV_HANDOFF_TABLE_DESC, sizeof (FvBlob2.BlobDescription));\r
-  FvName = GetFvName (FvBase, FvLength);\r
-  if (FvName != NULL) {\r
-    AsciiSPrint ((CHAR8 *)FvBlob2.BlobDescription, sizeof (FvBlob2.BlobDescription), "Fv(%g)", FvName);\r
-  }\r
-\r
-  FvBlob2.BlobBase   = FvBase;\r
-  FvBlob2.BlobLength = FvLength;\r
-\r
-  Status = TpmMeasureAndLogData (\r
-             1,                              // PCRIndex\r
-             EV_EFI_PLATFORM_FIRMWARE_BLOB2, // EventType\r
-             (VOID *)&FvBlob2,               // EventData\r
-             sizeof (FvBlob2),               // EventSize\r
-             (UINT8 *)(UINTN)FvBase,         // HashData\r
-             (UINTN)(FvLength)               // HashDataLen\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    DEBUG ((DEBUG_ERROR, "The FV which failed to be measured starts at: 0x%x\n", FvBase));\r
-    ASSERT (FALSE);\r
-  }\r
-\r
-  return Status;\r
-}\r