]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup-util: before operating on a mounted cgroup controller check if it actually...
authorLennart Poettering <lennart@poettering.net>
Wed, 24 Oct 2018 15:31:51 +0000 (17:31 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 26 Oct 2018 16:43:34 +0000 (18:43 +0200)
We now have the "BPF" pseudo-controllers. These should never be assumed
to be accessible as /sys/fs/cgroup/<controller> 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

index a50104961982ce5e4d90714a09b8a9cdb5c0f2be..520e18e1b0e7eeb67c56bc30a119b006106e2aa2 100644 (file)
@@ -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;