From d67c70d0435c34a38bb03bc3225c765d81b7136d Mon Sep 17 00:00:00 2001 From: Liav A Date: Fri, 21 Jan 2022 11:36:32 +0200 Subject: [PATCH] Kernel: Ensure that CommandLine is initialized before choosing PanicMode If the kernel commandline is not initialized, just halt everything. --- Kernel/CommandLine.cpp | 5 +++++ Kernel/CommandLine.h | 1 + Kernel/Panic.cpp | 2 ++ 3 files changed, 8 insertions(+) diff --git a/Kernel/CommandLine.cpp b/Kernel/CommandLine.cpp index 1d68751762..e87565c32d 100644 --- a/Kernel/CommandLine.cpp +++ b/Kernel/CommandLine.cpp @@ -27,6 +27,11 @@ UNMAP_AFTER_INIT void CommandLine::early_initialize(const char* cmd_line) s_cmd_line[length] = '\0'; } +bool CommandLine::was_initialized() +{ + return s_the != nullptr; +} + const CommandLine& kernel_command_line() { VERIFY(s_the); diff --git a/Kernel/CommandLine.h b/Kernel/CommandLine.h index a007fdab36..f28b97a0de 100644 --- a/Kernel/CommandLine.h +++ b/Kernel/CommandLine.h @@ -45,6 +45,7 @@ class CommandLine { public: static void early_initialize(const char* cmd_line); static void initialize(); + static bool was_initialized(); enum class Validate { Yes, diff --git a/Kernel/Panic.cpp b/Kernel/Panic.cpp index c2022d8486..34100a1bdb 100644 --- a/Kernel/Panic.cpp +++ b/Kernel/Panic.cpp @@ -33,6 +33,8 @@ void __panic(const char* file, unsigned int line, const char* function) critical_dmesgln("at {}:{} in {}", file, line, function); dump_backtrace(PrintToScreen::Yes); + if (!CommandLine::was_initialized()) + Processor::halt(); switch (kernel_command_line().panic_mode()) { case PanicMode::Shutdown: __shutdown();