summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmount/src/context.c11
-rw-r--r--sys-utils/mount.c7
-rw-r--r--sys-utils/umount.c8
3 files changed, 10 insertions, 16 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;
}
/**
diff --git a/sys-utils/mount.c b/sys-utils/mount.c
index a4523d731..3811379b4 100644
--- a/sys-utils/mount.c
+++ b/sys-utils/mount.c
@@ -692,14 +692,9 @@ int main(int argc, char **argv)
append_option(cxt, "rbind");
break;
case 'N':
- {
- int tmp;
- if ((tmp = mnt_context_set_target_ns(cxt, optarg))) {
- errno = -tmp;
+ if (mnt_context_set_target_ns(cxt, optarg))
err(MNT_EX_SYSERR, _("failed to set target namespace"));
- }
break;
- }
case MOUNT_OPT_SHARED:
append_option(cxt, "shared");
propa = 1;
diff --git a/sys-utils/umount.c b/sys-utils/umount.c
index 3fc1ae647..629c65df8 100644
--- a/sys-utils/umount.c
+++ b/sys-utils/umount.c
@@ -511,13 +511,9 @@ int main(int argc, char **argv)
print_version();
break;
case 'N':
- {
- int tmp;
- if ((tmp = mnt_context_set_target_ns(cxt, optarg))) {
- errno = -tmp;
+ if (mnt_context_set_target_ns(cxt, optarg))
err(MNT_EX_SYSERR, _("failed to set target namespace"));
- }
- break;
+ break;
}
default:
errtryhelp(MNT_EX_USAGE);