From: Rich Felker Date: Fri, 22 Aug 2014 18:05:10 +0000 (-0400) Subject: fix use of uninitialized memory with application-provided thread stacks X-Git-Tag: v1.1.5~56 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a6293285e930dbdb0eff47e29b513ca22537b1a2;p=oweals%2Fmusl.git fix use of uninitialized memory with application-provided thread stacks the subsequent code in pthread_create and the code which copies TLS initialization images to the new thread's TLS space assume that the memory provided to them is zero-initialized, which is true when it's obtained by pthread_create using mmap. however, when the caller provides a stack using pthread_attr_setstack, pthread_create cannot make any assumptions about the contents. simply zero-filling the relevant memory in this case is the simplest and safest fix. --- diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index c8c117b9..1601614a 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -3,6 +3,7 @@ #include "stdio_impl.h" #include "libc.h" #include +#include static void dummy_0() { @@ -175,6 +176,7 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp if (need < size/8 && need < 2048) { tsd = stack - __pthread_tsd_size; stack = tsd - libc.tls_size; + memset(stack, 0, need); } else { size = ROUND(need); guard = 0;