mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
cgroups: add lock for child->cgroups in cgroup_post_fork()
When cgroup_post_fork() is called, child is seen by find_task_by_vpid(), so child->cgroups maybe be changed, It'll incorrect. child->cgroups<old>'s refcnt is decreased child->cgroups<new>'s refcnt is increased but child->cg_list is added to child->cgroups<old>'s list. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Reviewed-by: Paul Menage <menage@google.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Pavel Emelyanov <xemul@openvz.org> Cc: Balbir Singh <balbir@in.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c9d5409f8d
commit
b12b533fa5
1 changed files with 2 additions and 0 deletions
|
@ -2792,8 +2792,10 @@ void cgroup_post_fork(struct task_struct *child)
|
||||||
{
|
{
|
||||||
if (use_task_css_set_links) {
|
if (use_task_css_set_links) {
|
||||||
write_lock(&css_set_lock);
|
write_lock(&css_set_lock);
|
||||||
|
task_lock(child);
|
||||||
if (list_empty(&child->cg_list))
|
if (list_empty(&child->cg_list))
|
||||||
list_add(&child->cg_list, &child->cgroups->tasks);
|
list_add(&child->cg_list, &child->cgroups->tasks);
|
||||||
|
task_unlock(child);
|
||||||
write_unlock(&css_set_lock);
|
write_unlock(&css_set_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue