From 4631c2372a40c8f9e4b6da863a456c8de8b448a6 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Wed, 24 Mar 2021 01:36:20 +0100 Subject: stdlib: Fix BZ #26241 testcase on GNU/Hurd GNU/Hurd's readlink system call is partly implemented in userspace, which also allocates a buffer on the stack for the result, and thus needs one more path. Reviewed-by: Adhemerval Zanella --- stdlib/tst-canon-bz26341.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'stdlib') diff --git a/stdlib/tst-canon-bz26341.c b/stdlib/tst-canon-bz26341.c index 6d054596b5..acb0fd4ec3 100644 --- a/stdlib/tst-canon-bz26341.c +++ b/stdlib/tst-canon-bz26341.c @@ -67,15 +67,16 @@ do_realpath (void *arg) for each symlink in the path, leading to MAXSYMLINKS times PATH_MAX maximum stack usage. This stack allocations tries fill the thread allocated stack minus - both the resolved path (plus some slack) and the realpath (plus some - slack). + the resolved path (plus some slack), the realpath (plus some + slack), and the system call usage (plus some slack). If realpath uses more than 2 * PATH_MAX plus some slack it will trigger a stackoverflow. */ + const size_t syscall_usage = 1 * PATH_MAX + 1024; const size_t realpath_usage = 2 * PATH_MAX + 1024; const size_t thread_usage = 1 * PATH_MAX + 1024; size_t stack_size = support_small_thread_stack_size () - - realpath_usage - thread_usage; + - syscall_usage - realpath_usage - thread_usage; char stack[stack_size]; char *resolved = stack + stack_size - thread_usage + 1024; -- cgit 1.4.1