From 32e1354b9b0050dd2920c8506cef2841789e14df Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Boric Date: Sun, 7 Mar 2021 12:36:16 +0100 Subject: [PATCH] Kernel: Fix unaligned read inside map_ebda() --- Kernel/Arch/PC/BIOS.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Kernel/Arch/PC/BIOS.cpp b/Kernel/Arch/PC/BIOS.cpp index 009df2df3f..1214ba80ed 100644 --- a/Kernel/Arch/PC/BIOS.cpp +++ b/Kernel/Arch/PC/BIOS.cpp @@ -43,10 +43,11 @@ MappedROM map_bios() MappedROM map_ebda() { auto ebda_segment_ptr = map_typed(PhysicalAddress(0x40e)); - auto ebda_length_ptr = map_typed(PhysicalAddress(0x413)); + auto ebda_length_ptr_b0 = map_typed(PhysicalAddress(0x413)); + auto ebda_length_ptr_b1 = map_typed(PhysicalAddress(0x414)); PhysicalAddress ebda_paddr(*ebda_segment_ptr << 4); - size_t ebda_size = *ebda_length_ptr; + size_t ebda_size = (*ebda_length_ptr_b1 << 8) | *ebda_length_ptr_b0; MappedROM mapping; mapping.region = MM.allocate_kernel_region(ebda_paddr.page_base(), page_round_up(ebda_size), {}, Region::Access::Read);