about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-01 09:23:46 +0200
committerGitHub <noreply@github.com>2022-07-01 09:23:46 +0200
commitb3919fe8197bb2882ba2cda0d8487a8d82ce5cf3 (patch)
treebcb2a66e73c7e0fed52e941179bc8a2059996881 /src
parent9328ba79d19c07faa2634ea9bc06e0d400c58edd (diff)
parent9eeaaf0a03b494f0e44ae3c2c2d4a605e4a49638 (diff)
downloadbox64-b3919fe8197bb2882ba2cda0d8487a8d82ce5cf3.tar.gz
box64-b3919fe8197bb2882ba2cda0d8487a8d82ce5cf3.zip
Merge pull request #336 from wannacu/main
Align address when call mprotect
Diffstat (limited to 'src')
-rwxr-xr-xsrc/elfs/elfloader.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 8b46ad3c..07328726 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -354,8 +354,9 @@ int ReloadElfMemory(FILE* f, box64context_t* context, elfheader_t* head)
             #ifdef DYNAREC
             cleanDBFromAddressRange((uintptr_t)dest, e->p_memsz, 0);
             #endif
-            mprotect(dest, e->p_memsz, PROT_READ | PROT_WRITE | PROT_EXEC);
-            setProtection((uintptr_t)dest, e->p_memsz, PROT_READ | PROT_WRITE | PROT_EXEC);
+            uint32_t page_offset = (uintptr_t)dest & (box64_pagesize - 1);
+            mprotect(dest - page_offset, e->p_memsz + page_offset, PROT_READ | PROT_WRITE | PROT_EXEC);
+            setProtection((uintptr_t)dest - page_offset, e->p_memsz + page_offset, PROT_READ | PROT_WRITE | PROT_EXEC);
             if(e->p_filesz) {
                 ssize_t r = -1;
                 if((r=fread(dest, e->p_filesz, 1, f))!=1) {