cgroup: add a validation check to cgroup_add_cftyps()
PATCH 1/1 cgroup: add a validation check to cgroup_add_cftyps()
Fengguang reported this bug:
BUG: unable to handle kernel NULL pointer dereference at 0000003c IP: [<cc90b4ad>] cgroup_cfts_commit+0x27/0x1c1 ... Call Trace: [<cc9d1129>] ? kmem_cache_alloc_trace+0x33f/0x3b7 [<cc90c6fc>] cgroup_add_cftypes+0x8f/0xca [<cd78b646>] cgroup_init+0x6a/0x26a [<cd764d7d>] start_kernel+0x4d7/0x57a [<cd7642ef>] i386_start_kernel+0x92/0x96
This happens in a corner case. If CGROUP_SCHED=y but CFS_BANDWIDTH=n && FAIR_GROUP_SCHED=n && RT_GROUP_SCHED=n, we have:
cpu_files[] = {
{ } /* terminate */
}When we pass cpu_files to cgroup_apply_cftypes(), as cpu_files[0].ss is NULL, we'll access NULL pointer.
The bug was introduced by commit de00ffa56ea3132c6013fc8f07133b8a1014cf53 ("cgroup: make cgroup_subsys->base_cftypes use cgroup_add_cftypes()").
--- kernel/cgroup.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/cgroup.c +3 -0
@@ -2356,6 +2356,9 @@ int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) {int ret; +if (!cfts || cfts[0 ].name[0 ] =='\0' ) +return 0 ; + ret =cgroup_init_cftypes (ss, cfts);if (ret)return ret;
Signature · 1 line
1.8.0.2
Quoted 19 lines · Li Zefan
Fengguang reported this bug:
BUG: unable to handle kernel NULL pointer dereference at 0000003c IP: [<cc90b4ad>] cgroup_cfts_commit+0x27/0x1c1 ... Call Trace: [<cc9d1129>] ? kmem_cache_alloc_trace+0x33f/0x3b7 [<cc90c6fc>] cgroup_add_cftypes+0x8f/0xca [<cd78b646>] cgroup_init+0x6a/0x26a [<cd764d7d>] start_kernel+0x4d7/0x57a [<cd7642ef>] i386_start_kernel+0x92/0x96This happens in a corner case. If CGROUP_SCHED=y but CFS_BANDWIDTH=n && FAIR_GROUP_SCHED=n && RT_GROUP_SCHED=n, we have:
cpu_files[] = { { } /* terminate */ }
Quoted 8 lines
When we pass
cpu_filestocgroup_apply_cftypes(), as cpu_files[0].ss is NULL, we'll access NULL pointer.The bug was introduced by commit
de00ffa56ea3132c6013fc8f07133b8a1014cf53("cgroup: makecgroup_subsys->base_cftypesusecgroup_add_cftypes()").Reported-by Fengguang Wu <[email protected]>Signed-off-by Li Zefan <[email protected]>
Applied to cgroup/for-3.15. Thanks.
Signature · 1 line
tejun