From de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 11 Jun 2018 16:06:17 +0200 Subject: libmount: make errno usable after mnt_context_set_target_ns() Signed-off-by: Karel Zak --- libmount/src/context.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'libmount/src') 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; } /** -- cgit v1.2.3-55-g7522