diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 48c4b4ecc..253331160 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3213,8 +3213,15 @@ static int lxc_execute_bind_init(struct lxc_handler *handler) /* If init exists in the container, don't bind mount a static one */ p = choose_init(conf->rootfs.mount); if (p) { - free(p); - return 0; + char *old = p; + + p = strdup(old + strlen(conf->rootfs.mount)); + free(old); + if (!p) + return -ENOMEM; + + INFO("Found existing init at \"%s\"", p); + goto out; } ret = snprintf(path, PATH_MAX, SBINDIR "/init.lxc.static"); @@ -3247,9 +3254,10 @@ static int lxc_execute_bind_init(struct lxc_handler *handler) p = strdup(destpath + strlen(conf->rootfs.mount)); if (!p) return -ENOMEM; - ((struct execute_args *)handler->data)->init_path = p; INFO("Bind mounted lxc.init.static into container at \"%s\"", path); +out: + ((struct execute_args *)handler->data)->init_path = p; return 0; } diff --git a/src/lxc/execute.c b/src/lxc/execute.c index 79a97cf88..b436b6a3f 100644 --- a/src/lxc/execute.c +++ b/src/lxc/execute.c @@ -57,12 +57,19 @@ static int execute_start(struct lxc_handler *handler, void* data) if (lxc_log_has_valid_level()) argc_add += 2; - argv = malloc((argc + argc_add) * sizeof(*argv)); - if (!argv) - goto out1; + if (current_config->logfd != -1 || lxc_log_fd != -1) + argc_add += 2; - if (!my_args->init_path) + argv = malloc((argc + argc_add) * sizeof(*argv)); + if (!argv) { + SYSERROR("Allocating init args failed"); + goto out1; + } + + if (!my_args->init_path) { + ERROR("Init path missing"); goto out2; + } argv[i++] = my_args->init_path; @@ -139,6 +146,7 @@ int lxc_execute(const char *name, char *const argv[], int quiet, { struct execute_args args = {.argv = argv, .quiet = quiet}; + TRACE("Doing lxc_execute"); handler->conf->is_execute = 1; return __lxc_start(name, handler, &execute_start_ops, &args, lxcpath, backgrounded, error_num); diff --git a/src/lxc/start.c b/src/lxc/start.c index d7f079979..ce5cb3366 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1971,6 +1971,7 @@ int lxc_start(const char *name, char *const argv[], struct lxc_handler *handler, .argv = argv, }; + TRACE("Doing lxc_start"); return __lxc_start(name, handler, &start_ops, &start_arg, lxcpath, backgrounded, error_num); }