diff options
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/threads.c | 6 | ||||
| -rwxr-xr-x | src/libtools/threads32.c | 8 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/libtools/threads.c b/src/libtools/threads.c index aa0cbe08..71222eca 100644 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -202,7 +202,7 @@ x64emu_t* thread_get_emu() else stack = InternalMmap(NULL, stacksize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, -1, 0); if(stack!=MAP_FAILED) - setProtection((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); + setProtection_stack((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); x64emu_t *emu = NewX64Emu(my_context, my_context->exit_bridge, (uintptr_t)stack, stacksize, 1); SetupX64Emu(emu, NULL); thread_set_emu(emu); @@ -525,7 +525,7 @@ EXPORT int my_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_rou } else { stack = InternalMmap(NULL, stacksize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, -1, 0); if(stack!=MAP_FAILED) - setProtection((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); + setProtection_stack((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); own = 1; } @@ -554,7 +554,7 @@ void* my_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet int stacksize = (ssize)?ssize:(2*1024*1024); //default stack size is 2Mo void* stack = InternalMmap(NULL, stacksize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, -1, 0); if(stack!=MAP_FAILED) - setProtection((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); + setProtection_stack((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); emuthread_t *et = (emuthread_t*)box_calloc(1, sizeof(emuthread_t)); x64emu_t *emuthread = NewX64Emu(emu->context, (uintptr_t)f, (uintptr_t)stack, stacksize, 1); SetupX64Emu(emuthread, emu ); diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c index 92e31240..318db0d2 100755 --- a/src/libtools/threads32.c +++ b/src/libtools/threads32.c @@ -206,12 +206,16 @@ EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_r } if(!stack) { //stack = malloc(stacksize); - stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_32BIT, -1, 0); + stack = box_mmap(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_32BIT, -1, 0); + setProtection_stack((uintptr_t)stack, stacksize, PROT_READ|PROT_WRITE); own = 1; } if((uintptr_t)stack>=0x100000000LL) { - if(own) munmap(stack, stacksize); + if(own) { + box_munmap(stack, stacksize); + freeProtection((uintptr_t)stack, stacksize); + } return EAGAIN; } |