make new TLS setup block even implementation-internals signals
this is needed to ensure async-cancel-safety, i.e. to make it safe to access TLS objects when async cancellation is enabled. otherwise, if cancellation were acter upon after the atomic fetch/add but before the thread saved the obtained memory, another access to the same TLS in the cancellation handler could end up performing the atomic fetch/add again, consuming more memory than is actually available and overflowing into other objects on the heap.
This commit is contained in:
parent
92e1cd9b0b
commit
00902c7384
1 changed files with 1 additions and 2 deletions
|
|
@ -730,8 +730,7 @@ void *__tls_get_addr(size_t *v)
|
|||
|
||||
/* Block signals to make accessing new TLS async-signal-safe */
|
||||
sigset_t set;
|
||||
sigfillset(&set);
|
||||
pthread_sigmask(SIG_BLOCK, &set, &set);
|
||||
pthread_sigmask(SIG_BLOCK, SIGALL_SET, &set);
|
||||
if (self->dtv && v[0]<=(size_t)self->dtv[0] && self->dtv[v[0]]) {
|
||||
pthread_sigmask(SIG_SETMASK, &set, 0);
|
||||
return (char *)self->dtv[v[0]]+v[1];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue