Revision: 17603
          http://sourceforge.net/p/edk2/code/17603
Author:   jyao1
Date:     2015-06-10 00:26:48 +0000 (Wed, 10 Jun 2015)
Log Message:
-----------
Fix logic error on SectionAlignment calculation.

The correct logic should be:
  - The SectionAlignment is got from Magic number.
  - The Magic number is got from PE header and machine type.
The original code mix them.

Contributed-under: TianoCore Contribution Agreement 1.0

Signed-off-by: "Yao, Jiewen" <[email protected]>
Reviewed-by: "Ard Biesheuvel" <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c

Modified: trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c
===================================================================
--- trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c     2015-06-09 
18:20:51 UTC (rev 17602)
+++ trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c     2015-06-10 
00:26:48 UTC (rev 17603)
@@ -1115,6 +1115,7 @@
   IMAGE_PROPERTIES_RECORD              *ImageRecord;
   CHAR8                                *PdbPointer;
   IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;
+  UINT16                               Magic;
 
   DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%x\n", RuntimeImage));
   DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%016lx - 0x%016lx\n", 
(EFI_PHYSICAL_ADDRESS)(UINTN)RuntimeImage->ImageBase, RuntimeImage->ImageSize));
@@ -1152,13 +1153,12 @@
   Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *) (UINTN) ImageAddress + 
PeCoffHeaderOffset);
   if (Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {
     DEBUG ((EFI_D_VERBOSE, "Hdr.Pe32->Signature invalid - 0x%x\n", 
Hdr.Pe32->Signature));
-       // It might be image in SMM.
+    // It might be image in SMM.
     goto Finish;
   }
 
   //
-  // Measuring PE/COFF Image Header;
-  // But CheckSum field and SECURITY data directory (certificate) are excluded
+  // Get SectionAlignment
   //
   if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && 
Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
     //
@@ -1167,11 +1167,16 @@
     //       Magic value in the OptionalHeader is 
EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC
     //       then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC
     //
-    SectionAlignment  = Hdr.Pe32->OptionalHeader.SectionAlignment;
+    Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;
   } else {
     //
     // Get the magic value from the PE/COFF Optional Header
     //
+    Magic = Hdr.Pe32->OptionalHeader.Magic;
+  }
+  if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
+    SectionAlignment  = Hdr.Pe32->OptionalHeader.SectionAlignment;
+  } else {
     SectionAlignment  = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;
   }
 


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to