فهرست منبع

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.
Rich Felker 12 سال پیش
والد
کامیت
00902c7384
1فایلهای تغییر یافته به همراه1 افزوده شده و 2 حذف شده
  1. 1 2
      src/ldso/dynlink.c

+ 1 - 2
src/ldso/dynlink.c

@@ -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];