https://git.reactos.org/?p=reactos.git;a=commitdiff;h=902c6eee1e0d68d0d976687d72c6542dbe686cc6
commit 902c6eee1e0d68d0d976687d72c6542dbe686cc6 Author: Timo Kreuzer <[email protected]> AuthorDate: Sat Jul 23 13:21:18 2022 +0200 Commit: Timo Kreuzer <[email protected]> CommitDate: Thu Aug 4 16:15:24 2022 +0200 [NTOS:KE] Restore interrupts in KiSwitchKernelStack --- ntoskrnl/ke/amd64/stubs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ntoskrnl/ke/amd64/stubs.c b/ntoskrnl/ke/amd64/stubs.c index 7aa5866b978..7933d2c1cf9 100644 --- a/ntoskrnl/ke/amd64/stubs.c +++ b/ntoskrnl/ke/amd64/stubs.c @@ -115,6 +115,7 @@ KiSwitchKernelStack(PVOID StackBase, PVOID StackLimit) LONG_PTR StackOffset; SIZE_T StackSize; PKIPCR Pcr; + ULONG Eflags; /* Get the current thread */ CurrentThread = KeGetCurrentThread(); @@ -135,6 +136,7 @@ KiSwitchKernelStack(PVOID StackBase, PVOID StackLimit) StackOffset = (PUCHAR)StackBase - (PUCHAR)CurrentThread->StackBase; /* Disable interrupts while messing with the stack */ + Eflags = __readeflags(); _disable(); /* Set the new trap frame */ @@ -157,6 +159,9 @@ KiSwitchKernelStack(PVOID StackBase, PVOID StackLimit) /* Adjust Rsp0 in the TSS */ Pcr->TssBase->Rsp0 += StackOffset; + /* Restore interrupts */ + __writeeflags(Eflags); + return OldStackBase; }
