From 07d0ca0438767dd711989f41fc67959f7fd1275b Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Mon, 19 May 2025 23:39:29 +0000 Subject: [PATCH] fix(kernel/efi): :bug: check if ImageHandle and SystemTable has valid, pointers --- Kernel/core/memory/reserve_essentials.cpp | 9 +++++++++ Kernel/efi/efi.cpp | 10 ++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Kernel/core/memory/reserve_essentials.cpp b/Kernel/core/memory/reserve_essentials.cpp index b46f4566..07776c07 100644 --- a/Kernel/core/memory/reserve_essentials.cpp +++ b/Kernel/core/memory/reserve_essentials.cpp @@ -194,6 +194,15 @@ namespace Memory #pragma GCC diagnostic pop this->ReservePages(SDTHdr, TO_PAGES(SDTHdr->Length)); } + + if (bInfo.EFI.Info.Enabled) + { + debug("Reserving EFI related..."); + if (bInfo.EFI.Info.IH) + this->ReservePage(bInfo.EFI.ImageHandle); + if (bInfo.EFI.Info.ST) + this->ReservePage(bInfo.EFI.SystemTable); + } } #elif defined(__aarch64__) #endif diff --git a/Kernel/efi/efi.cpp b/Kernel/efi/efi.cpp index b4b41bec..0e0aa81d 100644 --- a/Kernel/efi/efi.cpp +++ b/Kernel/efi/efi.cpp @@ -19,6 +19,7 @@ #include #include +#include extern struct BootInfo bInfo; @@ -150,9 +151,14 @@ VOID InitializeMemoryNoBS() EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { + Memory::Virtual va; + bool validST = va.Check(SystemTable); + bool validIH = va.Check(ImageHandle); + trace("map: ST:%d IH:%d", validST, validIH); + #ifdef DEBUG debug("efi info: %x", bInfo.EFI.Info.raw); - if (bInfo.EFI.Info.ST) + if (bInfo.EFI.Info.ST && validST) { EFI_GUID EfiAcpi20Table = EFI_ACPI_20_TABLE_GUID; EFI_GUID AcpiTable = ACPI_TABLE_GUID; @@ -238,7 +244,7 @@ EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable } #endif - if (bInfo.EFI.Info.ST == 1) + if (bInfo.EFI.Info.ST == 1 && validST) { SearchSMBIOS(SystemTable); SearchRSDP(SystemTable);