From 7729f8e519a1c15be85266e7fcc3fdc8ae74c7b8 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 4 Sep 2017 14:48:37 +0200 Subject: [PATCH] start: don't let data_sock users close the fd 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 --- src/lxc/conf.c | 2 -- src/lxc/network.c | 36 ++++++++---------------------------- src/lxc/start.c | 5 ++++- 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 4e304830ee..a7ae90a1da 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -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; diff --git a/src/lxc/network.c b/src/lxc/network.c index d2247273c0..a7f054e795 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -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; } diff --git a/src/lxc/start.c b/src/lxc/start.c index c9af7a61fe..d4759bf9f5 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -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; }