[NTOS:MM] Handle page table faults in MmArmAccessFault

These faults are handled by ARM³ and we don't need to check for a memory area. They can be recursive faults (e.g. from MiDeleteSystemPageableVm), so we might be holding the WS lock already. Passing it straight to ARM³ allows to acquire the WS lock below to look up the memory area.
This commit is contained in:
Timo Kreuzer 2023-10-10 22:37:21 +03:00
parent a8b57f0a6b
commit 84d0586ca4

View file

@ -227,11 +227,12 @@ MmAccessFault(IN ULONG FaultCode,
#endif
}
/* Handle shared user page, which doesn't have a VAD / MemoryArea */
if (PAGE_ALIGN(Address) == (PVOID)MM_SHARED_USER_DATA_VA)
/* Handle shared user page / page table, which don't have a VAD / MemoryArea */
if ((PAGE_ALIGN(Address) == (PVOID)MM_SHARED_USER_DATA_VA) ||
MI_IS_PAGE_TABLE_ADDRESS(Address))
{
/* This is an ARM3 fault */
DPRINT("ARM3 fault %p\n", MemoryArea);
DPRINT("ARM3 fault %p\n", Address);
return MmArmAccessFault(FaultCode, Address, Mode, TrapInformation);
}