diff options
Diffstat (limited to 'libmount')
-rw-r--r-- | libmount/src/context.c | 11 |
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; } /** |