mirror of https://github.com/acidanthera/audk.git
FreePageTablesRecursive () traverses the page table tree depth first to free all pages that it finds, without taking into account the level at which it is operating. Since TT_TYPE_TABLE_ENTRY aliases TT_TYPE_BLOCK_ENTRY_LEVEL3, we cannot distinguish table entries from block entries unless we take the level into account, and so we may be dereferencing garbage if we happen to try and free a hierarchy of page tables that has level 3 pages in it. Let's fix this by passing the level into FreePageTablesRecursive (), and limit the recursion to levels < 3. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif@nuviainc.com> Reviewed-by: Ashish Singhal <ashishsingha@nvidia.com> Tested-by: Ashish Singhal <ashishsingha@nvidia.com> Tested-by: Laszlo Ersek <lersek@redhat.com> |
||
---|---|---|
.. | ||
ArmArchTimerLib | ||
ArmCacheMaintenanceLib | ||
ArmDisassemblerLib | ||
ArmExceptionLib | ||
ArmGenericTimerPhyCounterLib | ||
ArmGenericTimerVirtCounterLib | ||
ArmGicArchLib | ||
ArmGicArchSecLib | ||
ArmHvcLib | ||
ArmLib | ||
ArmMmuLib | ||
ArmMtlNullLib | ||
ArmPsciResetSystemLib | ||
ArmSmcLib | ||
ArmSmcLibNull | ||
ArmSmcPsciResetSystemLib | ||
ArmSoftFloatLib | ||
ArmSvcLib | ||
CompilerIntrinsicsLib | ||
DebugAgentSymbolsBaseLib | ||
DebugPeCoffExtraActionLib | ||
DefaultExceptionHandlerLib | ||
GccLto | ||
OpteeLib | ||
PeiServicesTablePointerLib | ||
PlatformBootManagerLib | ||
RvdPeCoffExtraActionLib | ||
SemiHostingDebugLib | ||
SemiHostingSerialPortLib | ||
SemihostLib | ||
StandaloneMmMmuLib |