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

View File

@ -27,6 +27,12 @@ namespace SymbolResolver
{ {
Symbols::Symbols(uintptr_t ImageAddress) 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; this->Image = (void *)ImageAddress;
debug("Solving symbols for address: %#llx", ImageAddress); debug("Solving symbols for address: %#llx", ImageAddress);
Elf64_Ehdr *Header = (Elf64_Ehdr *)ImageAddress; Elf64_Ehdr *Header = (Elf64_Ehdr *)ImageAddress;