]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / SecurityPkg / Library / DxeTpmMeasureBootLib / DxeTpmMeasureBootLib.c
index 1f2eed29a1df390f2e06c376b270f7e5c2c44b33..220393dd2beb6270da17d29b726ef725be7dd0e4 100644 (file)
@@ -43,15 +43,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //\r
 // Flag to check GPT partition. It only need be measured once.\r
 //\r
-BOOLEAN                           mMeasureGptTableFlag = FALSE;\r
-UINTN                             mMeasureGptCount = 0;\r
-VOID                              *mFileBuffer;\r
-UINTN                             mTpmImageSize;\r
+BOOLEAN  mMeasureGptTableFlag = FALSE;\r
+UINTN    mMeasureGptCount     = 0;\r
+VOID     *mFileBuffer;\r
+UINTN    mTpmImageSize;\r
 //\r
 // Measured FV handle cache\r
 //\r
-EFI_HANDLE                        mCacheMeasuredHandle  = NULL;\r
-MEASURED_HOB_DATA                 *mMeasuredHobData     = NULL;\r
+EFI_HANDLE         mCacheMeasuredHandle = NULL;\r
+MEASURED_HOB_DATA  *mMeasuredHobData    = NULL;\r
 \r
 /**\r
   Reads contents of a PE/COFF image in memory buffer.\r
@@ -71,15 +71,15 @@ MEASURED_HOB_DATA                 *mMeasuredHobData     = NULL;
 EFI_STATUS\r
 EFIAPI\r
 DxeTpmMeasureBootLibImageRead (\r
-  IN     VOID    *FileHandle,\r
-  IN     UINTN   FileOffset,\r
-  IN OUT UINTN   *ReadSize,\r
-  OUT    VOID    *Buffer\r
+  IN     VOID   *FileHandle,\r
+  IN     UINTN  FileOffset,\r
+  IN OUT UINTN  *ReadSize,\r
+  OUT    VOID   *Buffer\r
   )\r
 {\r
-  UINTN               EndPosition;\r
+  UINTN  EndPosition;\r
 \r
-  if (FileHandle == NULL || ReadSize == NULL || Buffer == NULL) {\r
+  if ((FileHandle == NULL) || (ReadSize == NULL) || (Buffer == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -96,7 +96,7 @@ DxeTpmMeasureBootLibImageRead (
     *ReadSize = 0;\r
   }\r
 \r
-  CopyMem (Buffer, (UINT8 *)((UINTN) FileHandle + FileOffset), *ReadSize);\r
+  CopyMem (Buffer, (UINT8 *)((UINTN)FileHandle + FileOffset), *ReadSize);\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -119,43 +119,46 @@ DxeTpmMeasureBootLibImageRead (
 EFI_STATUS\r
 EFIAPI\r
 TcgMeasureGptTable (\r
-  IN  EFI_TCG_PROTOCOL   *TcgProtocol,\r
-  IN  EFI_HANDLE         GptHandle\r
+  IN  EFI_TCG_PROTOCOL  *TcgProtocol,\r
+  IN  EFI_HANDLE        GptHandle\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  EFI_BLOCK_IO_PROTOCOL             *BlockIo;\r
-  EFI_DISK_IO_PROTOCOL              *DiskIo;\r
-  EFI_PARTITION_TABLE_HEADER        *PrimaryHeader;\r
-  EFI_PARTITION_ENTRY               *PartitionEntry;\r
-  UINT8                             *EntryPtr;\r
-  UINTN                             NumberOfPartition;\r
-  UINT32                            Index;\r
-  TCG_PCR_EVENT                     *TcgEvent;\r
-  EFI_GPT_DATA                      *GptData;\r
-  UINT32                            EventSize;\r
-  UINT32                            EventNumber;\r
-  EFI_PHYSICAL_ADDRESS              EventLogLastEntry;\r
+  EFI_STATUS                  Status;\r
+  EFI_BLOCK_IO_PROTOCOL       *BlockIo;\r
+  EFI_DISK_IO_PROTOCOL        *DiskIo;\r
+  EFI_PARTITION_TABLE_HEADER  *PrimaryHeader;\r
+  EFI_PARTITION_ENTRY         *PartitionEntry;\r
+  UINT8                       *EntryPtr;\r
+  UINTN                       NumberOfPartition;\r
+  UINT32                      Index;\r
+  TCG_PCR_EVENT               *TcgEvent;\r
+  EFI_GPT_DATA                *GptData;\r
+  UINT32                      EventSize;\r
+  UINT32                      EventNumber;\r
+  EFI_PHYSICAL_ADDRESS        EventLogLastEntry;\r
 \r
   if (mMeasureGptCount > 0) {\r
     return EFI_SUCCESS;\r
   }\r
 \r
-  Status = gBS->HandleProtocol (GptHandle, &gEfiBlockIoProtocolGuid, (VOID**)&BlockIo);\r
+  Status = gBS->HandleProtocol (GptHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  Status = gBS->HandleProtocol (GptHandle, &gEfiDiskIoProtocolGuid, (VOID**)&DiskIo);\r
+\r
+  Status = gBS->HandleProtocol (GptHandle, &gEfiDiskIoProtocolGuid, (VOID **)&DiskIo);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
+\r
   //\r
   // Read the EFI Partition Table Header\r
   //\r
-  PrimaryHeader = (EFI_PARTITION_TABLE_HEADER *) AllocatePool (BlockIo->Media->BlockSize);\r
+  PrimaryHeader = (EFI_PARTITION_TABLE_HEADER *)AllocatePool (BlockIo->Media->BlockSize);\r
   if (PrimaryHeader == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
+\r
   Status = DiskIo->ReadDisk (\r
                      DiskIo,\r
                      BlockIo->Media->MediaId,\r
@@ -164,10 +167,11 @@ TcgMeasureGptTable (
                      (UINT8 *)PrimaryHeader\r
                      );\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "Failed to Read Partition Table Header!\n"));\r
+    DEBUG ((DEBUG_ERROR, "Failed to Read Partition Table Header!\n"));\r
     FreePool (PrimaryHeader);\r
     return EFI_DEVICE_ERROR;\r
   }\r
+\r
   //\r
   // Read the partition entry.\r
   //\r
@@ -176,10 +180,11 @@ TcgMeasureGptTable (
     FreePool (PrimaryHeader);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
+\r
   Status = DiskIo->ReadDisk (\r
                      DiskIo,\r
                      BlockIo->Media->MediaId,\r
-                     MultU64x32(PrimaryHeader->PartitionEntryLBA, BlockIo->Media->BlockSize),\r
+                     MultU64x32 (PrimaryHeader->PartitionEntryLBA, BlockIo->Media->BlockSize),\r
                      PrimaryHeader->NumberOfPartitionEntries * PrimaryHeader->SizeOfPartitionEntry,\r
                      EntryPtr\r
                      );\r
@@ -198,6 +203,7 @@ TcgMeasureGptTable (
     if (!IsZeroGuid (&PartitionEntry->PartitionTypeGUID)) {\r
       NumberOfPartition++;\r
     }\r
+\r
     PartitionEntry = (EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntry + PrimaryHeader->SizeOfPartitionEntry);\r
   }\r
 \r
@@ -205,28 +211,28 @@ TcgMeasureGptTable (
   // Prepare Data for Measurement\r
   //\r
   EventSize = (UINT32)(sizeof (EFI_GPT_DATA) - sizeof (GptData->Partitions)\r
-                        + NumberOfPartition * PrimaryHeader->SizeOfPartitionEntry);\r
-  TcgEvent = (TCG_PCR_EVENT *) AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT_HDR));\r
+                       + NumberOfPartition * PrimaryHeader->SizeOfPartitionEntry);\r
+  TcgEvent = (TCG_PCR_EVENT *)AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT_HDR));\r
   if (TcgEvent == NULL) {\r
     FreePool (PrimaryHeader);\r
     FreePool (EntryPtr);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  TcgEvent->PCRIndex   = 5;\r
-  TcgEvent->EventType  = EV_EFI_GPT_EVENT;\r
-  TcgEvent->EventSize  = EventSize;\r
-  GptData = (EFI_GPT_DATA *) TcgEvent->Event;\r
+  TcgEvent->PCRIndex  = 5;\r
+  TcgEvent->EventType = EV_EFI_GPT_EVENT;\r
+  TcgEvent->EventSize = EventSize;\r
+  GptData             = (EFI_GPT_DATA *)TcgEvent->Event;\r
 \r
   //\r
   // Copy the EFI_PARTITION_TABLE_HEADER and NumberOfPartition\r
   //\r
-  CopyMem ((UINT8 *)GptData, (UINT8*)PrimaryHeader, sizeof (EFI_PARTITION_TABLE_HEADER));\r
+  CopyMem ((UINT8 *)GptData, (UINT8 *)PrimaryHeader, sizeof (EFI_PARTITION_TABLE_HEADER));\r
   GptData->NumberOfPartitions = NumberOfPartition;\r
   //\r
   // Copy the valid partition entry\r
   //\r
-  PartitionEntry    = (EFI_PARTITION_ENTRY*)EntryPtr;\r
+  PartitionEntry    = (EFI_PARTITION_ENTRY *)EntryPtr;\r
   NumberOfPartition = 0;\r
   for (Index = 0; Index < PrimaryHeader->NumberOfPartitionEntries; Index++) {\r
     if (!IsZeroGuid (&PartitionEntry->PartitionTypeGUID)) {\r
@@ -237,22 +243,23 @@ TcgMeasureGptTable (
         );\r
       NumberOfPartition++;\r
     }\r
-    PartitionEntry =(EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntry + PrimaryHeader->SizeOfPartitionEntry);\r
+\r
+    PartitionEntry = (EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntry + PrimaryHeader->SizeOfPartitionEntry);\r
   }\r
 \r
   //\r
   // Measure the GPT data\r
   //\r
   EventNumber = 1;\r
-  Status = TcgProtocol->HashLogExtendEvent (\r
-             TcgProtocol,\r
-             (EFI_PHYSICAL_ADDRESS) (UINTN) (VOID *) GptData,\r
-             (UINT64) TcgEvent->EventSize,\r
-             TPM_ALG_SHA,\r
-             TcgEvent,\r
-             &EventNumber,\r
-             &EventLogLastEntry\r
-             );\r
+  Status      = TcgProtocol->HashLogExtendEvent (\r
+                               TcgProtocol,\r
+                               (EFI_PHYSICAL_ADDRESS)(UINTN)(VOID *)GptData,\r
+                               (UINT64)TcgEvent->EventSize,\r
+                               TPM_ALG_SHA,\r
+                               TcgEvent,\r
+                               &EventNumber,\r
+                               &EventLogLastEntry\r
+                               );\r
   if (!EFI_ERROR (Status)) {\r
     mMeasureGptCount++;\r
   }\r
@@ -326,19 +333,19 @@ TcgMeasurePeImage (
   ImageLoad     = NULL;\r
   SectionHeader = NULL;\r
   Sha1Ctx       = NULL;\r
-  FilePathSize  = (UINT32) GetDevicePathSize (FilePath);\r
+  FilePathSize  = (UINT32)GetDevicePathSize (FilePath);\r
 \r
   //\r
   // Determine destination PCR by BootPolicy\r
   //\r
   EventSize = sizeof (*ImageLoad) - sizeof (ImageLoad->DevicePath) + FilePathSize;\r
-  TcgEvent = AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT));\r
+  TcgEvent  = AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT));\r
   if (TcgEvent == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   TcgEvent->EventSize = EventSize;\r
-  ImageLoad           = (EFI_IMAGE_LOAD_EVENT *) TcgEvent->Event;\r
+  ImageLoad           = (EFI_IMAGE_LOAD_EVENT *)TcgEvent->Event;\r
 \r
   switch (ImageType) {\r
     case EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION:\r
@@ -355,7 +362,7 @@ TcgMeasurePeImage (
       break;\r
     default:\r
       DEBUG ((\r
-        EFI_D_ERROR,\r
+        DEBUG_ERROR,\r
         "TcgMeasurePeImage: Unknown subsystem type %d",\r
         ImageType\r
         ));\r
@@ -373,13 +380,13 @@ TcgMeasurePeImage (
   //\r
   // Check PE/COFF image\r
   //\r
-  DosHdr = (EFI_IMAGE_DOS_HEADER *) (UINTN) ImageAddress;\r
+  DosHdr             = (EFI_IMAGE_DOS_HEADER *)(UINTN)ImageAddress;\r
   PeCoffHeaderOffset = 0;\r
   if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
     PeCoffHeaderOffset = DosHdr->e_lfanew;\r
   }\r
 \r
-  Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *) (UINTN) ImageAddress + PeCoffHeaderOffset);\r
+  Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *)(UINTN)ImageAddress + PeCoffHeaderOffset);\r
   if (Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
     goto Finish;\r
   }\r
@@ -416,19 +423,19 @@ TcgMeasurePeImage (
   // 3.  Calculate the distance from the base of the image header to the image checksum address.\r
   // 4.  Hash the image header from its base to beginning of the image checksum.\r
   //\r
-  HashBase = (UINT8 *) (UINTN) ImageAddress;\r
+  HashBase = (UINT8 *)(UINTN)ImageAddress;\r
   if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
     //\r
     // Use PE32 offset\r
     //\r
     NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
-    HashSize = (UINTN) (&Hdr.Pe32->OptionalHeader.CheckSum) - (UINTN) HashBase;\r
+    HashSize            = (UINTN)(&Hdr.Pe32->OptionalHeader.CheckSum) - (UINTN)HashBase;\r
   } else {\r
     //\r
     // Use PE32+ offset\r
     //\r
     NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
-    HashSize = (UINTN) (&Hdr.Pe32Plus->OptionalHeader.CheckSum) - (UINTN) HashBase;\r
+    HashSize            = (UINTN)(&Hdr.Pe32Plus->OptionalHeader.CheckSum) - (UINTN)HashBase;\r
   }\r
 \r
   HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
@@ -448,18 +455,18 @@ TcgMeasurePeImage (
       //\r
       // Use PE32 offset.\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32->OptionalHeader.CheckSum + sizeof (UINT32);\r
-      HashSize = Hdr.Pe32->OptionalHeader.SizeOfHeaders - (UINTN) (HashBase - ImageAddress);\r
+      HashBase = (UINT8 *)&Hdr.Pe32->OptionalHeader.CheckSum + sizeof (UINT32);\r
+      HashSize = Hdr.Pe32->OptionalHeader.SizeOfHeaders - (UINTN)(HashBase - ImageAddress);\r
     } else {\r
       //\r
       // Use PE32+ offset.\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32Plus->OptionalHeader.CheckSum + sizeof (UINT32);\r
-      HashSize = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders - (UINTN) (HashBase - ImageAddress);\r
+      HashBase = (UINT8 *)&Hdr.Pe32Plus->OptionalHeader.CheckSum + sizeof (UINT32);\r
+      HashSize = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders - (UINTN)(HashBase - ImageAddress);\r
     }\r
 \r
     if (HashSize != 0) {\r
-      HashStatus  = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
+      HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
       if (!HashStatus) {\r
         goto Finish;\r
       }\r
@@ -472,18 +479,18 @@ TcgMeasurePeImage (
       //\r
       // Use PE32 offset\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32->OptionalHeader.CheckSum + sizeof (UINT32);\r
-      HashSize = (UINTN) (&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY]) - (UINTN) HashBase;\r
+      HashBase = (UINT8 *)&Hdr.Pe32->OptionalHeader.CheckSum + sizeof (UINT32);\r
+      HashSize = (UINTN)(&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY]) - (UINTN)HashBase;\r
     } else {\r
       //\r
       // Use PE32+ offset\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32Plus->OptionalHeader.CheckSum + sizeof (UINT32);\r
-      HashSize = (UINTN) (&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY]) - (UINTN) HashBase;\r
+      HashBase = (UINT8 *)&Hdr.Pe32Plus->OptionalHeader.CheckSum + sizeof (UINT32);\r
+      HashSize = (UINTN)(&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY]) - (UINTN)HashBase;\r
     }\r
 \r
     if (HashSize != 0) {\r
-      HashStatus  = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
+      HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
       if (!HashStatus) {\r
         goto Finish;\r
       }\r
@@ -497,18 +504,18 @@ TcgMeasurePeImage (
       //\r
       // Use PE32 offset\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1];\r
-      HashSize = Hdr.Pe32->OptionalHeader.SizeOfHeaders - (UINTN) (HashBase - ImageAddress);\r
+      HashBase = (UINT8 *)&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1];\r
+      HashSize = Hdr.Pe32->OptionalHeader.SizeOfHeaders - (UINTN)(HashBase - ImageAddress);\r
     } else {\r
       //\r
       // Use PE32+ offset\r
       //\r
-      HashBase = (UINT8 *) &Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1];\r
-      HashSize = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders - (UINTN) (HashBase - ImageAddress);\r
+      HashBase = (UINT8 *)&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1];\r
+      HashSize = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders - (UINTN)(HashBase - ImageAddress);\r
     }\r
 \r
     if (HashSize != 0) {\r
-      HashStatus  = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
+      HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
       if (!HashStatus) {\r
         goto Finish;\r
       }\r
@@ -536,7 +543,7 @@ TcgMeasurePeImage (
   //     header indicates how big the table should be. Do not include any\r
   //     IMAGE_SECTION_HEADERs in the table whose 'SizeOfRawData' field is zero.\r
   //\r
-  SectionHeader = (EFI_IMAGE_SECTION_HEADER *) AllocateZeroPool (sizeof (EFI_IMAGE_SECTION_HEADER) * Hdr.Pe32->FileHeader.NumberOfSections);\r
+  SectionHeader = (EFI_IMAGE_SECTION_HEADER *)AllocateZeroPool (sizeof (EFI_IMAGE_SECTION_HEADER) * Hdr.Pe32->FileHeader.NumberOfSections);\r
   if (SectionHeader == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
     goto Finish;\r
@@ -548,20 +555,21 @@ TcgMeasurePeImage (
   //      words, sort the section headers according to the disk-file offset of\r
   //      the section.\r
   //\r
-  Section = (EFI_IMAGE_SECTION_HEADER *) (\r
-               (UINT8 *) (UINTN) ImageAddress +\r
-               PeCoffHeaderOffset +\r
-               sizeof(UINT32) +\r
-               sizeof(EFI_IMAGE_FILE_HEADER) +\r
-               Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
-               );\r
+  Section = (EFI_IMAGE_SECTION_HEADER *)(\r
+                                         (UINT8 *)(UINTN)ImageAddress +\r
+                                         PeCoffHeaderOffset +\r
+                                         sizeof (UINT32) +\r
+                                         sizeof (EFI_IMAGE_FILE_HEADER) +\r
+                                         Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
+                                         );\r
   for (Index = 0; Index < Hdr.Pe32->FileHeader.NumberOfSections; Index++) {\r
     Pos = Index;\r
     while ((Pos > 0) && (Section->PointerToRawData < SectionHeader[Pos - 1].PointerToRawData)) {\r
-      CopyMem (&SectionHeader[Pos], &SectionHeader[Pos - 1], sizeof(EFI_IMAGE_SECTION_HEADER));\r
+      CopyMem (&SectionHeader[Pos], &SectionHeader[Pos - 1], sizeof (EFI_IMAGE_SECTION_HEADER));\r
       Pos--;\r
     }\r
-    CopyMem (&SectionHeader[Pos], Section, sizeof(EFI_IMAGE_SECTION_HEADER));\r
+\r
+    CopyMem (&SectionHeader[Pos], Section, sizeof (EFI_IMAGE_SECTION_HEADER));\r
     Section += 1;\r
   }\r
 \r
@@ -573,12 +581,13 @@ TcgMeasurePeImage (
   // 15.  Repeat steps 13 and 14 for all the sections in the sorted table.\r
   //\r
   for (Index = 0; Index < Hdr.Pe32->FileHeader.NumberOfSections; Index++) {\r
-    Section  = (EFI_IMAGE_SECTION_HEADER *) &SectionHeader[Index];\r
+    Section = (EFI_IMAGE_SECTION_HEADER *)&SectionHeader[Index];\r
     if (Section->SizeOfRawData == 0) {\r
       continue;\r
     }\r
-    HashBase = (UINT8 *) (UINTN) ImageAddress + Section->PointerToRawData;\r
-    HashSize = (UINTN) Section->SizeOfRawData;\r
+\r
+    HashBase = (UINT8 *)(UINTN)ImageAddress + Section->PointerToRawData;\r
+    HashSize = (UINTN)Section->SizeOfRawData;\r
 \r
     HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
     if (!HashStatus) {\r
@@ -595,7 +604,7 @@ TcgMeasurePeImage (
   //             FileSize  -  (CertDirectory->Size)\r
   //\r
   if (ImageSize > SumOfBytesHashed) {\r
-    HashBase = (UINT8 *) (UINTN) ImageAddress + SumOfBytesHashed;\r
+    HashBase = (UINT8 *)(UINTN)ImageAddress + SumOfBytesHashed;\r
 \r
     if (NumberOfRvaAndSizes <= EFI_IMAGE_DIRECTORY_ENTRY_SECURITY) {\r
       CertSize = 0;\r
@@ -614,7 +623,7 @@ TcgMeasurePeImage (
     }\r
 \r
     if (ImageSize > CertSize + SumOfBytesHashed) {\r
-      HashSize = (UINTN) (ImageSize - CertSize - SumOfBytesHashed);\r
+      HashSize = (UINTN)(ImageSize - CertSize - SumOfBytesHashed);\r
 \r
       HashStatus = Sha1Update (Sha1Ctx, HashBase, HashSize);\r
       if (!HashStatus) {\r
@@ -628,7 +637,7 @@ TcgMeasurePeImage (
   //\r
   // 17.  Finalize the SHA hash.\r
   //\r
-  HashStatus = Sha1Final (Sha1Ctx, (UINT8 *) &TcgEvent->Digest);\r
+  HashStatus = Sha1Final (Sha1Ctx, (UINT8 *)&TcgEvent->Digest);\r
   if (!HashStatus) {\r
     goto Finish;\r
   }\r
@@ -637,15 +646,15 @@ TcgMeasurePeImage (
   // Log the PE data\r
   //\r
   EventNumber = 1;\r
-  Status = TcgProtocol->HashLogExtendEvent (\r
-             TcgProtocol,\r
-             (EFI_PHYSICAL_ADDRESS) (UINTN) (VOID *) NULL,\r
-             0,\r
-             TPM_ALG_SHA,\r
-             TcgEvent,\r
-             &EventNumber,\r
-             &EventLogLastEntry\r
-             );\r
+  Status      = TcgProtocol->HashLogExtendEvent (\r
+                               TcgProtocol,\r
+                               (EFI_PHYSICAL_ADDRESS)(UINTN)(VOID *)NULL,\r
+                               0,\r
+                               TPM_ALG_SHA,\r
+                               TcgEvent,\r
+                               &EventNumber,\r
+                               &EventLogLastEntry\r
+                               );\r
   if (Status == EFI_OUT_OF_RESOURCES) {\r
     //\r
     // Out of resource here means the image is hashed and its result is extended to PCR.\r
@@ -665,6 +674,7 @@ Finish:
   if (Sha1Ctx != NULL ) {\r
     FreePool (Sha1Ctx);\r
   }\r
+\r
   return Status;\r
 }\r
 \r
@@ -678,8 +688,6 @@ Finish:
   and other exception operations.  The File parameter allows for possible logging\r
   within the SAP of the driver.\r
 \r
-  If File is NULL, then EFI_INVALID_PARAMETER is returned.\r
-\r
   If the file specified by File with an authentication status specified by\r
   AuthenticationStatus is safe for the DXE Core to use, then EFI_SUCCESS is returned.\r
 \r
@@ -692,6 +700,8 @@ Finish:
   might be possible to use it at a future time, then EFI_SECURITY_VIOLATION is\r
   returned.\r
 \r
+  If check image specified by FileBuffer and File is NULL meanwhile, return EFI_ACCESS_DENIED.\r
+\r
   @param[in]      AuthenticationStatus  This is the authentication status returned\r
                                         from the securitymeasurement services for the\r
                                         input file.\r
@@ -709,11 +719,11 @@ Finish:
 EFI_STATUS\r
 EFIAPI\r
 DxeTpmMeasureBootHandler (\r
-  IN  UINT32                           AuthenticationStatus,\r
-  IN  CONST EFI_DEVICE_PATH_PROTOCOL   *File,\r
-  IN  VOID                             *FileBuffer,\r
-  IN  UINTN                            FileSize,\r
-  IN  BOOLEAN                          BootPolicy\r
+  IN  UINT32                          AuthenticationStatus,\r
+  IN  CONST EFI_DEVICE_PATH_PROTOCOL  *File  OPTIONAL,\r
+  IN  VOID                            *FileBuffer,\r
+  IN  UINTN                           FileSize,\r
+  IN  BOOLEAN                         BootPolicy\r
   )\r
 {\r
   EFI_TCG_PROTOCOL                    *TcgProtocol;\r
@@ -732,7 +742,7 @@ DxeTpmMeasureBootHandler (
   EFI_PHYSICAL_ADDRESS                FvAddress;\r
   UINT32                              Index;\r
 \r
-  Status = gBS->LocateProtocol (&gEfiTcgProtocolGuid, NULL, (VOID **) &TcgProtocol);\r
+  Status = gBS->LocateProtocol (&gEfiTcgProtocolGuid, NULL, (VOID **)&TcgProtocol);\r
   if (EFI_ERROR (Status)) {\r
     //\r
     // TCG protocol is not installed. So, TPM is not present.\r
@@ -741,14 +751,14 @@ DxeTpmMeasureBootHandler (
     return EFI_SUCCESS;\r
   }\r
 \r
-  ProtocolCapability.Size = (UINT8) sizeof (ProtocolCapability);\r
-  Status = TcgProtocol->StatusCheck (\r
-             TcgProtocol,\r
-             &ProtocolCapability,\r
-             &TCGFeatureFlags,\r
-             &EventLogLocation,\r
-             &EventLogLastEntry\r
-           );\r
+  ProtocolCapability.Size = (UINT8)sizeof (ProtocolCapability);\r
+  Status                  = TcgProtocol->StatusCheck (\r
+                                           TcgProtocol,\r
+                                           &ProtocolCapability,\r
+                                           &TCGFeatureFlags,\r
+                                           &EventLogLocation,\r
+                                           &EventLogLastEntry\r
+                                           );\r
   if (EFI_ERROR (Status) || ProtocolCapability.TPMDeactivatedFlag || (!ProtocolCapability.TPMPresentFlag)) {\r
     //\r
     // TPM device doesn't work or activate.\r
@@ -766,10 +776,10 @@ DxeTpmMeasureBootHandler (
   // Is so, this device path may be a GPT device path.\r
   //\r
   DevicePathNode = OrigDevicePathNode;\r
-  Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &DevicePathNode, &Handle);\r
+  Status         = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &DevicePathNode, &Handle);\r
   if (!EFI_ERROR (Status) && !mMeasureGptTableFlag) {\r
     //\r
-    // Find the gpt partion on the given devicepath\r
+    // Find the gpt partition on the given devicepath\r
     //\r
     DevicePathNode = OrigDevicePathNode;\r
     ASSERT (DevicePathNode != NULL);\r
@@ -777,25 +787,26 @@ DxeTpmMeasureBootHandler (
       //\r
       // Find the Gpt partition\r
       //\r
-      if (DevicePathType (DevicePathNode) == MEDIA_DEVICE_PATH &&\r
-            DevicePathSubType (DevicePathNode) == MEDIA_HARDDRIVE_DP) {\r
+      if ((DevicePathType (DevicePathNode) == MEDIA_DEVICE_PATH) &&\r
+          (DevicePathSubType (DevicePathNode) == MEDIA_HARDDRIVE_DP))\r
+      {\r
         //\r
         // Check whether it is a gpt partition or not\r
         //\r
-        if (((HARDDRIVE_DEVICE_PATH *) DevicePathNode)->MBRType == MBR_TYPE_EFI_PARTITION_TABLE_HEADER &&\r
-            ((HARDDRIVE_DEVICE_PATH *) DevicePathNode)->SignatureType == SIGNATURE_TYPE_GUID) {\r
-\r
+        if ((((HARDDRIVE_DEVICE_PATH *)DevicePathNode)->MBRType == MBR_TYPE_EFI_PARTITION_TABLE_HEADER) &&\r
+            (((HARDDRIVE_DEVICE_PATH *)DevicePathNode)->SignatureType == SIGNATURE_TYPE_GUID))\r
+        {\r
           //\r
           // Change the partition device path to its parent device path (disk) and get the handle.\r
           //\r
           DevicePathNode->Type    = END_DEVICE_PATH_TYPE;\r
           DevicePathNode->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE;\r
           DevicePathNode          = OrigDevicePathNode;\r
-          Status = gBS->LocateDevicePath (\r
-                         &gEfiDiskIoProtocolGuid,\r
-                         &DevicePathNode,\r
-                         &Handle\r
-                         );\r
+          Status                  = gBS->LocateDevicePath (\r
+                                           &gEfiDiskIoProtocolGuid,\r
+                                           &DevicePathNode,\r
+                                           &Handle\r
+                                           );\r
           if (!EFI_ERROR (Status)) {\r
             //\r
             // Measure GPT disk.\r
@@ -808,13 +819,15 @@ DxeTpmMeasureBootHandler (
               mMeasureGptTableFlag = TRUE;\r
             }\r
           }\r
+\r
           FreePool (OrigDevicePathNode);\r
           OrigDevicePathNode = DuplicateDevicePath (File);\r
           ASSERT (OrigDevicePathNode != NULL);\r
           break;\r
         }\r
       }\r
-      DevicePathNode    = NextDevicePathNode (DevicePathNode);\r
+\r
+      DevicePathNode = NextDevicePathNode (DevicePathNode);\r
     }\r
   }\r
 \r
@@ -827,7 +840,7 @@ DxeTpmMeasureBootHandler (
   // Check whether this device path support FVB protocol.\r
   //\r
   DevicePathNode = OrigDevicePathNode;\r
-  Status = gBS->LocateDevicePath (&gEfiFirmwareVolumeBlockProtocolGuid, &DevicePathNode, &Handle);\r
+  Status         = gBS->LocateDevicePath (&gEfiFirmwareVolumeBlockProtocolGuid, &DevicePathNode, &Handle);\r
   if (!EFI_ERROR (Status)) {\r
     //\r
     // Don't check FV image, and directly return EFI_SUCCESS.\r
@@ -836,6 +849,7 @@ DxeTpmMeasureBootHandler (
     if (IsDevicePathEnd (DevicePathNode)) {\r
       return EFI_SUCCESS;\r
     }\r
+\r
     //\r
     // The PE image from unmeasured Firmware volume need be measured\r
     // The PE image from measured Firmware volume will be measured according to policy below.\r
@@ -844,32 +858,32 @@ DxeTpmMeasureBootHandler (
     //\r
     ApplicationRequired = TRUE;\r
 \r
-    if (mCacheMeasuredHandle != Handle && mMeasuredHobData != NULL) {\r
+    if ((mCacheMeasuredHandle != Handle) && (mMeasuredHobData != NULL)) {\r
       //\r
       // Search for Root FV of this PE image\r
       //\r
       TempHandle = Handle;\r
       do {\r
-        Status = gBS->HandleProtocol(\r
+        Status = gBS->HandleProtocol (\r
                         TempHandle,\r
                         &gEfiFirmwareVolumeBlockProtocolGuid,\r
-                        (VOID**)&FvbProtocol\r
+                        (VOID **)&FvbProtocol\r
                         );\r
         TempHandle = FvbProtocol->ParentHandle;\r
-      } while (!EFI_ERROR(Status) && FvbProtocol->ParentHandle != NULL);\r
+      } while (!EFI_ERROR (Status) && FvbProtocol->ParentHandle != NULL);\r
 \r
       //\r
       // Search in measured FV Hob\r
       //\r
-      Status = FvbProtocol->GetPhysicalAddress(FvbProtocol, &FvAddress);\r
-      if (EFI_ERROR(Status)){\r
+      Status = FvbProtocol->GetPhysicalAddress (FvbProtocol, &FvAddress);\r
+      if (EFI_ERROR (Status)) {\r
         return Status;\r
       }\r
 \r
       ApplicationRequired = FALSE;\r
 \r
       for (Index = 0; Index < mMeasuredHobData->Num; Index++) {\r
-        if(mMeasuredHobData->MeasuredFvBuf[Index].BlobBase == FvAddress) {\r
+        if (mMeasuredHobData->MeasuredFvBuf[Index].BlobBase == FvAddress) {\r
           //\r
           // Cache measured FV for next measurement\r
           //\r
@@ -889,22 +903,29 @@ DxeTpmMeasureBootHandler (
     goto Finish;\r
   }\r
 \r
-  mTpmImageSize  = FileSize;\r
-  mFileBuffer = FileBuffer;\r
+  mTpmImageSize = FileSize;\r
+  mFileBuffer   = FileBuffer;\r
 \r
   //\r
   // Measure PE Image\r
   //\r
   DevicePathNode = OrigDevicePathNode;\r
   ZeroMem (&ImageContext, sizeof (ImageContext));\r
-  ImageContext.Handle    = (VOID *) FileBuffer;\r
-  ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) DxeTpmMeasureBootLibImageRead;\r
+  ImageContext.Handle    = (VOID *)FileBuffer;\r
+  ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE)DxeTpmMeasureBootLibImageRead;\r
 \r
   //\r
   // Get information about the image being loaded\r
   //\r
   Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
   if (EFI_ERROR (Status)) {\r
+    //\r
+    // Check for invalid parameters.\r
+    //\r
+    if (File == NULL) {\r
+      return EFI_ACCESS_DENIED;\r
+    }\r
+\r
     //\r
     // The information can't be got from the invalid PeImage\r
     //\r
@@ -916,21 +937,23 @@ DxeTpmMeasureBootHandler (
   // Measure drivers and applications if Application flag is not set\r
   //\r
   if ((!ApplicationRequired) ||\r
-        (ApplicationRequired && ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION)) {\r
+      (ApplicationRequired && (ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION)))\r
+  {\r
     //\r
     // Print the image path to be measured.\r
     //\r
     DEBUG_CODE_BEGIN ();\r
-      CHAR16                            *ToText;\r
-      ToText = ConvertDevicePathToText (\r
-                 DevicePathNode,\r
-                 FALSE,\r
-                 TRUE\r
-                 );\r
-      if (ToText != NULL) {\r
-        DEBUG ((DEBUG_INFO, "The measured image path is %s.\n", ToText));\r
-        FreePool (ToText);\r
-      }\r
+    CHAR16  *ToText;\r
+    ToText = ConvertDevicePathToText (\r
+               DevicePathNode,\r
+               FALSE,\r
+               TRUE\r
+               );\r
+    if (ToText != NULL) {\r
+      DEBUG ((DEBUG_INFO, "The measured image path is %s.\n", ToText));\r
+      FreePool (ToText);\r
+    }\r
+\r
     DEBUG_CODE_END ();\r
 \r
     //\r
@@ -938,9 +961,9 @@ DxeTpmMeasureBootHandler (
     //\r
     Status = TcgMeasurePeImage (\r
                TcgProtocol,\r
-               (EFI_PHYSICAL_ADDRESS) (UINTN) FileBuffer,\r
+               (EFI_PHYSICAL_ADDRESS)(UINTN)FileBuffer,\r
                FileSize,\r
-               (UINTN) ImageContext.ImageAddress,\r
+               (UINTN)ImageContext.ImageAddress,\r
                ImageContext.ImageType,\r
                DevicePathNode\r
                );\r
@@ -984,7 +1007,7 @@ DxeTpmMeasureBootLibConstructor (
   }\r
 \r
   return RegisterSecurity2Handler (\r
-          DxeTpmMeasureBootHandler,\r
-          EFI_AUTH_OPERATION_MEASURE_IMAGE | EFI_AUTH_OPERATION_IMAGE_REQUIRED\r
-          );\r
+           DxeTpmMeasureBootHandler,\r
+           EFI_AUTH_OPERATION_MEASURE_IMAGE | EFI_AUTH_OPERATION_IMAGE_REQUIRED\r
+           );\r
 }\r