Skip to content

Commit fd8ef11

Browse files
Mike Galbraithtorvalds
Mike Galbraith
authored andcommitted
Revert "sched, autogroup: Stop going ahead if autogroup is disabled"
This reverts commit 800d4d3. Between commits 8323f26 ("sched: Fix race in task_group()") and 800d4d3 ("sched, autogroup: Stop going ahead if autogroup is disabled"), autogroup is a wreck. With both applied, all you have to do to crash a box is disable autogroup during boot up, then reboot.. boom, NULL pointer dereference due to commit 800d4d3 not allowing autogroup to move things, and commit 8323f26 making that the only way to switch runqueues: BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<ffffffff81063ac0>] effective_load.isra.43+0x50/0x90 Pid: 7047, comm: systemd-user-se Not tainted 3.6.8-smp #7 MEDIONPC MS-7502/MS-7502 RIP: effective_load.isra.43+0x50/0x90 Process systemd-user-se (pid: 7047, threadinfo ffff880221dde000, task ffff88022618b3a0) Call Trace: select_task_rq_fair+0x255/0x780 try_to_wake_up+0x156/0x2c0 wake_up_state+0xb/0x10 signal_wake_up+0x28/0x40 complete_signal+0x1d6/0x250 __send_signal+0x170/0x310 send_signal+0x40/0x80 do_send_sig_info+0x47/0x90 group_send_sig_info+0x4a/0x70 kill_pid_info+0x3a/0x60 sys_kill+0x97/0x1a0 ? vfs_read+0x120/0x160 ? sys_read+0x45/0x90 system_call_fastpath+0x16/0x1b Code: 49 0f af 41 50 31 d2 49 f7 f0 48 83 f8 01 48 0f 46 c6 48 2b 07 48 8b bf 40 01 00 00 48 85 ff 74 3a 45 31 c0 48 8b 8f 50 01 00 00 <48> 8b 11 4c 8b 89 80 00 00 00 49 89 d2 48 01 d0 45 8b 59 58 4c RIP [<ffffffff81063ac0>] effective_load.isra.43+0x50/0x90 RSP <ffff880221ddfbd8> CR2: 0000000000000000 Signed-off-by: Mike Galbraith <[email protected]> Acked-by: Ingo Molnar <[email protected]> Cc: Yong Zhang <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: [email protected] # 2.6.39+ Signed-off-by: Linus Torvalds <[email protected]>
1 parent d3594ea commit fd8ef11

File tree

2 files changed

+0
-9
lines changed

2 files changed

+0
-9
lines changed

kernel/sched/auto_group.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,11 @@ autogroup_move_group(struct task_struct *p, struct autogroup *ag)
143143

144144
p->signal->autogroup = autogroup_kref_get(ag);
145145

146-
if (!ACCESS_ONCE(sysctl_sched_autogroup_enabled))
147-
goto out;
148-
149146
t = p;
150147
do {
151148
sched_move_task(t);
152149
} while_each_thread(p, t);
153150

154-
out:
155151
unlock_task_sighand(p, &flags);
156152
autogroup_kref_put(prev);
157153
}

kernel/sched/auto_group.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@
44
#include <linux/rwsem.h>
55

66
struct autogroup {
7-
/*
8-
* reference doesn't mean how many thread attach to this
9-
* autogroup now. It just stands for the number of task
10-
* could use this autogroup.
11-
*/
127
struct kref kref;
138
struct task_group *tg;
149
struct rw_semaphore lock;

0 commit comments

Comments
 (0)