summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-06-22 11:15:14 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2012-06-22 13:48:04 +0200
commit2539769356cd73ffe6ff7abd9f9c3208ff24ee8b (patch)
treee055482b8c5bcd6a93c38714ddba6f3c064c37ae /lib
parent192fa11dab177027ad349363b39ff6435524b23d (diff)
downloadlvm2-2539769356cd73ffe6ff7abd9f9c3208ff24ee8b.tar.gz
lvm2-2539769356cd73ffe6ff7abd9f9c3208ff24ee8b.tar.xz
lvm2-2539769356cd73ffe6ff7abd9f9c3208ff24ee8b.zip
fix: limit preallocate stack size
If the user would set bigger reserved stack size then what is allowed in resources (ulimit -s), then he would get coredump So avoid coredump and ignore creation of such large stack size (lvm should work properly, with just 64KB, so the option could be eliminated).
Diffstat (limited to 'lib')
-rw-r--r--lib/mm/memlock.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c
index 17dee1c9..dfc0d42b 100644
--- a/lib/mm/memlock.c
+++ b/lib/mm/memlock.c
@@ -124,8 +124,12 @@ static void _touch_memory(void *mem, size_t size)
static void _allocate_memory(void)
{
void *stack_mem, *temp_malloc_mem;
+ struct rlimit limit;
- if ((stack_mem = alloca(_size_stack)))
+ /* 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 ((temp_malloc_mem = malloc(_size_malloc_tmp)))