Add checks for invalid addresses

This commit is contained in:
Alex 2023-05-08 05:27:16 +03:00
parent e57195ef51
commit c9e2d99570
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 13 additions and 8 deletions

View File

@ -243,11 +243,14 @@ NIF void MapKernel(PageTable *PT, BootInfo *Info)
debug("Base kernel map address: %#lx", BaseKernelMapAddress);
/* Kernel file */
if (KernelFileStart != 0)
{
for (k = KernelFileStart; k < KernelFileEnd; k += PAGE_SIZE)
{
va.Map((void *)k, (void *)k, PTFlag::G);
KernelAllocator.ReservePage((void *)k);
}
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
@ -389,11 +392,7 @@ NIF void InitializeMemoryManagement(BootInfo *Info)
#ifdef DEBUG
tracepagetable(KernelPageTable);
#endif
#if defined(a86)
asmv("mov %0, %%cr3" ::"r"(KernelPageTable));
#elif defined(aa64)
asmv("msr ttbr0_el1, %0" ::"r"(KernelPageTable));
#endif
CPU::PageTable(KernelPageTable);
debug("Page table updated.");
if (strstr(Info->Kernel.CommandLine, "xallocv1"))
{

View File

@ -27,6 +27,12 @@ namespace SymbolResolver
{
Symbols::Symbols(uintptr_t ImageAddress)
{
if (ImageAddress == 0 || Memory::Virtual().Check((void *)ImageAddress) == false)
{
error("Invalid image address %#lx", ImageAddress);
return;
}
this->Image = (void *)ImageAddress;
debug("Solving symbols for address: %#llx", ImageAddress);
Elf64_Ehdr *Header = (Elf64_Ehdr *)ImageAddress;