From bc65f89fe409f5fdd4510f271468876afe571489 Mon Sep 17 00:00:00 2001 From: Bixuan Cui Date: Wed, 20 Feb 2019 21:20:05 +0800 Subject: [PATCH] cgroup: check if cgroup root is alive in cgroupstats_show() euler inclusion category: bugfix bugzilla: 8883 CVE: NA ------------------------------------------------- If a cgroup root is dying, show its hierarchy_id and num_cgroups as 0. Signed-off-by: Zefan Li Tested-by: Kefeng Wang Signed-off-by: Hanjun Guo Signed-off-by: Bixuan Cui Reviewed-by: Miao Xie Signed-off-by: Yang Yingliang --- kernel/cgroup/cgroup-v1.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index 51063e7a93c2..ff3e1aab593f 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -686,6 +686,7 @@ int proc_cgroupstats_show(struct seq_file *m, void *v) { struct cgroup_subsys *ss; int i; + bool dead; seq_puts(m, "#subsys_name\thierarchy\tnum_cgroups\tenabled\n"); /* @@ -695,11 +696,13 @@ int proc_cgroupstats_show(struct seq_file *m, void *v) */ mutex_lock(&cgroup_mutex); - for_each_subsys(ss, i) + for_each_subsys(ss, i) { + dead = percpu_ref_is_dying(&ss->root->cgrp.self.refcnt); seq_printf(m, "%s\t%d\t%d\t%d\n", - ss->legacy_name, ss->root->hierarchy_id, - atomic_read(&ss->root->nr_cgrps), + ss->legacy_name, dead ? 0 : ss->root->hierarchy_id, + dead ? 0 : atomic_read(&ss->root->nr_cgrps), cgroup_ssid_enabled(i)); + } mutex_unlock(&cgroup_mutex); return 0; -- GitLab