diff --git a/src/lxc/cgfs.c b/src/lxc/cgfs.c index df2e6b233..d65f2d709 100644 --- a/src/lxc/cgfs.c +++ b/src/lxc/cgfs.c @@ -1220,6 +1220,7 @@ static char *lxc_cgroup_get_hierarchy_path_data(const char *subsystem, struct cg info = find_info_for_subsystem(info, subsystem); if (!info) return NULL; + prune_init_scope(info->cgroup_path); return info->cgroup_path; } diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c index a677c22c7..f8689033b 100644 --- a/src/lxc/cgmanager.c +++ b/src/lxc/cgmanager.c @@ -776,6 +776,7 @@ static char *try_get_abs_cgroup(const char *name, const char *lxcpath, nerr = nih_error_get(); nih_free(nerr); } + prune_init_scope(cgroup); return cgroup; } diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c index 2362ad8b3..b1c764f2b 100644 --- a/src/lxc/cgroup.c +++ b/src/lxc/cgroup.c @@ -194,3 +194,17 @@ cgroup_driver_t cgroup_driver(void) { return ops->driver; } + +#define INIT_SCOPE "/init.scope" +void prune_init_scope(char *cg) +{ + char *point = cg + strlen(cg) - strlen(INIT_SCOPE); + if (point < cg) + return; + if (strcmp(point, INIT_SCOPE) == 0) { + if (point == cg) + *(point+1) = '\0'; + else + *point = '\0'; + } +} diff --git a/src/lxc/cgroup.h b/src/lxc/cgroup.h index 670693991..7704c04d3 100644 --- a/src/lxc/cgroup.h +++ b/src/lxc/cgroup.h @@ -80,4 +80,6 @@ extern bool cgroup_unfreeze(struct lxc_handler *handler); extern void cgroup_disconnect(void); extern cgroup_driver_t cgroup_driver(void); +extern void prune_init_scope(char *cg); + #endif