[Devel] [PATCH rh7] ub: init ub0 bound css early

Vladimir Davydov vdavydov at virtuozzo.com
Mon May 16 03:05:45 PDT 2016


It may occur that a usermodehelper is scheduled before ub0 bound css is
initialized during late init. If this happens, the system will crash in
ub_enough_memory, which needs to dereference bound css.

To fix that let's initialize bound css right after cgroup_init.

https://jira.sw.ru/browse/PSBM-47147

Signed-off-by: Vladimir Davydov <vdavydov at virtuozzo.com>
---
 init/main.c             | 2 +-
 kernel/bc/beancounter.c | 8 +++-----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/init/main.c b/init/main.c
index 0f3533981674..ad443bea53a9 100644
--- a/init/main.c
+++ b/init/main.c
@@ -623,7 +623,6 @@ asmlinkage void __init start_kernel(void)
 	cred_init();
 	fork_init(totalram_pages);
 	proc_caches_init();
-	ub_init_late();
 	buffer_init();
 	key_init();
 	security_init();
@@ -636,6 +635,7 @@ asmlinkage void __init start_kernel(void)
 	proc_root_init();
 #endif
 	cgroup_init();
+	ub_init_late();
 	cpuset_init();
 	taskstats_init_early();
 	delayacct_init();
diff --git a/kernel/bc/beancounter.c b/kernel/bc/beancounter.c
index 18188f7a42e8..b26d292e2881 100644
--- a/kernel/bc/beancounter.c
+++ b/kernel/bc/beancounter.c
@@ -1172,6 +1172,9 @@ static ctl_table ub_sysctl_root[] = {
 
 void __init ub_init_late(void)
 {
+	ub_set_mem_css(&ub0, task_subsys_state_check(&init_task,  mem_cgroup_subsys_id, true));
+	ub_set_blkio_css(&ub0, task_subsys_state_check(&init_task, blkio_subsys_id, true));
+
 	register_sysctl_table(ub_sysctl_root);
 }
 
@@ -1203,11 +1206,6 @@ int __init ub_init_cgroup(void)
 		panic("Failed to mount beancounter cgroup: %ld\n",
 		      PTR_ERR(ub_cgroup_mnt));
 
-	ub_set_mem_css(&ub0, cgroup_subsys_state(
-		cgroup_get_root(mem_cgroup_mnt), mem_cgroup_subsys_id));
-	ub_set_blkio_css(&ub0, cgroup_subsys_state(
-		cgroup_get_root(blkio_cgroup_mnt), blkio_subsys_id));
-
 	return 0;
 }
 late_initcall(ub_init_cgroup);
-- 
2.1.4



More information about the Devel mailing list