about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-11-07 09:52:23 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-11-07 09:52:23 +0100
commit410f58b7c75c972457deb9c5a88edb3298942238 (patch)
tree26bd7cc9525a158c72b0671b0f5753b4d7fa17c7 /src
parentfbecdad199a1b58506db5561eeb112b23dbf8152 (diff)
downloadbox64-410f58b7c75c972457deb9c5a88edb3298942238.tar.gz
box64-410f58b7c75c972457deb9c5a88edb3298942238.zip
[ELFLOADER] Another fix for elfloader memory managment (might help #1051)
Diffstat (limited to 'src')
-rw-r--r--src/elfs/elfloader.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 0e9feb75..570a1548 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -235,22 +235,20 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
             // check if alignment is correct
             uintptr_t balign = head->multiblocks[n].align-1;
             if(balign<(box64_pagesize-1)) balign = (box64_pagesize-1);
-            head->multiblocks[n].asize = e->p_memsz+(head->multiblocks[n].paddr&balign);
+            head->multiblocks[n].asize = e->p_memsz+(e->p_paddr&balign);
             int try_mmap = 1;
-            if(e->p_offset&balign)
+            if(e->p_offset&(box64_pagesize-1))
                 try_mmap = 0;
-            if(e->p_memsz-e->p_filesz>balign)
-                try_mmap = 0;
-            if(head->multiblocks[n].asize != head->multiblocks[n].size)
+            if(e->p_memsz-e->p_filesz>(box64_pagesize-1))
                 try_mmap = 0;
             if(!e->p_filesz)
                 try_mmap = 0;
             uint8_t prot = PROT_READ|PROT_WRITE|((e->p_flags & PF_X)?PROT_EXEC:0);
             if(try_mmap) {
-                printf_log(log_level, "Mmaping 0x%lx memory @%p for Elf \"%s\"\n", head->multiblocks[n].size, (void*)head->multiblocks[n].paddr, head->name);
+                printf_log(log_level, "Mmaping 0x%lx bytes @%p for Elf \"%s\"\n", head->multiblocks[n].size, (void*)head->multiblocks[n].paddr, head->name);
                 void* p = mmap64(
                     (void*)head->multiblocks[n].paddr, 
-                    head->multiblocks[n].asize, 
+                    head->multiblocks[n].size, 
                     prot,
                     MAP_PRIVATE|MAP_FIXED,
                     head->fileno,
@@ -267,7 +265,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
             }
             if(!try_mmap) {
                 uintptr_t paddr = head->multiblocks[n].paddr&~balign;
-                printf_log(log_level, "Allocating 0x%lx memory @%p for Elf \"%s\"\n", head->multiblocks[n].asize, (void*)paddr, head->name);
+                printf_log(log_level, "Allocating 0x%lx bytes @%p for Elf \"%s\"\n", head->multiblocks[n].asize, (void*)paddr, head->name);
                 void* p = mmap64(
                     (void*)paddr,
                     head->multiblocks[n].asize,