diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2012-06-22 11:15:14 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2012-06-22 13:48:04 +0200 |
commit | 2539769356cd73ffe6ff7abd9f9c3208ff24ee8b (patch) | |
tree | e055482b8c5bcd6a93c38714ddba6f3c064c37ae /lib | |
parent | 192fa11dab177027ad349363b39ff6435524b23d (diff) | |
download | lvm2-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.c | 6 |
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))) |