mirror of
https://github.com/reactos/reactos.git
synced 2024-06-28 08:51:29 +00:00
[NTOS] Fix interrupt flag handling in KiPageFault
This fixes a crash in kmtest:ZwAllocateVirtualMemory
This commit is contained in:
parent
5b6e7eceda
commit
12ed9f30a7
|
@ -417,13 +417,15 @@ FUNC KiPageFault
|
|||
mov rdx, cr2
|
||||
mov [rbp + KTRAP_FRAME_FaultAddress], rdx
|
||||
|
||||
/* If interrupts are off, treat this as an access violation */
|
||||
/* If interrupts are off, do not enable them */
|
||||
test dword ptr [rbp + KTRAP_FRAME_EFlags], EFLAGS_IF_MASK
|
||||
jz AccessViolation
|
||||
jz IntsDisabled
|
||||
|
||||
/* Enable interrupts for the page fault handler */
|
||||
sti
|
||||
|
||||
IntsDisabled:
|
||||
|
||||
/* Call page fault handler */
|
||||
mov ecx, [rbp + KTRAP_FRAME_ErrorCode] // FaultCode
|
||||
// rdx == Address
|
||||
|
@ -443,13 +445,10 @@ FUNC KiPageFault
|
|||
|
||||
PageFaultError:
|
||||
|
||||
/* Disable interrupts again for the debugger */
|
||||
cli
|
||||
|
||||
/* Set parameter 1 to error code */
|
||||
mov r9d, [rbp + KTRAP_FRAME_ErrorCode]
|
||||
|
||||
/* Set parameter2 to faulting address */
|
||||
/* Set parameter 2 to faulting address */
|
||||
mov r10, cr2 // Param2 = faulting address
|
||||
|
||||
cmp eax, STATUS_ACCESS_VIOLATION
|
||||
|
@ -477,6 +476,10 @@ SpecialCode:
|
|||
call InternalDispatchException
|
||||
|
||||
PageFaultReturn:
|
||||
|
||||
/* Disable interrupts for the return */
|
||||
cli
|
||||
|
||||
/* Return */
|
||||
ExitTrap (TF_SAVE_ALL or TF_CHECKUSERAPC)
|
||||
ENDFUNC
|
||||
|
|
Loading…
Reference in a new issue