From c9e2d99570d63854895f58f1ea156a6a88fb6150 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 8 May 2023 05:27:16 +0300 Subject: [PATCH] Add checks for invalid addresses --- Core/Memory/Memory.cpp | 15 +++++++-------- Core/Symbols.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Core/Memory/Memory.cpp b/Core/Memory/Memory.cpp index 303bf1c..f9747c8 100644 --- a/Core/Memory/Memory.cpp +++ b/Core/Memory/Memory.cpp @@ -243,10 +243,13 @@ NIF void MapKernel(PageTable *PT, BootInfo *Info) debug("Base kernel map address: %#lx", BaseKernelMapAddress); /* Kernel file */ - for (k = KernelFileStart; k < KernelFileEnd; k += PAGE_SIZE) + if (KernelFileStart != 0) { - va.Map((void *)k, (void *)k, PTFlag::G); - KernelAllocator.ReservePage((void *)k); + for (k = KernelFileStart; k < KernelFileEnd; k += PAGE_SIZE) + { + va.Map((void *)k, (void *)k, PTFlag::G); + KernelAllocator.ReservePage((void *)k); + } } #ifdef DEBUG @@ -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")) { diff --git a/Core/Symbols.cpp b/Core/Symbols.cpp index 18fdf41..089b23c 100644 --- a/Core/Symbols.cpp +++ b/Core/Symbols.cpp @@ -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;