From: Christian Brauner Date: Sat, 7 Dec 2019 23:16:59 +0000 (+0100) Subject: cgroups/cgfsng: rework cgfsng_escape() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7cdc98a88fd9223590c07a84867eccbdb724495;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 8a40f4f00..af99c41b9 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 (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 (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;