From 6cf426345b425e9328ebd0b481f955b994dc0cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Nov 2024 22:53:10 +0100 Subject: [PATCH] [NTOS:KD64] Use KdpDprintf() instead of DbgPrint() for the debugger banner DPRINTs (#7540) Override DbgPrint(), used by the debugger banner DPRINTs, because KdInitSystem() can be called under the debugger lock by KdEnableDebugger(WithLock)(). In this case, when DbgPrint() (re-)enters the debugger via an interrupt and acquires the debugger lock, a deadlock occurs. --- ntoskrnl/kd64/kdinit.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ntoskrnl/kd64/kdinit.c b/ntoskrnl/kd64/kdinit.c index a49655ff6cb..93f2bd7dfca 100644 --- a/ntoskrnl/kd64/kdinit.c +++ b/ntoskrnl/kd64/kdinit.c @@ -11,9 +11,18 @@ #include #include + #define NDEBUG #include +/* + * Override DbgPrint(), used by the debugger banner DPRINTs below, + * because KdInitSystem() can be called under the debugger lock by + * KdEnableDebugger(WithLock)(). + */ +#define DbgPrint(fmt, ...) (KdpDprintf(fmt, ##__VA_ARGS__), 0) +#define DbgPrintEx(cmpid, lvl, fmt, ...) (KdpDprintf(fmt, ##__VA_ARGS__), 0) + /* UTILITY FUNCTIONS *********************************************************/ /*