about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-01-16 10:20:16 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-01-16 10:20:16 +0100
commite5649d90e7deb3e7388475d62f4174b4bd64063f (patch)
tree896e3b02944878922793473fa684e32047fd8e32 /src
parentd22e6f28a1a155737b57e7c6a3c1c29136bdb66d (diff)
downloadbox64-e5649d90e7deb3e7388475d62f4174b4bd64063f.tar.gz
box64-e5649d90e7deb3e7388475d62f4174b4bd64063f.zip
Round size to pagesize on the tracked memory
Diffstat (limited to 'src')
-rw-r--r--src/custommem.c5
-rw-r--r--src/elfs/elfloader.c2
-rw-r--r--src/include/custommem.h2
3 files changed, 7 insertions, 2 deletions
diff --git a/src/custommem.c b/src/custommem.c
index 77ea14f6..a389b32b 100644
--- a/src/custommem.c
+++ b/src/custommem.c
@@ -1217,6 +1217,7 @@ void updateProtection(uintptr_t addr, size_t size, uint32_t prot)
 
 void setProtection(uintptr_t addr, size_t size, uint32_t prot)
 {
+    size = ALIGN(size);
     mutex_lock(&mutex_prot);
     addMapMem(mapallmem, addr, addr+size-1);
     uintptr_t cur = addr & ~(box64_pagesize-1);
@@ -1229,7 +1230,7 @@ void setProtection_mmap(uintptr_t addr, size_t size, uint32_t prot)
 {
     if(!size)
         return;
-    size = (size+box64_pagesize-1)&~(box64_pagesize-1); // round size
+    size = ALIGN(size);
     mutex_lock(&mutex_prot);
     addMapMem(mmapmem, addr, addr+size-1);
     mutex_unlock(&mutex_prot);
@@ -1244,6 +1245,7 @@ void setProtection_mmap(uintptr_t addr, size_t size, uint32_t prot)
 
 void setProtection_elf(uintptr_t addr, size_t size, uint32_t prot)
 {
+    size = ALIGN(size);
     if(prot)
         setProtection(addr, size, prot);
     else {
@@ -1308,6 +1310,7 @@ void loadProtectionFromMap()
 
 void freeProtection(uintptr_t addr, size_t size)
 {
+    size = ALIGN(size);
     dynarec_log(LOG_DEBUG, "freeProtection %p:%p\n", (void*)addr, (void*)(addr+size-1));
     mutex_lock(&mutex_prot);
     removeMapMem(mapallmem, addr, addr+size-1);
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 461fcb0d..39c83abc 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -175,7 +175,7 @@ const char* ElfPath(elfheader_t* head)
         return NULL;
     return head->path;
 }
-#define ALIGN(p) (((p)+box64_pagesize-1)&~(box64_pagesize-1))
+
 int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
 {
     uintptr_t offs = 0;
diff --git a/src/include/custommem.h b/src/include/custommem.h
index 38d63702..df1d652a 100644
--- a/src/include/custommem.h
+++ b/src/include/custommem.h
@@ -16,6 +16,8 @@ void customFree(void* p);
 #define krealloc    customRealloc
 #define kfree       customFree
 
+#define ALIGN(p) (((p)+box64_pagesize-1)&~(box64_pagesize-1))
+
 #ifdef DYNAREC
 typedef struct dynablock_s dynablock_t;
 // custom protection flag to mark Page that are Write protected for Dynarec purpose