mirror of https://github.com/acidanthera/audk.git
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@4646 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
6be065d4be
commit
1eabd8e747
|
@ -115,16 +115,23 @@ Returns:
|
||||||
UINT64 EfiFreeMemorySize;
|
UINT64 EfiFreeMemorySize;
|
||||||
EFI_PHYSICAL_ADDRESS PhysicalAddressOfOldHob;
|
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));
|
DEBUG ((EFI_D_INFO, "PeiInstallPeiMemory MemoryBegin 0x%LX, MemoryLength 0x%LX\n", MemoryBegin, MemoryLength));
|
||||||
|
|
||||||
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
|
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
|
||||||
|
|
||||||
PrivateData->SwitchStackSignal = TRUE;
|
PrivateData->SwitchStackSignal = TRUE;
|
||||||
PrivateData->PeiMemoryInstalled = 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_SIZE - 1)) & EFI_PAGE_SIZE;
|
||||||
|
|
||||||
|
PeiStackSize = (RShiftU64 (MemoryLength, 1) + (EFI_PAGE_SIZE - 1)) & EFI_PAGE_SIZE;
|
||||||
if (PEI_STACK_SIZE > PeiStackSize) {
|
if (PEI_STACK_SIZE > PeiStackSize) {
|
||||||
PrivateData->StackSize = PeiStackSize;
|
PrivateData->StackSize = PeiStackSize;
|
||||||
} else {
|
} else {
|
||||||
|
@ -133,7 +140,7 @@ Returns:
|
||||||
|
|
||||||
OldHandOffHob = PrivateData->HobList.HandoffInformationTable;
|
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;
|
NewHandOffHob = PrivateData->HobList.HandoffInformationTable;
|
||||||
PhysicalAddressOfOldHob = (EFI_PHYSICAL_ADDRESS) (UINTN) OldHandOffHob;
|
PhysicalAddressOfOldHob = (EFI_PHYSICAL_ADDRESS) (UINTN) OldHandOffHob;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue