summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2022-03-17 17:23:04 +0200
committerLinus Groh <mail@linusgroh.de>2022-03-18 09:22:10 +0000
commit3bbb5734afd34a4cbc9580fe286e19fc2b71a1c3 (patch)
tree0bd81fd1fed5bdb7a45c89f41c68ecf48a6b2f10
parenteca8f292a56f8a0000532c15081a753cc21878b1 (diff)
downloadserenity-3bbb5734afd34a4cbc9580fe286e19fc2b71a1c3.zip
Kernel: Don't initialize early framebuffer console if address is invalid
To do so, we now check that the framebuffer type is RGB so we know that the Multiboot bootloader actually provided a valid framebuffer to work with. This fixes a problem I observed on my ICH7 test machine that apparently the multiboot_framebuffer_addr was not null but there was no framebuffer that was set up for RGB colors, and by initializing that console, there was a memory curroption caused somewhere in the EBDA area to probably cause a complete system lockup.
-rw-r--r--Kernel/init.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/Kernel/init.cpp b/Kernel/init.cpp
index a89afa848e..5c5f98fba0 100644
--- a/Kernel/init.cpp
+++ b/Kernel/init.cpp
@@ -196,7 +196,7 @@ extern "C" [[noreturn]] UNMAP_AFTER_INIT void init(BootInfo const& boot_info)
// If the bootloader didn't provide a framebuffer, then set up an initial text console.
// We do so we can see the output on the screen as soon as possible.
if (!kernel_command_line().is_early_boot_console_disabled()) {
- if (!multiboot_framebuffer_addr.is_null()) {
+ if (!multiboot_framebuffer_addr.is_null() && multiboot_framebuffer_type == MULTIBOOT_FRAMEBUFFER_TYPE_RGB) {
g_boot_console = &try_make_ref_counted<Graphics::BootFramebufferConsole>(multiboot_framebuffer_addr, multiboot_framebuffer_width, multiboot_framebuffer_height, multiboot_framebuffer_pitch).value().leak_ref();
} else {
g_boot_console = &Graphics::TextModeConsole::initialize().leak_ref();