Li Zefan 24eb089950 cgroups: fix invalid cgrp->dentry before cgroup has been completely removed
This fixes an oops when reading /proc/sched_debug.

A cgroup won't be removed completely until finishing cgroup_diput(), so we
shouldn't invalidate cgrp->dentry in cgroup_rmdir().  Otherwise, when a
group is being removed while cgroup_path() gets called, we may trigger
NULL dereference BUG.

The bug can be reproduced:

 # cat test.sh
 #!/bin/sh
 mount -t cgroup -o cpu xxx /mnt
 for (( ; ; ))
 {
	mkdir /mnt/sub
	rmdir /mnt/sub
 }
 # ./test.sh &
 # cat /proc/sched_debug

BUG: unable to handle kernel NULL pointer dereference at 00000038
IP: [<c045a47f>] cgroup_path+0x39/0x90
...
Call Trace:
 [<c0420344>] ? print_cfs_rq+0x6e/0x75d
 [<c0421160>] ? sched_debug_show+0x72d/0xc1e
...

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Acked-by: Paul Menage <menage@google.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: <stable@kernel.org>		[2.6.26.x, 2.6.27.x]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-11-06 15:41:19 -08:00
..
2008-10-22 07:37:17 +02:00
2008-10-16 11:21:30 -07:00
2008-03-30 14:18:41 -07:00
2008-09-14 16:25:35 +02:00
2008-07-28 14:37:38 +02:00
2008-08-13 12:55:10 +02:00
2008-10-28 11:19:07 +01:00
2008-09-02 19:21:40 -07:00
2008-10-20 08:52:39 -07:00
2008-10-21 15:59:53 +02:00
2008-10-24 12:51:03 +02:00
2008-10-16 11:21:31 -07:00
2008-02-06 10:41:02 -08:00
2008-10-16 11:21:51 -07:00
2008-07-25 10:53:45 -07:00
2008-10-16 11:21:47 -07:00
2008-10-16 11:21:31 -07:00