]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
start: improve devpts fd sending 3556/head
authorChristian Brauner <christian.brauner@ubuntu.com>
Mon, 19 Oct 2020 09:38:17 +0000 (11:38 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Mon, 19 Oct 2020 10:18:54 +0000 (12:18 +0200)
Closes: #3549.
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/conf.c
src/lxc/start.c

index 5962009e3470f83de3cdb78f9cba603fde21de43..b8058ffdceffd57616513387efb27bb68e84905e 100644 (file)
@@ -1531,13 +1531,15 @@ static int lxc_setup_devpts(struct lxc_handler *handler)
 
        devpts_fd = openat(-EBADF, "/dev/pts", O_CLOEXEC | O_DIRECTORY | O_PATH | O_NOFOLLOW);
        if (devpts_fd < 0) {
+               devpts_fd = -EBADF;
                TRACE("Failed to create detached devpts mount");
-               ret = lxc_abstract_unix_send_fds(sock, NULL, 0, NULL, 0);
+               ret = lxc_abstract_unix_send_fds(sock, NULL, 0, &devpts_fd, sizeof(int));
        } else {
                ret = lxc_abstract_unix_send_fds(sock, &devpts_fd, 1, NULL, 0);
        }
        if (ret < 0)
                return log_error_errno(-1, errno, "Failed to send devpts fd to parent");
+       TRACE("Sent devpts file descriptor %d to parent", devpts_fd);
 
        /* Remove any pre-existing /dev/ptmx file. */
        ret = remove("/dev/ptmx");
index 322debf00f2c2c5af8c833d7f32313c16b8528d8..7b29d40834833a1ae6996e03a64f027a2be7d90b 100644 (file)
@@ -1953,13 +1953,14 @@ static int lxc_spawn(struct lxc_handler *handler)
                }
        }
 
-       ret = lxc_abstract_unix_recv_fds(data_sock1, &handler->conf->devpts_fd, 1, NULL, 0);
+       ret = lxc_abstract_unix_recv_fds(data_sock1, &handler->conf->devpts_fd, 1,
+                                        &handler->conf->devpts_fd,
+                                        sizeof(handler->conf->devpts_fd));
        if (ret < 0) {
                SYSERROR("Failed to receive devpts fd from child");
                goto out_delete_net;
        }
-       if (ret == 0)
-               handler->conf->devpts_fd = -EBADF;
+       TRACE("Received devpts file descriptor %d from child", handler->conf->devpts_fd);
 
        /* Now all networks are created, network devices are moved into place,
         * and the correct names and ifindices in the respective namespaces have