Commit 3026aae6 by Wolfgang Bumiller Committed by Stéphane Graber

conf, attach: save errno across call to close

Save errno across some calls to close() since it can be interrupted. Signed-off-by: 's avatarWolfgang Bumiller <wry.git@bumiller.com>
parent bc84967f
...@@ -941,7 +941,7 @@ int lxc_attach(const char* name, const char* lxcpath, lxc_attach_exec_t exec_fun ...@@ -941,7 +941,7 @@ int lxc_attach(const char* name, const char* lxcpath, lxc_attach_exec_t exec_fun
/* Open LSM fd and send it to child. */ /* Open LSM fd and send it to child. */
if ((options->namespaces & CLONE_NEWNS) && (options->attach_flags & LXC_ATTACH_LSM) && init_ctx->lsm_label) { if ((options->namespaces & CLONE_NEWNS) && (options->attach_flags & LXC_ATTACH_LSM) && init_ctx->lsm_label) {
int on_exec; int on_exec, saved_errno;
int labelfd = -1; int labelfd = -1;
on_exec = options->attach_flags & LXC_ATTACH_LSM_EXEC ? 1 : 0; on_exec = options->attach_flags & LXC_ATTACH_LSM_EXEC ? 1 : 0;
/* Open fd for the LSM security module. */ /* Open fd for the LSM security module. */
...@@ -951,10 +951,10 @@ int lxc_attach(const char* name, const char* lxcpath, lxc_attach_exec_t exec_fun ...@@ -951,10 +951,10 @@ int lxc_attach(const char* name, const char* lxcpath, lxc_attach_exec_t exec_fun
/* Send child fd of the LSM security module to write to. */ /* Send child fd of the LSM security module to write to. */
ret = lxc_abstract_unix_send_fd(ipc_sockets[0], labelfd, NULL, 0); ret = lxc_abstract_unix_send_fd(ipc_sockets[0], labelfd, NULL, 0);
saved_errno = errno;
close(labelfd); close(labelfd);
if (ret <= 0) { if (ret <= 0) {
ERROR("Error using IPC to send child LSM fd (4): %s.", ERROR("Intended to send file descriptor %d: %s.", labelfd, strerror(saved_errno));
strerror(errno));
goto cleanup_error; goto cleanup_error;
} }
} }
......
...@@ -2513,7 +2513,10 @@ static int setup_mount_entries(const struct lxc_rootfs *rootfs, struct lxc_list ...@@ -2513,7 +2513,10 @@ static int setup_mount_entries(const struct lxc_rootfs *rootfs, struct lxc_list
file = tmpfile(); file = tmpfile();
if (!file) { if (!file) {
ERROR("Could not create temporary file: %s.", strerror(errno)); int saved_errno = errno;
if (fd != -1)
close(fd);
ERROR("Could not create mount entry file: %s.", strerror(saved_errno));
return -1; return -1;
} }
...@@ -2655,7 +2658,7 @@ static int setup_hw_addr(char *hwaddr, const char *ifname) ...@@ -2655,7 +2658,7 @@ static int setup_hw_addr(char *hwaddr, const char *ifname)
{ {
struct sockaddr sockaddr; struct sockaddr sockaddr;
struct ifreq ifr; struct ifreq ifr;
int ret, fd; int ret, fd, saved_errno;
ret = lxc_convert_mac(hwaddr, &sockaddr); ret = lxc_convert_mac(hwaddr, &sockaddr);
if (ret) { if (ret) {
...@@ -2675,9 +2678,10 @@ static int setup_hw_addr(char *hwaddr, const char *ifname) ...@@ -2675,9 +2678,10 @@ static int setup_hw_addr(char *hwaddr, const char *ifname)
} }
ret = ioctl(fd, SIOCSIFHWADDR, &ifr); ret = ioctl(fd, SIOCSIFHWADDR, &ifr);
saved_errno = errno;
close(fd); close(fd);
if (ret) if (ret)
ERROR("ioctl failure : %s", strerror(errno)); ERROR("ioctl failure : %s", strerror(saved_errno));
DEBUG("mac address '%s' on '%s' has been setup", hwaddr, ifr.ifr_name); DEBUG("mac address '%s' on '%s' has been setup", hwaddr, ifr.ifr_name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment