From 321614a5da167f20bbafaaa1d2b3e8e365da953d Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Fri, 4 May 2018 11:59:27 +0200 Subject: [PATCH] execute: use static buffer Signed-off-by: Christian Brauner --- src/lxc/execute.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/lxc/execute.c b/src/lxc/execute.c index 9fe1af0eb..0f789e1b2 100644 --- a/src/lxc/execute.c +++ b/src/lxc/execute.c @@ -38,10 +38,11 @@ lxc_log_define(lxc_execute, lxc_start); static int execute_start(struct lxc_handler *handler, void* data) { - int j, i = 0, log = -1; + int argc_add, j; + char **argv; + int argc = 0, i = 0, logfd = -1; struct execute_args *my_args = data; - char **argv, *logfd; - int argc = 0, argc_add; + char logfile[LXC_PROC_PID_FD_LEN]; while (my_args->argv[argc++]); @@ -49,8 +50,10 @@ static int execute_start(struct lxc_handler *handler, void* data) argc_add = 5; if (my_args->quiet) argc_add++; + if (!handler->conf->rootfs.path) argc_add += 2; + if (lxc_log_has_valid_level()) argc_add += 2; @@ -72,24 +75,24 @@ static int execute_start(struct lxc_handler *handler, void* data) } if (current_config->logfd != -1 || lxc_log_fd != -1) { + int ret; int to_dup = current_config->logfd; if (current_config->logfd == -1) to_dup = lxc_log_fd; - log = dup(to_dup); - if (log < 0) { - SYSERROR("dup of log fd failed"); + logfd = dup(to_dup); + if (logfd < 0) { + SYSERROR("Failed to duplicate log file descriptor"); goto out2; } - if (asprintf(&logfd, "/proc/1/fd/%d", log) < 0) { - ERROR("Couldn't allocate memory for log string"); + ret = snprintf(logfile, sizeof(logfile), "/proc/1/fd/%d", logfd); + if (ret < 0 || (size_t)ret >= sizeof(logfile)) goto out3; - } argv[i++] = "-o"; - argv[i++] = logfd; + argv[i++] = logfile; } if (my_args->quiet) @@ -110,9 +113,8 @@ static int execute_start(struct lxc_handler *handler, void* data) execvp(argv[0], argv); SYSERROR("Failed to exec %s", argv[0]); - free(logfd); out3: - close(log); + close(logfd); out2: free(argv); out1: