[lxc-devel] [lxc/master] fixes

brauner on Github lxc-bot at linuxcontainers.org
Thu Apr 9 12:31:33 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200409/d7b3bfed/attachment.bin>
-------------- next part --------------
From 46bc6f2a55dd483b396bc60b73f4e602abcc9b9f Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Thu, 9 Apr 2020 12:44:25 +0200
Subject: [PATCH 1/3] conf: tweak get_minimal_idmap()

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/lxc/conf.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 8d480b049a..4fe64770c5 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -3488,7 +3488,7 @@ static int lxc_free_idmap(struct lxc_list *id_map)
 {
 	struct lxc_list *it, *next;
 
-	lxc_list_for_each_safe (it, id_map, next) {
+	lxc_list_for_each_safe(it, id_map, next) {
 		lxc_list_del(it);
 		free(it->elem);
 		free(it);
@@ -3996,7 +3996,7 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf,
 	lxc_list_add_elem(tmplist, container_root_uid);
 	lxc_list_add_tail(idmap, tmplist);
 
-	if (host_uid_map && (host_uid_map != container_root_uid)) {
+	if (host_uid_map != container_root_uid) {
 		/* idmap will now keep track of that memory. */
 		move_ptr(container_root_uid);
 
@@ -4018,7 +4018,7 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf,
 	lxc_list_add_elem(tmplist, container_root_gid);
 	lxc_list_add_tail(idmap, tmplist);
 
-	if (host_gid_map && (host_gid_map != container_root_gid)) {
+	if (host_gid_map != container_root_gid) {
 		/* idmap will now keep track of that memory. */
 		move_ptr(container_root_gid);
 
@@ -4060,9 +4060,13 @@ int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), void *data,
 	call_cleaner(lxc_free_idmap) struct lxc_list *idmap = NULL;
 	int ret = -1, status = -1;
 	char c = '1';
+	struct userns_fn_data d = {
+	    .arg	= data,
+	    .fn		= fn,
+	    .fn_name	= fn_name,
+	};
 	pid_t pid;
 	int pipe_fds[2];
-	struct userns_fn_data d;
 
 	if (!conf)
 		return -EINVAL;
@@ -4075,9 +4079,6 @@ int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), void *data,
 	if (ret < 0)
 		return -errno;
 
-	d.fn		= fn;
-	d.fn_name	= fn_name;
-	d.arg		= data;
 	d.p[0]		= pipe_fds[0];
 	d.p[1]		= pipe_fds[1];
 

From c6ba8981f5a0fc69b84e2b35786f1264b7d5b334 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Thu, 9 Apr 2020 12:49:16 +0200
Subject: [PATCH 2/3] conf: use macros all around in lxc_map_ids()

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/lxc/conf.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 4fe64770c5..193df3327f 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -2679,19 +2679,10 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid)
 	struct id_map *map;
 	struct lxc_list *iterator;
 	enum idtype type;
-	/* strlen("new at idmap") = 9
-	 * +
-	 * strlen(" ") = 1
-	 * +
-	 * INTTYPE_TO_STRLEN(uint32_t)
-	 * +
-	 * strlen(" ") = 1
-	 *
-	 * We add some additional space to make sure that we really have
-	 * LXC_IDMAPLEN bytes available for our the {g,u]id mapping.
-	 */
 	int ret = 0, gidmap = 0, uidmap = 0;
-	char mapbuf[9 + 1 + INTTYPE_TO_STRLEN(uint32_t) + 1 + LXC_IDMAPLEN] = {0};
+	char mapbuf[STRLITERALLEN("new at idmap") + STRLITERALLEN(" ") +
+		    INTTYPE_TO_STRLEN(pid_t) + STRLITERALLEN(" ") +
+		    LXC_IDMAPLEN] = {0};
 	bool had_entry = false, use_shadow = false;
 	int hostuid, hostgid;
 

From 1758c195057c32476e0e42c5fb5cbfad836a060e Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Thu, 9 Apr 2020 14:30:31 +0200
Subject: [PATCH 3/3] conf: move_ptr() in all cases in mapped_hostid_add()

Closes #3366.
Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/lxc/conf.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 193df3327f..45acc71a91 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -3918,18 +3918,19 @@ static struct id_map *mapped_hostid_add(const struct lxc_conf *conf, uid_t id,
 
 	/* Reuse existing mapping. */
 	tmp = find_mapped_hostid_entry(conf, id, type);
-	if (tmp)
-		return memcpy(entry, tmp, sizeof(*entry));
-
-	/* Find new mapping. */
-	hostid_mapped = find_unmapped_nsid(conf, type);
-	if (hostid_mapped < 0)
-		return log_debug(NULL, "Failed to find free mapping for id %d", id);
-
-	entry->idtype = type;
-	entry->nsid = hostid_mapped;
-	entry->hostid = (unsigned long)id;
-	entry->range = 1;
+	if (tmp) {
+		memcpy(entry, tmp, sizeof(*entry));
+	} else {
+		/* Find new mapping. */
+		hostid_mapped = find_unmapped_nsid(conf, type);
+		if (hostid_mapped < 0)
+			return log_debug(NULL, "Failed to find free mapping for id %d", id);
+
+		entry->idtype = type;
+		entry->nsid = hostid_mapped;
+		entry->hostid = (unsigned long)id;
+		entry->range = 1;
+	}
 
 	return move_ptr(entry);
 }


More information about the lxc-devel mailing list