forked from xt-sys/exectos
Fix a bug in BlAddVirtualMemoryMapping() routine causing PF (Page Fault) on systems with more than 3GB of RAM
This commit is contained in:
parent
8beb7c13ec
commit
2b679c11d4
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user