From: Christian Brauner Date: Sat, 7 Dec 2019 23:16:59 +0000 (+0100) Subject: cgroups/cgfsng: rework cgfsng_escape() X-Git-Tag: lxc-4.0.0~78^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52d08ab033460d704466bf34b7b84ced3a1d7905;p=thirdparty%2Flxc.git cgroups/cgfsng: rework cgfsng_escape() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 1638f5d52..932425e81 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -1930,23 +1930,33 @@ __cgfsng_ops static int cgfsng_nrtasks(struct cgroup_ops *ops) /* Only root needs to escape to the cgroup of its init. */ __cgfsng_ops static bool cgfsng_escape(const struct cgroup_ops *ops, - struct lxc_conf *conf) + struct lxc_conf *conf) { - if (conf->cgroup_meta.relative || geteuid() || !ops->hierarchies) + if (!ops) + return ret_set_errno(false, ENOENT); + + if (!ops->hierarchies) + return true; + + if (!conf) + return ret_set_errno(false, EINVAL); + + if (conf->cgroup_meta.relative || geteuid()) return true; for (int i = 0; ops->hierarchies[i]; i++) { - int ret; __do_free char *fullpath = NULL; + int ret; - fullpath = must_make_path(ops->hierarchies[i]->mountpoint, - ops->hierarchies[i]->container_base_path, - "cgroup.procs", NULL); + fullpath = + must_make_path(ops->hierarchies[i]->mountpoint, + ops->hierarchies[i]->container_base_path, + "cgroup.procs", NULL); ret = lxc_write_to_file(fullpath, "0", 2, false, 0666); - if (ret != 0) { - SYSERROR("Failed to escape to cgroup \"%s\"", fullpath); - return false; - } + if (ret != 0) + return log_error_errno(false, + errno, "Failed to escape to cgroup \"%s\"", + fullpath); } return true;