diff options
-rw-r--r-- | libmount/src/context.c | 11 | ||||
-rw-r--r-- | sys-utils/mount.c | 7 | ||||
-rw-r--r-- | sys-utils/umount.c | 8 |
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); |