diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-07 09:52:23 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-07 09:52:23 +0100 |
| commit | 410f58b7c75c972457deb9c5a88edb3298942238 (patch) | |
| tree | 26bd7cc9525a158c72b0671b0f5753b4d7fa17c7 /src | |
| parent | fbecdad199a1b58506db5561eeb112b23dbf8152 (diff) | |
| download | box64-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.c | 14 |
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, |