[PATCH] nptl: Don't madvise user provided stack

Szabolcs Nagy szabolcs.nagy@arm.com
Wed Jun 24 10:41:24 GMT 2020


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

---

Note: the arm64 MTE linux ABI is still under discussion, but
for MADV_DONTNEED the current behaviour seemed most useful.
this behaviour is mainly problematic when madivse is used on
memory that's allocated and owned by somebody else which is
not expected to be common. (MADV_FREE and MADV_WIPEONFORK
has similar issues.)
---
 nptl/pthread_create.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 35a9927cf2..6d6ab88960 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))
     {
-- 
2.17.1



More information about the Libc-alpha mailing list