diff mbox series

[SRU,F,1/1] cgroup-v1: add disabled controller check in cgroup1_parse_param()

Message ID c9e8c0676b18692e11070c9a87a1bb93924d1f6d.1662671392.git.luke.nowakowskikrijger@canonical.com
State New
Headers show
Series fix all controllers mounted when using 'cgroup_no_v1=' | expand

Commit Message

Luke Nowakowski-Krijger Sept. 8, 2022, 9:18 p.m. UTC
From: Chen Zhou <chenzhou10@huawei.com>

BugLink:  https://bugs.launchpad.net/bugs/1988584

When mounting a cgroup hierarchy with disabled controller in cgroup v1,
all available controllers will be attached.
For example, boot with cgroup_no_v1=cpu or cgroup_disable=cpu, and then
mount with "mount -t cgroup -ocpu cpu /sys/fs/cgroup/cpu", then all
enabled controllers will be attached except cpu.

Fix this by adding disabled controller check in cgroup1_parse_param().
If the specified controller is disabled, just return error with information
"Disabled controller xx" rather than attaching all the other enabled
controllers.

Fixes: f5dfb5315d34 ("cgroup: take options parsing into ->parse_monolithic()")
Signed-off-by: Chen Zhou <chenzhou10@huawei.com>
Reviewed-by: Zefan Li <lizefan.x@bytedance.com>
Reviewed-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
(backported from commit 657d8bd31e65a5ba41e2c8fdcdfe68497993df26)
[lukenow: replace invalfc with invalf]
Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
---
 kernel/cgroup/cgroup-v1.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Stefan Bader Sept. 15, 2022, 7:49 a.m. UTC | #1
On 08.09.22 23:18, Luke Nowakowski-Krijger wrote:
> From: Chen Zhou <chenzhou10@huawei.com>
> 
> BugLink:  https://bugs.launchpad.net/bugs/1988584
> 
> When mounting a cgroup hierarchy with disabled controller in cgroup v1,
> all available controllers will be attached.
> For example, boot with cgroup_no_v1=cpu or cgroup_disable=cpu, and then
> mount with "mount -t cgroup -ocpu cpu /sys/fs/cgroup/cpu", then all
> enabled controllers will be attached except cpu.
> 
> Fix this by adding disabled controller check in cgroup1_parse_param().
> If the specified controller is disabled, just return error with information
> "Disabled controller xx" rather than attaching all the other enabled
> controllers.
> 
> Fixes: f5dfb5315d34 ("cgroup: take options parsing into ->parse_monolithic()")
> Signed-off-by: Chen Zhou <chenzhou10@huawei.com>
> Reviewed-by: Zefan Li <lizefan.x@bytedance.com>
> Reviewed-by: Michal Koutný <mkoutny@suse.com>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> (backported from commit 657d8bd31e65a5ba41e2c8fdcdfe68497993df26)
> [lukenow: replace invalfc with invalf]
> Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---
>   kernel/cgroup/cgroup-v1.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
> index 117d70098cd49..d8eed51471471 100644
> --- a/kernel/cgroup/cgroup-v1.c
> +++ b/kernel/cgroup/cgroup-v1.c
> @@ -940,6 +940,9 @@ int cgroup1_parse_param(struct fs_context *fc, struct fs_parameter *param)
>   		for_each_subsys(ss, i) {
>   			if (strcmp(param->key, ss->legacy_name))
>   				continue;
> +			if (!cgroup_ssid_enabled(i) || cgroup1_ssid_disabled(i))
> +				return invalf(fc, "Disabled controller '%s'",
> +					       param->key);
>   			ctx->subsys_mask |= (1 << i);
>   			return 0;
>   		}
Tim Gardner Sept. 16, 2022, 5:03 p.m. UTC | #2
On 9/8/22 15:18, Luke Nowakowski-Krijger wrote:
> From: Chen Zhou <chenzhou10@huawei.com>
> 
> BugLink:  https://bugs.launchpad.net/bugs/1988584
> 
> When mounting a cgroup hierarchy with disabled controller in cgroup v1,
> all available controllers will be attached.
> For example, boot with cgroup_no_v1=cpu or cgroup_disable=cpu, and then
> mount with "mount -t cgroup -ocpu cpu /sys/fs/cgroup/cpu", then all
> enabled controllers will be attached except cpu.
> 
> Fix this by adding disabled controller check in cgroup1_parse_param().
> If the specified controller is disabled, just return error with information
> "Disabled controller xx" rather than attaching all the other enabled
> controllers.
> 
> Fixes: f5dfb5315d34 ("cgroup: take options parsing into ->parse_monolithic()")
> Signed-off-by: Chen Zhou <chenzhou10@huawei.com>
> Reviewed-by: Zefan Li <lizefan.x@bytedance.com>
> Reviewed-by: Michal Koutný <mkoutny@suse.com>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> (backported from commit 657d8bd31e65a5ba41e2c8fdcdfe68497993df26)

The SHA1 should be 61e960b07b637f0295308ad91268501d744c21b5

> [lukenow: replace invalfc with invalf]
> Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
> ---
>   kernel/cgroup/cgroup-v1.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
> index 117d70098cd49..d8eed51471471 100644
> --- a/kernel/cgroup/cgroup-v1.c
> +++ b/kernel/cgroup/cgroup-v1.c
> @@ -940,6 +940,9 @@ int cgroup1_parse_param(struct fs_context *fc, struct fs_parameter *param)
>   		for_each_subsys(ss, i) {
>   			if (strcmp(param->key, ss->legacy_name))
>   				continue;
> +			if (!cgroup_ssid_enabled(i) || cgroup1_ssid_disabled(i))
> +				return invalf(fc, "Disabled controller '%s'",
> +					       param->key);
>   			ctx->subsys_mask |= (1 << i);
>   			return 0;
>   		}

Acked-by: Tim Gardner <tim.gardner@canonical.com>
diff mbox series

Patch

diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 117d70098cd49..d8eed51471471 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -940,6 +940,9 @@  int cgroup1_parse_param(struct fs_context *fc, struct fs_parameter *param)
 		for_each_subsys(ss, i) {
 			if (strcmp(param->key, ss->legacy_name))
 				continue;
+			if (!cgroup_ssid_enabled(i) || cgroup1_ssid_disabled(i))
+				return invalf(fc, "Disabled controller '%s'",
+					       param->key);
 			ctx->subsys_mask |= (1 << i);
 			return 0;
 		}