[lxc-devel] [lxc/master] execute: skip lxc-init logging when unprivileged

brauner on Github lxc-bot at linuxcontainers.org
Thu Aug 23 13:49:26 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 602 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180823/5b63feb9/attachment.bin>
-------------- next part --------------
From a35036ca3ab5d58ada11d74a0ccabb83972e54c9 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Thu, 23 Aug 2018 15:46:12 +0200
Subject: [PATCH] execute: skip lxc-init logging when unprivileged

Unprivileged app containers will not be able to open the passed in
/proc/1/fd/<idx> log path and will thus currently fail completely as soon as
any log level or log file is passed.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
Reported-by: Mrinal Dhillon <mdhillon at juniper.net>
---
 src/lxc/execute.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/lxc/execute.c b/src/lxc/execute.c
index d01df6b2e..43130be61 100644
--- a/src/lxc/execute.c
+++ b/src/lxc/execute.c
@@ -43,6 +43,7 @@ static int execute_start(struct lxc_handler *handler, void* data)
 	int argc = 0, i = 0, logfd = -1;
 	struct execute_args *my_args = data;
 	char logfile[LXC_PROC_PID_FD_LEN];
+	bool is_privileged = lxc_list_empty(&handler->conf->id_map);
 
 	while (my_args->argv[argc++]);
 
@@ -51,11 +52,13 @@ static int execute_start(struct lxc_handler *handler, void* data)
 	if (my_args->quiet)
 		argc_add++;
 
-	if (!handler->conf->rootfs.path)
-		argc_add += 2;
+	if (is_privileged) {
+		if (!handler->conf->rootfs.path)
+			argc_add += 2;
 
-	if (lxc_log_has_valid_level())
-		argc_add += 2;
+		if (lxc_log_has_valid_level())
+			argc_add += 2;
+	}
 
 	if (current_config->logfd != -1 || lxc_log_fd != -1)
 		argc_add += 2;
@@ -79,7 +82,7 @@ static int execute_start(struct lxc_handler *handler, void* data)
 		argv[i++] = (char *)lxc_log_priority_to_string(lxc_log_get_level());
 	}
 
-	if (current_config->logfd != -1 || lxc_log_fd != -1) {
+	if (is_privileged && (current_config->logfd != -1 || lxc_log_fd != -1)) {
 		int ret;
 		int to_dup = current_config->logfd;
 


More information about the lxc-devel mailing list