Revision: 14145
          http://edk2.svn.sourceforge.net/edk2/?rev=14145&view=rev
Author:   ydong10
Date:     2013-02-27 02:09:01 +0000 (Wed, 27 Feb 2013)
Log Message:
-----------
In order to make sure the image is section alignment, after allocate buffer for 
TE image, it will adjust the base address. But it has two potential issues: One 
is the start address may not section alignment, second is the buffer is not 
bigger enough to do the adjustment. This patch fixes these two issues.

Signed-off-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c

Modified: trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c
===================================================================
--- trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c      2013-02-22 18:20:55 UTC 
(rev 14144)
+++ trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c      2013-02-27 02:09:01 UTC 
(rev 14145)
@@ -1,7 +1,7 @@
 /** @file
   Pei Core Load Image Support
 
-Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD 
License
 which accompanies this distribution.  The full text of the license may be 
found at
@@ -348,6 +348,7 @@
   EFI_STATUS                            Status;
   PE_COFF_LOADER_IMAGE_CONTEXT          ImageContext;
   PEI_CORE_INSTANCE                     *Private;
+  UINT64                                AlignImageSize;
 
   Private = PEI_CORE_INSTANCE_FROM_PS_THIS (GetPeiServicesTablePointer ());
 
@@ -377,6 +378,19 @@
   // Allocate Memory for the image when memory is ready, boot mode is not S3, 
and image is relocatable.
   //
   if ((!ImageContext.RelocationsStripped) && (Private->PeiMemoryInstalled) && 
(Private->HobList.HandoffInformationTable->BootMode != BOOT_ON_S3_RESUME)) {
+    //
+    // Allocate more buffer to avoid buffer overflow.
+    //
+    if (ImageContext.IsTeImage) {
+      AlignImageSize = ImageContext.ImageSize + ((EFI_TE_IMAGE_HEADER *) 
Pe32Data)->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER);
+    } else {
+      AlignImageSize = ImageContext.ImageSize;
+    }
+
+    if (ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
+      AlignImageSize += ImageContext.SectionAlignment;
+    }
+
     if (PcdGet64(PcdLoadModuleAtFixAddressEnable) != 0) {
       Status = GetPeCoffImageFixLoadingAssignedAddress(&ImageContext, Private);
       if (EFI_ERROR (Status)){
@@ -384,10 +398,10 @@
         //
         // The PEIM is not assiged valid address, try to allocate page to load 
it.
         //
-        ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) 
AllocatePages (EFI_SIZE_TO_PAGES ((UINT32) ImageContext.ImageSize));
+        ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) 
AllocatePages (EFI_SIZE_TO_PAGES ((UINT32) AlignImageSize));
       }
     } else {
-      ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) AllocatePages 
(EFI_SIZE_TO_PAGES ((UINT32) ImageContext.ImageSize));
+      ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) AllocatePages 
(EFI_SIZE_TO_PAGES ((UINT32) AlignImageSize));
     }
     ASSERT (ImageContext.ImageAddress != 0);
     if (ImageContext.ImageAddress == 0) {
@@ -395,6 +409,15 @@
     }
 
     //
+    // Adjust the Image Address to make sure it is section alignment.
+    //
+    if (ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
+      ImageContext.ImageAddress =
+          (ImageContext.ImageAddress + ImageContext.SectionAlignment - 1) &
+          ~((UINTN)ImageContext.SectionAlignment - 1);
+    }
+    //
+    // Fix alignment requirement when Load IPF TeImage into memory.
     // Skip the reserved space for the stripped PeHeader when load TeImage 
into memory.
     //
     if (ImageContext.IsTeImage) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to