]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
fix userns helper error handling 2149/head
authorTycho Andersen <tycho@tycho.ws>
Fri, 9 Feb 2018 13:26:31 +0000 (13:26 +0000)
committerTycho Andersen <tycho@tycho.ws>
Fri, 9 Feb 2018 13:26:31 +0000 (13:26 +0000)
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 <tycho@tycho.ws>
src/lxc/conf.c

index 1035c6fefeec701cae5a1da3966944e541730ed0..7d2efa209ad5288d77f1245da126c9b61a5a7854 100644 (file)
@@ -4003,14 +4003,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;
 
@@ -4178,6 +4178,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);
@@ -4189,10 +4193,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;
 }