fix(kernel/efi): 🐛 check if ImageHandle and SystemTable has valid, pointers
Some checks failed
Build OS / Build Cross-Compiler & Toolchain (push) Has been cancelled
Build OS / Analyze (c-cpp) (push) Has been cancelled
Build OS / Build OS (push) Has been cancelled

This commit is contained in:
2025-05-19 23:39:29 +00:00
parent 7d37f8a8a1
commit 07d0ca0438
2 changed files with 17 additions and 2 deletions

View File

@ -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

View File

@ -19,6 +19,7 @@
#include <boot/binfo.h>
#include <debug.h>
#include <memory/virtual.hpp>
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);