about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-06-05 12:21:40 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-06-05 12:21:40 +0200
commitfbb89dcf1084dd0fb7ecea8e6ff6fb2e7f3b15b4 (patch)
treeb0f14ba47c94db565f4f5180ddfb822bc5fb33d6 /src
parent736552a5599bff6dcb1b7b020ba2679814b83219 (diff)
downloadbox64-fbb89dcf1084dd0fb7ecea8e6ff6fb2e7f3b15b4.tar.gz
box64-fbb89dcf1084dd0fb7ecea8e6ff6fb2e7f3b15b4.zip
Added some failsafe on unwind
Diffstat (limited to 'src')
-rw-r--r--src/elfs/elfdwarf_private.c4
-rwxr-xr-xsrc/elfs/elfloader.c2
-rwxr-xr-xsrc/include/elfloader.h2
3 files changed, 6 insertions, 2 deletions
diff --git a/src/elfs/elfdwarf_private.c b/src/elfs/elfdwarf_private.c
index bae2b4ea..84ee71dd 100644
--- a/src/elfs/elfdwarf_private.c
+++ b/src/elfs/elfdwarf_private.c
@@ -108,6 +108,10 @@ uintptr_t get_parent_registers(dwarf_unwind_t *unwind, const elfheader_t *ehdr,
         *success = 0;
         return 0;
     }
+    if(!IsAddressInElfSpace(ehdr, ehdr->ehframehdr)) {
+        *success = 0;
+        return 0;
+    }
     unsigned char ehfh_version = *(unsigned char*)ehdr->ehframehdr;
     if (ehfh_version != 1) {
         *success = 0;
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 338a57ca..3bbd2206 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -1258,7 +1258,7 @@ uint32_t GetBaseSize(elfheader_t* h)
     return h->memsz;
 }
 
-int IsAddressInElfSpace(elfheader_t* h, uintptr_t addr)
+int IsAddressInElfSpace(const elfheader_t* h, uintptr_t addr)
 {
     if(!h)
         return 0;
diff --git a/src/include/elfloader.h b/src/include/elfloader.h
index 86efe061..2cb90df4 100755
--- a/src/include/elfloader.h
+++ b/src/include/elfloader.h
@@ -40,7 +40,7 @@ void RunDeferedElfInit(x64emu_t *emu);
 void* GetBaseAddress(elfheader_t* h);
 void* GetElfDelta(elfheader_t* h);
 uint32_t GetBaseSize(elfheader_t* h);
-int IsAddressInElfSpace(elfheader_t* h, uintptr_t addr);
+int IsAddressInElfSpace(const elfheader_t* h, uintptr_t addr);
 elfheader_t* FindElfAddress(box64context_t *context, uintptr_t addr);
 const char* FindNearestSymbolName(elfheader_t* h, void* p, uintptr_t* start, uint64_t* sz);
 int32_t GetTLSBase(elfheader_t* h);