From e45af60560c5d030d70df0c787f07d214c5a6250 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 23 Jul 2022 16:19:52 +0200 Subject: [PATCH] [NTOS:KE/X64] Enable interrupts when accessing user mode memory --- ntoskrnl/ke/amd64/except.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ntoskrnl/ke/amd64/except.c b/ntoskrnl/ke/amd64/except.c index a04d3038bd9..c9c97c9dd2f 100644 --- a/ntoskrnl/ke/amd64/except.c +++ b/ntoskrnl/ke/amd64/except.c @@ -119,6 +119,9 @@ KiDispatchExceptionToUser( /* Get pointer to the usermode context, exception record and machine frame */ UserStack = (PKUSER_EXCEPTION_STACK)UserRsp; + /* Enable interrupts */ + _enable(); + /* Set up the user-stack */ _SEH2_TRY { @@ -143,6 +146,7 @@ KiDispatchExceptionToUser( // FIXME: handle stack overflow /* Nothing we can do here */ + _disable(); _SEH2_YIELD(return); } _SEH2_END; @@ -165,6 +169,8 @@ KiDispatchExceptionToUser( /* Set RIP to the User-mode Dispatcher */ TrapFrame->Rip = (ULONG64)KeUserExceptionDispatcher; + _disable(); + /* Exit to usermode */ KiServiceExit2(TrapFrame); } @@ -202,6 +208,9 @@ KiPrepareUserDebugData(void) Teb = KeGetCurrentThread()->Teb; if (!Teb) return; + /* Enable interrupts */ + _enable(); + _SEH2_TRY { /* Get a pointer to the loader data */ @@ -230,6 +239,8 @@ KiPrepareUserDebugData(void) { } _SEH2_END; + + _disable(); } VOID