mirror of git://git.musl-libc.org/musl
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.
This commit is contained in:
parent
321f4fa906
commit
a6293285e9
|
@ -3,6 +3,7 @@
|
||||||
#include "stdio_impl.h"
|
#include "stdio_impl.h"
|
||||||
#include "libc.h"
|
#include "libc.h"
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static void dummy_0()
|
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) {
|
if (need < size/8 && need < 2048) {
|
||||||
tsd = stack - __pthread_tsd_size;
|
tsd = stack - __pthread_tsd_size;
|
||||||
stack = tsd - libc.tls_size;
|
stack = tsd - libc.tls_size;
|
||||||
|
memset(stack, 0, need);
|
||||||
} else {
|
} else {
|
||||||
size = ROUND(need);
|
size = ROUND(need);
|
||||||
guard = 0;
|
guard = 0;
|
||||||
|
|
Loading…
Reference in New Issue