Unverified Commit cfeeed19 by Stéphane Graber Committed by GitHub

Merge pull request #1994 from brauner/2017-12-04/bugfixes

attach: do not fail on non-existing namespaces
parents 1048874c 134284c3
......@@ -281,8 +281,15 @@ static int in_same_namespace(pid_t pid1, pid_t pid2, const char *ns)
struct stat ns_st1, ns_st2;
ns_fd1 = lxc_preserve_ns(pid1, ns);
if (ns_fd1 < 0)
if (ns_fd1 < 0) {
/* The kernel does not support this namespace. This is not an
* error.
*/
if (errno == ENOENT)
return -EINVAL;
goto out;
}
ns_fd2 = lxc_preserve_ns(pid2, ns);
if (ns_fd2 < 0)
......
......@@ -1741,11 +1741,12 @@ static int mount_entry(const char *fsname, const char *target,
if (ret < 0) {
if (optional) {
INFO("Failed to mount \"%s\" on \"%s\" (optional): %s",
fsname, target, strerror(errno));
fsname ? fsname : "(null)", target, strerror(errno));
return 0;
}
SYSERROR("Failed to mount \"%s\" on \"%s\"", fsname, target);
SYSERROR("Failed to mount \"%s\" on \"%s\"",
fsname ? fsname : "(null)", target);
return -1;
}
......@@ -1753,13 +1754,12 @@ static int mount_entry(const char *fsname, const char *target,
unsigned long rqd_flags = 0;
DEBUG("Remounting \"%s\" on \"%s\" to respect bind or remount "
"options",
fsname ? fsname : "(none)", target ? target : "(none)");
"options", fsname ? fsname : "(none)", target ? target : "(none)");
if (mountflags & MS_RDONLY)
rqd_flags |= MS_RDONLY;
#ifdef HAVE_STATVFS
if (statvfs(fsname, &sb) == 0) {
if (fsname && statvfs(fsname, &sb) == 0) {
unsigned long required_flags = rqd_flags;
if (sb.f_flag & MS_NOSUID)
......@@ -1798,12 +1798,14 @@ static int mount_entry(const char *fsname, const char *target,
if (ret < 0) {
if (optional) {
INFO("Failed to mount \"%s\" on \"%s\" "
"(optional): %s", fsname, target,
"(optional): %s",
fsname ? fsname : "(null)", target,
strerror(errno));
return 0;
}
SYSERROR("Failed to mount \"%s\" on \"%s\"", fsname, target);
SYSERROR("Failed to mount \"%s\" on \"%s\"",
fsname ? fsname : "(null)", target);
return -1;
}
}
......@@ -1811,8 +1813,8 @@ static int mount_entry(const char *fsname, const char *target,
#ifdef HAVE_STATVFS
skipremount:
#endif
DEBUG("Mounted \"%s\" on \"%s\" with filesystem type \"%s\"", fsname,
target, fstype);
DEBUG("Mounted \"%s\" on \"%s\" with filesystem type \"%s\"",
fsname ? fsname : "(null)", target, fstype);
return 0;
}
......
......@@ -2942,35 +2942,27 @@ static int get_config_mount_auto(const char *key, char *retv, int inlen,
switch (c->auto_mounts & LXC_AUTO_CGROUP_MASK) {
case LXC_AUTO_CGROUP_NOSPEC:
strprint(retv, inlen, "%scgroup", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_MIXED:
strprint(retv, inlen, "%scgroup:mixed", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_RO:
strprint(retv, inlen, "%scgroup:ro", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_RW:
strprint(retv, inlen, "%scgroup:rw", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_FULL_NOSPEC:
strprint(retv, inlen, "%scgroup-full", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_FULL_MIXED:
strprint(retv, inlen, "%scgroup-full:mixed", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_FULL_RO:
strprint(retv, inlen, "%scgroup-full:ro", sep);
sep = " ";
break;
case LXC_AUTO_CGROUP_FULL_RW:
strprint(retv, inlen, "%scgroup-full:rw", sep);
sep = " ";
break;
default:
break;
......
......@@ -969,7 +969,7 @@ static int lxc_clear_nic(struct lxc_conf *c, const char *key)
p1 = strchr(key, '.');
if (!p1 || *(p1+1) == '\0')
p1 = NULL;
return -1;
if (!p1 && it) {
lxc_remove_nic(it);
......@@ -987,8 +987,9 @@ static int lxc_clear_nic(struct lxc_conf *c, const char *key)
free(it2->elem);
free(it2);
}
} else {
return -1;
}
else return -1;
return 0;
}
......
......@@ -827,9 +827,10 @@ out_unlock:
*/
static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_opts *opts, char *criu_version)
{
int fd;
pid_t pid;
struct lxc_handler *handler;
int status, fd;
int status = 0;
int pipes[2] = {-1, -1};
/* Try to detach from the current controlling tty if it exists.
......@@ -1024,7 +1025,12 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_
* assign the return here to silence potential.
*/
ret = snprintf(title, sizeof(title), "[lxc monitor] %s %s", c->config_path, c->name);
if (ret < 0 || (size_t)ret >= sizeof(title))
INFO("Setting truncated process name");
ret = setproctitle(title);
if (ret < 0)
INFO("Failed to set process name");
ret = lxc_poll(c->name, handler);
if (ret)
......@@ -1049,9 +1055,9 @@ out:
*/
if (!status)
status = 1;
if (write(status_pipe, &status, sizeof(status)) != sizeof(status)) {
if (write(status_pipe, &status, sizeof(status)) != sizeof(status))
SYSERROR("writing status failed");
}
close(status_pipe);
}
......
......@@ -1644,7 +1644,7 @@ int safe_mount(const char *src, const char *dest, const char *fstype,
close(destfd);
if (ret < 0) {
errno = saved_errno;
SYSERROR("Failed to mount %s onto %s", src, dest);
SYSERROR("Failed to mount %s onto %s", src ? src : "(null)", dest);
return ret;
}
......@@ -1906,8 +1906,9 @@ 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);
errno = EFBIG;
if (ret < 0 || (size_t)ret >= __NS_PATH_LEN)
return -1;
return -EFBIG;
return open(path, O_RDONLY | O_CLOEXEC);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment