From ab275f23867311e136887755728e6b368324831d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Oct 2018 17:31:51 +0200 Subject: [PATCH] cgroup-util: before operating on a mounted cgroup controller check if it actually can be mounted We now have the "BPF" pseudo-controllers. These should never be assumed to be accessible as /sys/fs/cgroup/ and not through "cgroup.subtree_control" either, hence always check explicitly before we go to the file system. We do this through our new CGROUP_MASK_V1 and CGROUP_MASK_V2 definitions. --- src/basic/cgroup-util.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index a501049619..520e18e1b0 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -2139,6 +2139,9 @@ int cg_create_everywhere(CGroupMask supported, CGroupMask mask, const char *path CGroupMask bit = CGROUP_CONTROLLER_TO_MASK(c); const char *n; + if (!FLAGS_SET(CGROUP_MASK_V1, bit)) + continue; + n = cgroup_controller_to_string(c); if (mask & bit) @@ -2168,6 +2171,9 @@ int cg_attach_everywhere(CGroupMask supported, const char *path, pid_t pid, cg_m CGroupMask bit = CGROUP_CONTROLLER_TO_MASK(c); const char *p = NULL; + if (!FLAGS_SET(CGROUP_MASK_V1, bit)) + continue; + if (!(supported & bit)) continue; @@ -2220,6 +2226,9 @@ int cg_migrate_everywhere(CGroupMask supported, const char *from, const char *to CGroupMask bit = CGROUP_CONTROLLER_TO_MASK(c); const char *p = NULL; + if (!FLAGS_SET(CGROUP_MASK_V1, bit)) + continue; + if (!(supported & bit)) continue; @@ -2252,6 +2261,9 @@ int cg_trim_everywhere(CGroupMask supported, const char *path, bool delete_root) for (c = 0; c < _CGROUP_CONTROLLER_MAX; c++) { CGroupMask bit = CGROUP_CONTROLLER_TO_MASK(c); + if (!FLAGS_SET(CGROUP_MASK_V1, bit)) + continue; + if (!(supported & bit)) continue; @@ -2586,6 +2598,9 @@ int cg_enable_everywhere(CGroupMask supported, CGroupMask mask, const char *p) { CGroupMask bit = CGROUP_CONTROLLER_TO_MASK(c); const char *n; + if (!FLAGS_SET(CGROUP_MASK_V2, bit)) + continue; + if (!(supported & bit)) continue;