From ff1b8455c26b560641d476b426209e297209333a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 18 Apr 2018 19:50:07 +0200 Subject: [PATCH 1/2] core: fix resetting of Delegate= and properly ignore invalid assignment The default is false not true. If we say "ignoring" we must return 0. --- src/core/load-fragment.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 767355adf6..403c0afd57 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -3411,7 +3411,7 @@ int config_parse_delegate( * mask to delegate. */ if (isempty(rvalue)) { - c->delegate = true; + c->delegate = false; c->delegate_controllers = 0; return 0; } @@ -3432,7 +3432,7 @@ int config_parse_delegate( return log_oom(); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Invalid syntax, ignoring: %s", rvalue); - return r; + return 0; } cc = cgroup_controller_from_string(word); From ecae73d74ab55c001c7c460a93c8e3710dee55f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 18 Apr 2018 20:06:56 +0200 Subject: [PATCH 2/2] core: do not allow Delegate= on unsupported unit types --- src/core/load-fragment.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 403c0afd57..61e752ad3e 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -3404,8 +3404,17 @@ int config_parse_delegate( void *userdata) { CGroupContext *c = data; + UnitType t; int r; + t = unit_name_to_type(unit); + assert(t != _UNIT_TYPE_INVALID); + + if (!unit_vtable[t]->can_delegate) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Delegate= setting not supported for this unit type, ignoring."); + return 0; + } + /* We either accept a boolean value, which may be used to turn on delegation for all controllers, or turn it * off for all. Or it takes a list of controller names, in which case we add the specified controllers to the * mask to delegate. */