Message ID | c9e8c0676b18692e11070c9a87a1bb93924d1f6d.1662671392.git.luke.nowakowskikrijger@canonical.com |
---|---|
State | New |
Headers | show |
Series | fix all controllers mounted when using 'cgroup_no_v1=' | expand |
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; > }
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 --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; }