summaryrefslogtreecommitdiffstats
path: root/libmount
diff options
context:
space:
mode:
authorKarel Zak2018-06-11 16:06:17 +0200
committerKarel Zak2018-06-11 16:06:17 +0200
commitde7ccabdfd2cf63324c9abddbc23dd71d4edd6b5 (patch)
tree7dab8632410c10245f0060acb22967f26477acad /libmount
parentumount: add support for namespaces (diff)
downloadkernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.tar.gz
kernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.tar.xz
kernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.zip
libmount: make errno usable after mnt_context_set_target_ns()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount')
-rw-r--r--libmount/src/context.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libmount/src/context.c b/libmount/src/context.c
index da315a1d2..fdaa233c1 100644
--- a/libmount/src/context.c
+++ b/libmount/src/context.c
@@ -2617,9 +2617,9 @@ static void close_ns(struct libmnt_ns *ns)
*/
int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path)
{
- int rc = 0;
-
+ int errsv = 0;
int tmp;
+
if (!cxt)
return -EINVAL;
@@ -2632,6 +2632,8 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path)
return 0;
}
+ errno = 0;
+
/* open original namespace */
if (cxt->ns_orig.fd == -1) {
cxt->ns_orig.fd = open("/proc/self/ns/mnt", O_RDONLY | O_CLOEXEC);
@@ -2649,7 +2651,7 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path)
DBG(CXT, ul_debugobj(cxt, "Trying whether namespace is valid"));
if (setns(tmp, CLONE_NEWNS)
|| setns(cxt->ns_orig.fd, CLONE_NEWNS)) {
- rc = -errno;
+ errsv = errno;
DBG(CXT, ul_debugobj(cxt, "setns(2) failed [errno=%d %m]", errno));
goto err;
}
@@ -2662,7 +2664,8 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path)
return 0;
err:
close(tmp);
- return rc;
+ errno = errsv;
+ return -errno;
}
/**