https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e45af60560c5d030d70df…
commit e45af60560c5d030d70df0c787f07d214c5a6250
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sat Jul 23 16:19:52 2022 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)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