overhaul SSP support to use a real canary
pthread structure has been adjusted to match the glibc/GCC abi for where the canary is stored on i386 and x86_64. it will need variants for other archs to provide the added security of the canary's entropy, but even without that it still works as well as the old "minimal" ssp support. eventually such changes will be made anyway, since they are also needed for GCC/C11 thread-local storage support (not yet implemented). care is taken not to attempt initializing the thread pointer unless the program actually uses SSP (by reference to __stack_chk_fail).
This commit is contained in:
parent
e765239f33
commit
58aa5f45ed
6 changed files with 25 additions and 12 deletions
|
|
@ -120,6 +120,7 @@ int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(vo
|
|||
new->tsd = (void *)tsd;
|
||||
if (attr) new->detached = attr->_a_detach;
|
||||
new->unblock_cancel = self->cancel;
|
||||
new->canary = self->canary ^ (uintptr_t)&new;
|
||||
stack = (void *)new;
|
||||
|
||||
__synccall_lock();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue