#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);