Take care about blink first, otherwise BlPhysicalListToVirtual() fails to properly map single-element linked list
This commit is contained in:
parent
f74a5521ba
commit
058649036f
@ -659,16 +659,6 @@ BlPhysicalListToVirtual(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
NextEntry = ListEntry->Flink;
|
NextEntry = ListEntry->Flink;
|
||||||
|
|
||||||
/* Convert the address of this element to VirtualAddress */
|
/* Convert the address of this element to VirtualAddress */
|
||||||
if(ListEntry->Flink == ListHead)
|
|
||||||
{
|
|
||||||
/* Convert list head */
|
|
||||||
ListEntry->Flink = ListHead->Flink->Blink;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Convert list entry */
|
|
||||||
ListEntry->Flink = BlPhysicalAddressToVirtual(ListEntry->Flink, (PVOID)PhysicalBase, VirtualBase);
|
|
||||||
}
|
|
||||||
if(ListEntry->Blink == ListHead)
|
if(ListEntry->Blink == ListHead)
|
||||||
{
|
{
|
||||||
/* Find virtual address of list head */
|
/* Find virtual address of list head */
|
||||||
@ -679,14 +669,24 @@ BlPhysicalListToVirtual(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
/* Convert list entry */
|
/* Convert list entry */
|
||||||
ListEntry->Blink = BlPhysicalAddressToVirtual(ListEntry->Blink, (PVOID)PhysicalBase, VirtualBase);
|
ListEntry->Blink = BlPhysicalAddressToVirtual(ListEntry->Blink, (PVOID)PhysicalBase, VirtualBase);
|
||||||
}
|
}
|
||||||
|
if(ListEntry->Flink == ListHead)
|
||||||
|
{
|
||||||
|
/* Convert list head */
|
||||||
|
ListEntry->Flink = ListHead->Flink->Blink;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Convert list entry */
|
||||||
|
ListEntry->Flink = BlPhysicalAddressToVirtual(ListEntry->Flink, (PVOID)PhysicalBase, VirtualBase);
|
||||||
|
}
|
||||||
|
|
||||||
/* Get to the next element*/
|
/* Get to the next element*/
|
||||||
ListEntry = NextEntry;
|
ListEntry = NextEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert list head */
|
/* Convert list head */
|
||||||
ListHead->Flink = BlPhysicalAddressToVirtual(ListHead->Flink, (PVOID)PhysicalBase, VirtualBase);
|
|
||||||
ListHead->Blink = BlPhysicalAddressToVirtual(ListHead->Blink, (PVOID)PhysicalBase, VirtualBase);
|
ListHead->Blink = BlPhysicalAddressToVirtual(ListHead->Blink, (PVOID)PhysicalBase, VirtualBase);
|
||||||
|
ListHead->Flink = BlPhysicalAddressToVirtual(ListHead->Flink, (PVOID)PhysicalBase, VirtualBase);
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_EFI_SUCCESS;
|
return STATUS_EFI_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user