summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2008-10-29 14:00:51 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-30 11:38:45 -0700
commit7ccb97437bcc818d0ba6067513475f6ee8177a15 (patch)
tree5d9209002ea50383ffc256f89c25743552b5c637
parentdf8bc08c192f00f155185bfd6f052d46a728814a (diff)
downloadlinux-stable-7ccb97437bcc818d0ba6067513475f6ee8177a15.tar.gz
linux-stable-7ccb97437bcc818d0ba6067513475f6ee8177a15.tar.bz2
linux-stable-7ccb97437bcc818d0ba6067513475f6ee8177a15.zip
freezer_cg: fix improper BUG_ON() causing oops
The BUG_ON() should be protected by freezer->lock, otherwise it can be triggered easily when a task has been unfreezed but the corresponding cgroup hasn't been changed to FROZEN state. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Cedric Le Goater <clg@fr.ibm.com> Acked-by: Matt Helsley <matthltc@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--kernel/cgroup_freezer.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
index e95056954498..7f54d1c42953 100644
--- a/kernel/cgroup_freezer.c
+++ b/kernel/cgroup_freezer.c
@@ -190,8 +190,9 @@ static void freezer_fork(struct cgroup_subsys *ss, struct task_struct *task)
freezer = task_freezer(task);
task_unlock(task);
- BUG_ON(freezer->state == CGROUP_FROZEN);
spin_lock_irq(&freezer->lock);
+ BUG_ON(freezer->state == CGROUP_FROZEN);
+
/* Locking avoids race with FREEZING -> THAWED transitions. */
if (freezer->state == CGROUP_FREEZING)
freeze_task(task, true);