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/<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.
This commit is contained in:
Lennart Poettering 2018-10-24 17:31:51 +02:00
parent 4edd65e4cf
commit ab275f2386

View 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;