diff options
author | Liav A <liavalb@gmail.com> | 2022-03-17 17:23:04 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-03-18 09:22:10 +0000 |
commit | 3bbb5734afd34a4cbc9580fe286e19fc2b71a1c3 (patch) | |
tree | 0bd81fd1fed5bdb7a45c89f41c68ecf48a6b2f10 | |
parent | eca8f292a56f8a0000532c15081a753cc21878b1 (diff) | |
download | serenity-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.cpp | 2 |
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(); |