diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2020-06-24 07:47:15 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2020-06-25 14:19:16 +0100 |
commit | 087942251f26d5fd5802b8d14e47d460263a0c4d (patch) | |
tree | 58df96511a0b52696ba666628506ba37f913abac /nptl | |
parent | f6b955e8ba4f0bcc7b9dafa64406d3b40edfa107 (diff) | |
download | glibc-087942251f26d5fd5802b8d14e47d460263a0c4d.zip glibc-087942251f26d5fd5802b8d14e47d460263a0c4d.tar.gz glibc-087942251f26d5fd5802b8d14e47d460263a0c4d.tar.bz2 |
nptl: Don't madvise user provided stack
User provided stack should not be released nor madvised at
thread exit because it's owned by the user.
If the memory is shared or file based then MADV_DONTNEED
can have unwanted effects. With memory tagging on aarch64
linux the tags are dropped and thus it may invalidate
pointers.
Tested on aarch64-linux-gnu with MTE, it fixes
FAIL: nptl/tst-stack3
FAIL: nptl/tst-stack3-mem
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/pthread_create.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 35a9927..6d6ab88 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -549,8 +549,9 @@ START_THREAD_DEFN } #endif - advise_stack_range (pd->stackblock, pd->stackblock_size, (uintptr_t) pd, - pd->guardsize); + if (!pd->user_stack) + advise_stack_range (pd->stackblock, pd->stackblock_size, (uintptr_t) pd, + pd->guardsize); if (__glibc_unlikely (pd->cancelhandling & SETXID_BITMASK)) { |