summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Core/Pei
diff options
context:
space:
mode:
authorklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>2008-02-03 07:41:10 +0000
committerklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>2008-02-03 07:41:10 +0000
commit39d262c4ce5924e80e169a2558a81a6e349249cb (patch)
treee3f3abd91ffafadd02d08e6f9a91d820071f6114 /MdeModulePkg/Core/Pei
parentff8ff1391d20bd7846a972652c25b7631a9bef8e (diff)
downloadedk2-39d262c4ce5924e80e169a2558a81a6e349249cb.zip
edk2-39d262c4ce5924e80e169a2558a81a6e349249cb.tar.gz
edk2-39d262c4ce5924e80e169a2558a81a6e349249cb.tar.bz2
Fix bug in latest check-in of "Make sure the base address of stack base and base address of hob start is in page alignment in InstallPeiMemory() interface."
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4666 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Core/Pei')
-rw-r--r--MdeModulePkg/Core/Pei/Memory/MemoryServices.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
index e2b2ccc..05e65ce 100644
--- a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
+++ b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
@@ -115,16 +115,23 @@ Returns:
UINT64 EfiFreeMemorySize;
EFI_PHYSICAL_ADDRESS PhysicalAddressOfOldHob;
+ if (MemoryLength > (MAX_ADDRESS - MemoryBegin + 1))
+ return EFI_INVALID_PARAMETER;
+
+
DEBUG ((EFI_D_INFO, "PeiInstallPeiMemory MemoryBegin 0x%LX, MemoryLength 0x%LX\n", MemoryBegin, MemoryLength));
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
PrivateData->SwitchStackSignal = TRUE;
PrivateData->PeiMemoryInstalled = TRUE;
-
- PrivateData->StackBase = MemoryBegin;
- PeiStackSize = RShiftU64 (MemoryLength, 1);
+ //
+ // Ensure the stack base is in page alignment
+ //
+ PrivateData->StackBase = ((UINTN)MemoryBegin + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
+ PeiStackSize = (RShiftU64 (MemoryLength, 1) + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
+
if (PEI_STACK_SIZE > PeiStackSize) {
PrivateData->StackSize = PeiStackSize;
} else {
@@ -133,7 +140,7 @@ Returns:
OldHandOffHob = PrivateData->HobList.HandoffInformationTable;
- PrivateData->HobList.Raw = (VOID *)((UINTN)(MemoryBegin + PrivateData->StackSize));
+ PrivateData->HobList.Raw = (VOID *)((UINTN)(PrivateData->StackBase + PrivateData->StackSize));
NewHandOffHob = PrivateData->HobList.HandoffInformationTable;
PhysicalAddressOfOldHob = (EFI_PHYSICAL_ADDRESS) (UINTN) OldHandOffHob;