about summary refs log tree commit diff stats
path: root/src/elfs
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/elfs
parent736552a5599bff6dcb1b7b020ba2679814b83219 (diff)
downloadbox64-fbb89dcf1084dd0fb7ecea8e6ff6fb2e7f3b15b4.tar.gz
box64-fbb89dcf1084dd0fb7ecea8e6ff6fb2e7f3b15b4.zip
Added some failsafe on unwind
Diffstat (limited to 'src/elfs')
-rw-r--r--src/elfs/elfdwarf_private.c4
-rwxr-xr-xsrc/elfs/elfloader.c2
2 files changed, 5 insertions, 1 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;