summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2020-10-20 22:26:44 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2020-10-20 22:26:44 +0200
commitfdec4cd3e6fef08b76b410136156dbd487dad8d0 (patch)
treef49083b3e3173fdbcb98e179c825ff7c953bb03b
parentbd272e3bcea38a12b2b9789cfb9b7d4a9a3d3574 (diff)
downloadlvm2-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.c11
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 */
/*