From: Christian Brauner Date: Wed, 9 Dec 2020 09:26:34 +0000 (+0100) Subject: confile_utils: cleanup lxc_inherit_namespace() X-Git-Tag: lxc-5.0.0~330^2~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a011ec99ba4a7247cc2097b8167f853cefae33de;p=thirdparty%2Flxc.git confile_utils: cleanup lxc_inherit_namespace() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c index 01ccd0c34..5db6febf6 100644 --- a/src/lxc/confile_utils.c +++ b/src/lxc/confile_utils.c @@ -893,8 +893,9 @@ static int lxc_container_name_to_pid(const char *lxcname_or_pid, int lxc_inherit_namespace(const char *nsfd_path, const char *lxcpath, const char *namespace) { + __do_free char *dup = NULL; int fd, pid; - char *dup, *lastslash; + char *lastslash; if (nsfd_path[0] == '/') { return open(nsfd_path, O_RDONLY | O_CLOEXEC); @@ -904,21 +905,20 @@ int lxc_inherit_namespace(const char *nsfd_path, const char *lxcpath, if (lastslash) { dup = strdup(nsfd_path); if (!dup) - return -1; + return ret_errno(ENOMEM); dup[lastslash - nsfd_path] = '\0'; - pid = lxc_container_name_to_pid(lastslash + 1, dup); - free(dup); - } else { - pid = lxc_container_name_to_pid(nsfd_path, lxcpath); + lxcpath = lastslash + 1; + nsfd_path = lastslash + 1; } + pid = lxc_container_name_to_pid(nsfd_path, lxcpath); if (pid < 0) - return -1; + return pid; fd = lxc_preserve_ns(pid, namespace); if (fd < 0) - return -1; + return -errno; return fd; } diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 27b0fb735..06c471634 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -1372,10 +1372,8 @@ int lxc_preserve_ns(const int pid, const char *ns) ret = snprintf(path, __NS_PATH_LEN, "/proc/%d/ns%s%s", pid, !ns || strcmp(ns, "") == 0 ? "" : "/", !ns || strcmp(ns, "") == 0 ? "" : ns); - if (ret < 0 || (size_t)ret >= __NS_PATH_LEN) { - errno = EFBIG; - return -1; - } + if (ret < 0 || (size_t)ret >= __NS_PATH_LEN) + return ret_errno(EIO); return open(path, O_RDONLY | O_CLOEXEC); }