Fix a bug in BlAddVirtualMemoryMapping() routine causing PF (Page Fault) on systems with more than 3GB of RAM

This commit is contained in:
Rafal Kupiec 2022-12-11 13:56:40 +01:00
parent 8beb7c13ec
commit 2b679c11d4
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4

View File

@ -145,13 +145,9 @@ BlAddVirtualMemoryMapping(IN PLIST_ENTRY MemoryMappings,
if((Mapping2->PhysicalAddress >= Mapping1->PhysicalAddress && PhysicalAddress2End <= PhysicalAddressEnd) || if((Mapping2->PhysicalAddress >= Mapping1->PhysicalAddress && PhysicalAddress2End <= PhysicalAddressEnd) ||
(Mapping2->NumberOfPages == 0)) (Mapping2->NumberOfPages == 0))
{ {
/* Make sure it's memory type is LoaderFree */ /* If it is of LoaderFree type, then we can skip it */
if(Mapping2->MemoryType != LoaderFree) if(Mapping2->MemoryType == LoaderFree)
{ {
/* LoaderFree memory type is strictly expected */
return STATUS_EFI_INVALID_PARAMETER;
}
/* Store address of the next mapping */ /* Store address of the next mapping */
MappingListEntry = ListEntry->Flink; MappingListEntry = ListEntry->Flink;
@ -159,8 +155,11 @@ BlAddVirtualMemoryMapping(IN PLIST_ENTRY MemoryMappings,
RtlRemoveEntryList(&Mapping2->ListEntry); RtlRemoveEntryList(&Mapping2->ListEntry);
BlEfiMemoryFreePool(Mapping2); BlEfiMemoryFreePool(Mapping2);
ListEntry = MappingListEntry; ListEntry = MappingListEntry;
/* Go to the next mapping */
continue; continue;
} }
}
/* Determine phsical address order */ /* Determine phsical address order */
if(Mapping2->PhysicalAddress > Mapping1->PhysicalAddress) if(Mapping2->PhysicalAddress > Mapping1->PhysicalAddress)