about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-03-17 16:10:09 +0100
committerptitSeb <sebastien.chev@gmail.com>2025-03-17 16:10:09 +0100
commit5b9951e1bd54a21e4c00aba314d8adf8b2ba0f22 (patch)
tree10c1afe1fffcc6f11bef3d2db0946bb694756453 /src/wrapped
parent6ce22546fe30eac6d8bbf40aef72f378e1654d50 (diff)
downloadbox64-5b9951e1bd54a21e4c00aba314d8adf8b2ba0f22.tar.gz
box64-5b9951e1bd54a21e4c00aba314d8adf8b2ba0f22.zip
[BOX32] Small refactor on memory managment
Diffstat (limited to 'src/wrapped')
-rw-r--r--src/wrapped/wrappedlibc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 5771eb4e..cd20c7d4 100644
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -3004,6 +3004,12 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int f
     if(BOX64ENV(dynarec_log)>=LOG_DEBUG) {printf_log(LOG_NONE, "mmap64(%p, 0x%zx, 0x%x, 0x%x, %d, %zd) ", addr, length, prot, flags, fd, offset);}
     void* ret = box_mmap(addr, length, prot, flags, fd, offset);
     int e = errno;
+    if(emu && box64_is32bits && ret!=MAP_FAILED && ((ret>(void*)0xc0000000) || (ret+length>(void*)0xc0000000))) {
+        // do not allow allocating memory that high for 32bits process
+        box_munmap(ret, length);
+        ret = MAP_FAILED;
+        e = EEXIST;
+    }
     if((ret==MAP_FAILED && (emu || box64_is32bits)) && (BOX64ENV(log)>=LOG_DEBUG || BOX64ENV(dynarec_log)>=LOG_DEBUG)) {printf_log(LOG_NONE, "%s (%d)\n", strerror(errno), errno);}
     if(((ret!=MAP_FAILED) && (emu || box64_is32bits)) && (BOX64ENV(log)>=LOG_DEBUG || BOX64ENV(dynarec_log)>=LOG_DEBUG)) {printf_log(LOG_NONE, "%p\n", ret);}
     #ifdef DYNAREC