From 9690193ce08854c56663bcbbe7da4c720c78be07 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Tue, 20 Oct 2020 22:26:44 +0200 Subject: [PATCH] memlock: allocate at most halve of rlimit stack Touch of stack allocation validated given size with rlimit and if the reserved_stack was above rlimit, its been completely ignored - now we will always touch stack upto rlimit/2 size. --- lib/mm/memlock.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c index 7eee399b4..b1e5eb91b 100644 --- a/lib/mm/memlock.c +++ b/lib/mm/memlock.c @@ -167,10 +167,13 @@ static void _allocate_memory(void) char *areas[max_areas]; /* Check if we could preallocate requested stack */ - if ((getrlimit (RLIMIT_STACK, &limit) == 0) && - ((_size_stack * 2) < limit.rlim_cur) && - ((stack_mem = alloca(_size_stack)))) - _touch_memory(stack_mem, _size_stack); + if (getrlimit(RLIMIT_STACK, &limit) == 0) { + limit.rlim_cur /= 2; + if (_size_stack > limit.rlim_cur) + _size_stack = limit.rlim_cur; + if ((stack_mem = alloca(_size_stack))) + _touch_memory(stack_mem, _size_stack); + } /* FIXME else warn user setting got ignored */ /*