Skip to content

Commit

Permalink
start: don't let data_sock users close the fd
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christian Brauner committed Sep 4, 2017
1 parent 3ffaab4 commit 270e9a2
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 31 deletions.
2 changes: 0 additions & 2 deletions src/lxc/conf.c
Expand Up @@ -3035,8 +3035,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;
Expand Down
36 changes: 8 additions & 28 deletions src/lxc/network.c
Expand Up @@ -2975,14 +2975,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;
Expand All @@ -3005,14 +3000,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;
Expand All @@ -3034,23 +3024,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)
Expand All @@ -3071,20 +3056,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;
}
5 changes: 4 additions & 1 deletion src/lxc/start.c
Expand Up @@ -988,7 +988,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;
}
Expand Down

0 comments on commit 270e9a2

Please sign in to comment.