diff --git a/src/lxc/namespace.c b/src/lxc/namespace.c index 59fba412d..bc14fb52c 100644 --- a/src/lxc/namespace.c +++ b/src/lxc/namespace.c @@ -56,19 +56,23 @@ static int do_clone(void *arg) #define __LXC_STACK_SIZE 4096 pid_t lxc_clone(int (*fn)(void *), void *arg, int flags, int *pidfd) { - size_t stack_size; pid_t ret; struct clone_arg clone_arg = { .fn = fn, .arg = arg, }; - char *stack[__LXC_STACK_SIZE] = {0}; - stack_size = __LXC_STACK_SIZE; + void *stack; + + stack = malloc(__LXC_STACK_SIZE); + if (!stack) { + SYSERROR("Failed to allocate clone stack"); + return -ENOMEM; + } #ifdef __ia64__ - ret = __clone2(do_clone, stack, stack_size, flags | SIGCHLD, &clone_arg, pidfd); + ret = __clone2(fn, stack, __LXC_STACK_SIZE, flags | SIGCHLD, &clone_arg, pidfd); #else - ret = clone(do_clone, stack + stack_size, flags | SIGCHLD, &clone_arg, pidfd); + ret = clone(fn, stack + __LXC_STACK_SIZE, flags | SIGCHLD, &clone_arg, pidfd); #endif if (ret < 0) SYSERROR("Failed to clone (%#x)", flags);