https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e45af60560c5d030d70df0...
commit e45af60560c5d030d70df0c787f07d214c5a6250 Author: Timo Kreuzer timo.kreuzer@reactos.org AuthorDate: Sat Jul 23 16:19:52 2022 +0200 Commit: Timo Kreuzer timo.kreuzer@reactos.org CommitDate: Thu Aug 4 16:15:24 2022 +0200
[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