From: Christian Brauner Date: Wed, 31 Jan 2018 15:41:53 +0000 (+0100) Subject: cgroups: cgfsng_get: handle unified hierarchy X-Git-Tag: lxc-3.0.0.beta1~52^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0069cc619ed2c9fc2405c1a500f6c9c211ee4bba;p=thirdparty%2Flxc.git cgroups: cgfsng_get: handle unified hierarchy Signed-off-by: Christian Brauner --- diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index e0ae55a01..961a25fee 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -2352,28 +2352,34 @@ static bool cgfsng_attach(const char *name, const char *lxcpath, pid_t pid) * Here we don't have a cgroup_data set up, so we ask the running * container through the commands API for the cgroup path */ -static int cgfsng_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath) +static int cgfsng_get(const char *filename, char *value, size_t len, + const char *name, const char *lxcpath) { - char *subsystem, *p, *path; - struct hierarchy *h; int ret = -1; + size_t controller_len; + char *controller, *p, *path; + struct hierarchy *h; - subsystem = alloca(strlen(filename) + 1); - strcpy(subsystem, filename); - if ((p = strchr(subsystem, '.')) != NULL) + controller_len = strlen(filename); + controller = alloca(controller_len + 1); + strcpy(controller, filename); + p = strchr(controller, '.'); + if (p) *p = '\0'; - path = lxc_cmd_get_cgroup_path(name, lxcpath, subsystem); - if (!path) /* not running */ + path = lxc_cmd_get_cgroup_path(name, lxcpath, controller); + /* not running */ + if (!path) return -1; - h = get_hierarchy(subsystem); + h = get_hierarchy(controller); if (h) { - char *fullpath = build_full_cgpath_from_monitorpath(h, path, filename); + char *fullpath; + + fullpath = build_full_cgpath_from_monitorpath(h, path, filename); ret = lxc_read_from_file(fullpath, value, len); free(fullpath); } - free(path); return ret;