Once BlGetMemoryMap() is called, it cannot allocate or free memory, otherwise key gets invalidated
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
parent
0461d975e0
commit
0c3e18fd86
@ -41,18 +41,6 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Allocate and zero-fill buffer for EFI memory map */
|
|
||||||
BlEfiMemoryAllocatePool(sizeof(EFI_MEMORY_MAP), (PVOID*)&MemoryMap);
|
|
||||||
RtlZeroMemory(MemoryMap, sizeof(EFI_MEMORY_MAP));
|
|
||||||
|
|
||||||
/* Get EFI memory map */
|
|
||||||
Status = BlGetMemoryMap(MemoryMap);
|
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
|
||||||
{
|
|
||||||
/* Unable to get memory map */
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate pages for PML4 */
|
/* Allocate pages for PML4 */
|
||||||
Status = BlEfiMemoryAllocatePages(1, &Address);
|
Status = BlEfiMemoryAllocatePages(1, &Address);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
@ -111,8 +99,20 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
ListEntry = ListEntry->Flink;
|
ListEntry = ListEntry->Flink;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit EFI Boot Services */
|
/* Allocate and zero-fill buffer for EFI memory map */
|
||||||
|
BlEfiMemoryAllocatePool(sizeof(EFI_MEMORY_MAP), (PVOID*)&MemoryMap);
|
||||||
|
RtlZeroMemory(MemoryMap, sizeof(EFI_MEMORY_MAP));
|
||||||
|
|
||||||
|
/* Get EFI memory map and prepare for exiting boot services */
|
||||||
BlDbgPrint(L"Exiting EFI boot services\n");
|
BlDbgPrint(L"Exiting EFI boot services\n");
|
||||||
|
Status = BlGetMemoryMap(MemoryMap);
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Unable to get memory map */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Exit EFI Boot Services */
|
||||||
Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey);
|
Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -197,8 +197,16 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
ListEntry = ListEntry->Flink;
|
ListEntry = ListEntry->Flink;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit EFI Boot Services */
|
/* Get EFI memory map and prepare for exiting boot services */
|
||||||
BlDbgPrint(L"Exiting EFI boot services\n");
|
BlDbgPrint(L"Exiting EFI boot services\n");
|
||||||
|
Status = BlGetMemoryMap(MemoryMap);
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Unable to get memory map */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Exit EFI Boot Services */
|
||||||
Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey);
|
Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user