about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtools')
-rw-r--r--src/libtools/threads.c6
-rwxr-xr-xsrc/libtools/threads32.c8
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;
 	}