https://git.reactos.org/?p=reactos.git;a=commitdiff;h=583be404ddc0a52091a7a22944520d94196cbf70

commit 583be404ddc0a52091a7a22944520d94196cbf70
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Wed Aug 16 01:14:28 2023 +0300
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Thu Sep 7 01:16:14 2023 +0300

    [NTOSKRNL/x64] Fix bug in KiInitializeContextThread
    
    The function set CtxSwitchFrame->ApcBypass to FALSE, preventing APCs (like 
when user mode sets the context while the thread is suspended) from being 
delivered as soon as the thread lowers IRQL to PASSIVE_LEVEL. This resulted in 
the SetContext APC to be delivered only after the user mode APC was 
initialized, overwriting the user mode APC context in the trap frame. This 
caused kernel32_winetest process to break.
---
 ntoskrnl/ke/amd64/thrdini.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ntoskrnl/ke/amd64/thrdini.c b/ntoskrnl/ke/amd64/thrdini.c
index b2119c6e8a3..3185de21cd6 100644
--- a/ntoskrnl/ke/amd64/thrdini.c
+++ b/ntoskrnl/ke/amd64/thrdini.c
@@ -134,7 +134,7 @@ KiInitializeContextThread(IN PKTHREAD Thread,
 
     /* Set up the Context Switch Frame */
     CtxSwitchFrame->Return = (ULONG64)KiThreadStartup;
-    CtxSwitchFrame->ApcBypass = FALSE;
+    CtxSwitchFrame->ApcBypass = TRUE;
 
     StartFrame->P1Home = (ULONG64)StartRoutine;
     StartFrame->P2Home = (ULONG64)StartContext;

Reply via email to