mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
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 <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
16b597807d
commit
4631c2372a
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user