From 686dd5d1142359d73090cbc964131f256a540b4f Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 1 Nov 2017 21:58:24 +0100 Subject: [PATCH] conf: reap child in all cases Signed-off-by: Christian Brauner --- src/lxc/conf.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 2cea7c4a3..88a1cf4e2 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3672,7 +3672,7 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, struct lxc_list *it; struct id_map *map; char c = '1'; - int ret = -1; + int ret = -1, status = -1; struct lxc_list *idmap = NULL, *tmplist = NULL; struct id_map *container_root_uid = NULL, *container_root_gid = NULL, *host_uid_map = NULL, *host_gid_map = NULL; @@ -3842,10 +3842,11 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, goto on_error; } +on_error: /* Wait for child to finish. */ - ret = wait_for_pid(pid); + if (pid > 0) + status = wait_for_pid(pid); -on_error: if (idmap) lxc_free_idmap(idmap); if (container_root_uid) @@ -3861,6 +3862,9 @@ on_error: close(p[0]); close(p[1]); + if (status < 0) + ret = -1; + return ret; } @@ -4024,10 +4028,11 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, goto on_error; } +on_error: /* Wait for child to finish. */ - ret = wait_for_pid(pid); + if (pid > 0) + ret = wait_for_pid(pid); -on_error: if (idmap) lxc_free_idmap(idmap); if (host_uid_map && (host_uid_map != container_root_uid)) -- 2.47.2