diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/env/__stack_chk_fail.c | 2 | ||||
| -rw-r--r-- | src/internal/pthread_impl.h | 7 | ||||
| -rw-r--r-- | src/thread/pthread_create.c | 2 | 
3 files changed, 8 insertions, 3 deletions
| diff --git a/src/env/__stack_chk_fail.c b/src/env/__stack_chk_fail.c index 1b6a9f82..47784c62 100644 --- a/src/env/__stack_chk_fail.c +++ b/src/env/__stack_chk_fail.c @@ -9,7 +9,7 @@ void __init_ssp(void *entropy)  	if (entropy) memcpy(&__stack_chk_guard, entropy, sizeof(uintptr_t));  	else __stack_chk_guard = (uintptr_t)&__stack_chk_guard * 1103515245; -	__pthread_self()->canary = __stack_chk_guard; +	__pthread_self()->CANARY = __stack_chk_guard;  }  void __stack_chk_fail(void) diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h index 56877b3a..e29f9c82 100644 --- a/src/internal/pthread_impl.h +++ b/src/internal/pthread_impl.h @@ -16,7 +16,7 @@ struct pthread {  	struct pthread *self;  	void **dtv, *unused1, *unused2;  	uintptr_t sysinfo; -	uintptr_t canary; +	uintptr_t canary, canary2;  	pid_t tid, pid;  	int tsd_used, errno_val;  	volatile int cancel, canceldisable, cancelasync; @@ -47,6 +47,7 @@ struct pthread {  	char *dlerror_buf;  	int dlerror_flag;  	void *stdio_locks; +	uintptr_t canary_at_end;  	void **dtv_copy;  }; @@ -89,6 +90,10 @@ struct __timer {  #include "pthread_arch.h" +#ifndef CANARY +#define CANARY canary +#endif +  #define SIGTIMER 32  #define SIGCANCEL 33  #define SIGSYNCCALL 34 diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index d7c0323a..4eb8b888 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -272,7 +272,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att  	}  	new->robust_list.head = &new->robust_list.head;  	new->unblock_cancel = self->cancel; -	new->canary = self->canary; +	new->CANARY = self->CANARY;  	a_inc(&libc.threads_minus_1);  	ret = __clone((c11 ? start_c11 : start), stack, flags, new, &new->tid, TP_ADJ(new), &new->tid); | 
