From: Tycho Andersen Date: Fri, 9 Feb 2018 13:26:31 +0000 (+0000) Subject: fix userns helper error handling X-Git-Tag: lxc-2.0.10~339 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a05c7bac914a20ffbc5a9c543dca90ec22600209;p=thirdparty%2Flxc.git fix userns helper error handling In both of these cases if there is actually an error, we won't close the pipe and the api call will hang. Instead, let's be sure to close the pipe before waiting, so that it doesn't hang. Signed-off-by: Tycho Andersen --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 640e37095..2e66b019a 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3796,14 +3796,14 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, } on_error: - /* Wait for child to finish. */ - if (pid > 0) - status = wait_for_pid(pid); - if (p[0] != -1) close(p[0]); close(p[1]); + /* Wait for child to finish. */ + if (pid > 0) + status = wait_for_pid(pid); + if (status < 0) ret = -1; @@ -3971,6 +3971,10 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, } on_error: + if (p[0] != -1) + close(p[0]); + close(p[1]); + /* Wait for child to finish. */ if (pid > 0) ret = wait_for_pid(pid); @@ -3982,10 +3986,6 @@ on_error: if (host_gid_map && (host_gid_map != container_root_gid)) free(host_gid_map); - if (p[0] != -1) - close(p[0]); - close(p[1]); - return ret; }