mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-07-01 18:39:16 +00:00
fix(kernel/efi): 🐛 check if ImageHandle and SystemTable has valid, pointers
This commit is contained in:
@ -194,6 +194,15 @@ namespace Memory
|
|||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
this->ReservePages(SDTHdr, TO_PAGES(SDTHdr->Length));
|
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__)
|
#elif defined(__aarch64__)
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <boot/binfo.h>
|
#include <boot/binfo.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
#include <memory/virtual.hpp>
|
||||||
|
|
||||||
extern struct BootInfo bInfo;
|
extern struct BootInfo bInfo;
|
||||||
|
|
||||||
@ -150,9 +151,14 @@ VOID InitializeMemoryNoBS()
|
|||||||
|
|
||||||
EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
|
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
|
#ifdef DEBUG
|
||||||
debug("efi info: %x", bInfo.EFI.Info.raw);
|
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 EfiAcpi20Table = EFI_ACPI_20_TABLE_GUID;
|
||||||
EFI_GUID AcpiTable = ACPI_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
|
#endif
|
||||||
|
|
||||||
if (bInfo.EFI.Info.ST == 1)
|
if (bInfo.EFI.Info.ST == 1 && validST)
|
||||||
{
|
{
|
||||||
SearchSMBIOS(SystemTable);
|
SearchSMBIOS(SystemTable);
|
||||||
SearchRSDP(SystemTable);
|
SearchRSDP(SystemTable);
|
||||||
|
Reference in New Issue
Block a user