]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
start: don't let data_sock users close the fd 1782/head
authorChristian Brauner <christian.brauner@ubuntu.com>
Mon, 4 Sep 2017 12:48:37 +0000 (14:48 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Mon, 4 Sep 2017 12:48:37 +0000 (14:48 +0200)
It is bad style to close an fd inside a function which didn't create it. Let's
rather close it transparently in start.c.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/conf.c
src/lxc/network.c
src/lxc/start.c

index 4e304830ee2e3805e5861a983b0a32dc7869ad9a..a7ae90a1daed7218e9e1751186027e495020c231 100644 (file)
@@ -3096,8 +3096,6 @@ static int lxc_send_ttys_to_parent(struct lxc_handler *handler)
        else
                TRACE("Sent %d ttys to parent", conf->tty);
 
-       close(handler->data_sock[0]);
-       close(handler->data_sock[1]);
        lxc_delete_tty(tty_info);
 
        return ret;
index d2247273c00f995fb2528c57009265c593d2f8bb..a7f054e795f95d7c050266e52caa86343c4c86fe 100644 (file)
@@ -3003,14 +3003,9 @@ int lxc_network_send_veth_names_to_child(struct lxc_handler *handler)
                        continue;
 
                ret = send(data_sock, netdev->name, IFNAMSIZ, 0);
-               if (ret < 0) {
-                       close(handler->data_sock[0]);
-                       close(handler->data_sock[1]);
+               if (ret < 0)
                        return -1;
-               } else {
-                       TRACE("Sent network device name \"%s\" to child",
-                             netdev->name);
-               }
+               TRACE("Sent network device name \"%s\" to child", netdev->name);
        }
 
        return 0;
@@ -3033,14 +3028,9 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler)
                        continue;
 
                ret = recv(data_sock, netdev->name, IFNAMSIZ, 0);
-               if (ret < 0) {
-                       close(handler->data_sock[0]);
-                       close(handler->data_sock[1]);
+               if (ret < 0)
                        return -1;
-               } else {
-                       TRACE("Received network device name \"%s\" from parent",
-                             netdev->name);
-               }
+               TRACE("Received network device name \"%s\" from parent", netdev->name);
        }
 
        return 0;
@@ -3062,23 +3052,18 @@ int lxc_network_send_name_and_ifindex_to_parent(struct lxc_handler *handler)
                /* Send network device name in the child's namespace to parent. */
                ret = send(data_sock, netdev->name, IFNAMSIZ, 0);
                if (ret < 0)
-                       goto on_error;
+                       return -1;
 
                /* Send network device ifindex in the child's namespace to
                 * parent.
                 */
                ret = send(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), 0);
                if (ret < 0)
-                       goto on_error;
+                       return -1;
        }
 
        TRACE("Sent network device names and ifindeces to parent");
        return 0;
-
-on_error:
-       close(handler->data_sock[0]);
-       close(handler->data_sock[1]);
-       return -1;
 }
 
 int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler)
@@ -3099,20 +3084,15 @@ int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler)
                 */
                ret = recv(data_sock, netdev->name, IFNAMSIZ, 0);
                if (ret < 0)
-                       goto on_error;
+                       return -1;
 
                /* Receive network device ifindex in the child's namespace to
                 * parent.
                 */
                ret = recv(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), 0);
                if (ret < 0)
-                       goto on_error;
+                       return -1;
        }
 
        return 0;
-
-on_error:
-       close(handler->data_sock[0]);
-       close(handler->data_sock[1]);
-       return -1;
 }
index c9af7a61fe208a1ad3248af62204cb2fb7e592e3..d4759bf9f5005d9c654966c65670139c9fee5a88 100644 (file)
@@ -912,7 +912,10 @@ static int do_start(void *data)
        }
 
        /* Setup the container, ip, names, utsname, ... */
-       if (lxc_setup(handler)) {
+       ret = lxc_setup(handler);
+       close(handler->data_sock[0]);
+       close(handler->data_sock[1]);
+       if (ret < 0) {
                ERROR("Failed to setup container \"%s\".", handler->name);
                goto out_warn_father;
        }