diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/unit.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/core/unit.c b/src/core/unit.c index 83359e126b..6cf02365e9 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2156,26 +2156,27 @@ int unit_add_cgroup_attribute( _cleanup_free_ char *c = NULL; CGroupAttribute *a; + int r; assert(u); assert(name); assert(value); if (!controller) { - const char *dot; - - dot = strchr(name, '.'); - if (!dot) + r = cg_controller_from_attr(name, &c); + if (r < 0) return -EINVAL; - c = strndup(name, dot - name); - if (!c) - return -ENOMEM; - controller = c; + } else { + if (!filename_is_safe(name)) + return -EINVAL; + + if (!filename_is_safe(controller)) + return -EINVAL; } - if (streq(controller, SYSTEMD_CGROUP_CONTROLLER)) + if (!controller || streq(controller, SYSTEMD_CGROUP_CONTROLLER)) return -EINVAL; a = cgroup_attribute_find_list(u->cgroup_attributes, controller, name); |