https://git.reactos.org/?p=reactos.git;a=commitdiff;h=954f7c06609ffd9545fe35...
commit 954f7c06609ffd9545fe35ffb6fe0096079ddb1c Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sat Nov 2 01:07:29 2019 +0100 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Sun Nov 3 05:08:33 2019 +0100
[NTOS:KD] Check for valid LoaderBlock and LoaderBlock->LoadOptions pointers when calling KdInitSystem() in BootPhase == 0. --- ntoskrnl/kd/kdinit.c | 62 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 25 deletions(-)
diff --git a/ntoskrnl/kd/kdinit.c b/ntoskrnl/kd/kdinit.c index 3a7071d5cb3..f5e1c489709 100644 --- a/ntoskrnl/kd/kdinit.c +++ b/ntoskrnl/kd/kdinit.c @@ -84,7 +84,6 @@ KdpGetDebugMode(PCHAR Currentp2) } } } - /* Check for Debug Log Debugging */ else if (!_strnicmp(p2, "FILE", 4)) { @@ -100,7 +99,6 @@ KdpGetDebugMode(PCHAR Currentp2) KdpLogFileName.Buffer = p1; } } - /* Check for BOCHS Debugging */ else if (!_strnicmp(p2, "BOCHS", 5)) { @@ -108,7 +106,6 @@ KdpGetDebugMode(PCHAR Currentp2) p2 += 5; KdpDebugMode.Bochs = TRUE; } - /* Check for GDB Debugging */ else if (!_strnicmp(p2, "GDB", 3)) { @@ -122,7 +119,6 @@ KdpGetDebugMode(PCHAR Currentp2) SharedUserData->KdDebuggerEnabled = TRUE; WrapperInitRoutine = KdpGdbStubInit; } - /* Check for PICE Debugging */ else if (!_strnicmp(p2, "PICE", 4)) { @@ -175,39 +171,55 @@ KdInitSystem(ULONG BootPhase, { ULONG Value; ULONG i; - PCHAR CommandLine, Port, BaudRate, Irq; + PCHAR CommandLine, Port = NULL, BaudRate = NULL, Irq = NULL;
/* Set Default Port Options */ if (BootPhase == 0) { - /* Get the Command Line */ - CommandLine = LoaderBlock->LoadOptions; - - /* Upcase it */ - _strupr(CommandLine); - - /* XXX Check for settings that we support */ - if (strstr(CommandLine, "NODEBUG")) KdDebuggerEnabled = FALSE; - else if (strstr(CommandLine, "CRASHDEBUG")) KdDebuggerEnabled = FALSE; - else if (strstr(CommandLine, "DEBUG")) + /* Check if we have a loader block */ + if (LoaderBlock) { - /* Enable the kernel debugger */ - KdDebuggerNotPresent = FALSE; - KdDebuggerEnabled = TRUE; + /* Check if we have a command line */ + CommandLine = LoaderBlock->LoadOptions; + if (CommandLine) + { + /* Upcase it */ + _strupr(CommandLine); + + /* XXX Check for settings that we support */ + if (strstr(CommandLine, "NODEBUG")) KdDebuggerEnabled = FALSE; + else if (strstr(CommandLine, "CRASHDEBUG")) KdDebuggerEnabled = FALSE; + else if (strstr(CommandLine, "DEBUG")) + { + /* Enable the kernel debugger */ + KdDebuggerNotPresent = FALSE; + KdDebuggerEnabled = TRUE; #ifdef KDBG - /* Get the KDBG Settings */ - KdbpGetCommandLineSettings(LoaderBlock->LoadOptions); + /* Get the KDBG Settings */ + KdbpGetCommandLineSettings(LoaderBlock->LoadOptions); #endif + } + + /* Get the port and baud rate */ + Port = strstr(CommandLine, "DEBUGPORT"); + BaudRate = strstr(CommandLine, "BAUDRATE"); + Irq = strstr(CommandLine, "IRQ"); + } + else + { + /* No command line options? Disable debugger by default */ + KdDebuggerEnabled = FALSE; + } + } + else + { + /* Called from a bugcheck or a re-enable. Unconditionally enable KD */ + KdDebuggerEnabled = TRUE; }
/* Let user-mode know our state */ SharedUserData->KdDebuggerEnabled = KdDebuggerEnabled;
- /* Get the port and baud rate */ - Port = strstr(CommandLine, "DEBUGPORT"); - BaudRate = strstr(CommandLine, "BAUDRATE"); - Irq = strstr(CommandLine, "IRQ"); - /* Check if we got the /DEBUGPORT parameter(s) */ while (Port) {