From d1421285389cf86748aad3ccf0d0a50609965834 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 14 Dec 2022 13:01:52 +0200 Subject: [PATCH] Check if the page is mapped --- Core/Crash/SFrame.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Core/Crash/SFrame.cpp b/Core/Crash/SFrame.cpp index d2f304c..9317eeb 100644 --- a/Core/Crash/SFrame.cpp +++ b/Core/Crash/SFrame.cpp @@ -25,12 +25,31 @@ namespace CrashHandler SafeFunction void TraceFrames(CHArchTrapFrame *Frame, int Count, SymbolResolver::Symbols *SymHandle, bool Kernel) { + if (!Memory::Virtual().Check(Frame)) + { + EHPrint("Invalid frame pointer: %p\n", Frame); + return; + } + #if defined(__amd64__) struct StackFrame *frames = (struct StackFrame *)Frame->rbp; // (struct StackFrame *)__builtin_frame_address(0); + if (!Memory::Virtual().Check((void *)Frame->rbp)) #elif defined(__i386__) struct StackFrame *frames = (struct StackFrame *)Frame->ebp; // (struct StackFrame *)__builtin_frame_address(0); + if (!Memory::Virtual().Check((void *)Frame->ebp)) #elif defined(__aarch64__) #endif + { + EHPrint("Invalid rbp pointer: %p\n", Frame->rbp); + return; + } + + if (!Memory::Virtual().Check(SymHandle)) + { + EHPrint("Invalid symbol handle: %p\n", SymHandle); + return; + } + debug("\nStack tracing... %p %d %p %d", Frame, Count, frames, Kernel); EHPrint("\e7981FC\nStack Trace:\n"); if (!frames || !frames->rip || !frames->rbp)