diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2020-10-20 22:26:44 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2020-10-20 22:26:44 +0200 |
commit | fdec4cd3e6fef08b76b410136156dbd487dad8d0 (patch) | |
tree | f49083b3e3173fdbcb98e179c825ff7c953bb03b | |
parent | bd272e3bcea38a12b2b9789cfb9b7d4a9a3d3574 (diff) | |
download | lvm2-fdec4cd3e6fef08b76b410136156dbd487dad8d0.tar.gz |
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.
-rw-r--r-- | lib/mm/memlock.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c index 883795d28..0c05038fe 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 */ /* |