* [PATCH] Fix the race between walk_tg_tree and sched_create_group
@ 2030-08-14 7:56 Zhang, Yanmin
2008-08-14 8:36 ` Peter Zijlstra
0 siblings, 1 reply; 3+ messages in thread
From: Zhang, Yanmin @ 2030-08-14 7:56 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar; +Cc: LKML
With 2.6.27-rc3, I hit a kernel panic when running volanoMark on my
new x86_64 machine. I also hit it with other 2.6.27-rc kernels.
See below log.
Basically, function walk_tg_tree and sched_create_group have a race between
accessing and initiating tg->children. Below patch fixes it by moving
tg->children initiation to the front of linking tg->siblings to parent->children.
Signed-off-by: Zhang Yanmin <yanmin_zhang@linux.intel.com>
----------------panic log------------
BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
IP: [<ffffffff802292ab>] walk_tg_tree+0x45/0x7f
PGD 1be1c4067 PUD 1bdd8d067 PMD 0
Oops: 0000 [1] SMP
CPU 11
Modules linked in: igb
Pid: 22979, comm: java Not tainted 2.6.27-rc3 #1
RIP: 0010:[<ffffffff802292ab>] [<ffffffff802292ab>] walk_tg_tree+0x45/0x7f
RSP: 0018:ffff8801bfbbbd18 EFLAGS: 00010083
RAX: 0000000000000000 RBX: ffff8800be0dce40 RCX: ffffffffffffffc0
RDX: ffff880102c43740 RSI: 0000000000000000 RDI: ffff8800be0dce40
RBP: ffff8801bfbbbd48 R08: ffff8800ba437bc8 R09: 0000000000001f40
R10: ffff8801be812100 R11: ffffffff805fdf44 R12: ffff880102c43740
R13: 0000000000000000 R14: ffffffff8022cf0f R15: ffffffff8022749f
FS: 00000000568ac950(0063) GS:ffff8801bfa26d00(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 0000000000000000 CR3: 00000001bd848000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process java (pid: 22979, threadinfo ffff8801b145a000, task ffff8801bf18e450)
Stack: 0000000000000001 ffff8800ba5c8d60 0000000000000001 0000000000000001
ffff8800bad1ccb8 0000000000000000 ffff8801bfbbbd98 ffffffff8022ed37
0000000000000001 0000000000000286 ffff8801bd5ee180 ffff8800ba437bc8
Call Trace:
<IRQ> [<ffffffff8022ed37>] try_to_wake_up+0x71/0x24c
[<ffffffff80247177>] autoremove_wake_function+0x9/0x2e
[<ffffffff80228039>] ? __wake_up_common+0x46/0x76
[<ffffffff802296d5>] __wake_up+0x38/0x4f
[<ffffffff806169cc>] tcp_v4_rcv+0x380/0x62e
---
--- linux-2.6.27-rc3/kernel/sched.c 2008-08-14 06:23:49.000000000 +0800
+++ linux-2.6.27-rc3_race/kernel/sched.c 2008-08-14 07:19:07.000000000 +0800
@@ -8462,8 +8462,8 @@ struct task_group *sched_create_group(st
WARN_ON(!parent); /* root should already exist */
tg->parent = parent;
- list_add_rcu(&tg->siblings, &parent->children);
INIT_LIST_HEAD(&tg->children);
+ list_add_rcu(&tg->siblings, &parent->children);
spin_unlock_irqrestore(&task_group_lock, flags);
return tg;
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix the race between walk_tg_tree and sched_create_group
2030-08-14 7:56 [PATCH] Fix the race between walk_tg_tree and sched_create_group Zhang, Yanmin
@ 2008-08-14 8:36 ` Peter Zijlstra
2008-08-14 8:46 ` Ingo Molnar
0 siblings, 1 reply; 3+ messages in thread
From: Peter Zijlstra @ 2008-08-14 8:36 UTC (permalink / raw)
To: Zhang, Yanmin; +Cc: Ingo Molnar, LKML
On Wed, 2030-08-14 at 15:56 +0800, Zhang, Yanmin wrote:
> With 2.6.27-rc3, I hit a kernel panic when running volanoMark on my
> new x86_64 machine. I also hit it with other 2.6.27-rc kernels.
> See below log.
>
> Basically, function walk_tg_tree and sched_create_group have a race between
> accessing and initiating tg->children. Below patch fixes it by moving
> tg->children initiation to the front of linking tg->siblings to parent->children.
>
> Signed-off-by: Zhang Yanmin <yanmin_zhang@linux.intel.com>
Nice catch
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> ----------------panic log------------
>
> BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
> IP: [<ffffffff802292ab>] walk_tg_tree+0x45/0x7f
> PGD 1be1c4067 PUD 1bdd8d067 PMD 0
> Oops: 0000 [1] SMP
> CPU 11
> Modules linked in: igb
> Pid: 22979, comm: java Not tainted 2.6.27-rc3 #1
> RIP: 0010:[<ffffffff802292ab>] [<ffffffff802292ab>] walk_tg_tree+0x45/0x7f
> RSP: 0018:ffff8801bfbbbd18 EFLAGS: 00010083
> RAX: 0000000000000000 RBX: ffff8800be0dce40 RCX: ffffffffffffffc0
> RDX: ffff880102c43740 RSI: 0000000000000000 RDI: ffff8800be0dce40
> RBP: ffff8801bfbbbd48 R08: ffff8800ba437bc8 R09: 0000000000001f40
> R10: ffff8801be812100 R11: ffffffff805fdf44 R12: ffff880102c43740
> R13: 0000000000000000 R14: ffffffff8022cf0f R15: ffffffff8022749f
> FS: 00000000568ac950(0063) GS:ffff8801bfa26d00(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> CR2: 0000000000000000 CR3: 00000001bd848000 CR4: 00000000000006e0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> Process java (pid: 22979, threadinfo ffff8801b145a000, task ffff8801bf18e450)
> Stack: 0000000000000001 ffff8800ba5c8d60 0000000000000001 0000000000000001
> ffff8800bad1ccb8 0000000000000000 ffff8801bfbbbd98 ffffffff8022ed37
> 0000000000000001 0000000000000286 ffff8801bd5ee180 ffff8800ba437bc8
> Call Trace:
> <IRQ> [<ffffffff8022ed37>] try_to_wake_up+0x71/0x24c
> [<ffffffff80247177>] autoremove_wake_function+0x9/0x2e
> [<ffffffff80228039>] ? __wake_up_common+0x46/0x76
> [<ffffffff802296d5>] __wake_up+0x38/0x4f
> [<ffffffff806169cc>] tcp_v4_rcv+0x380/0x62e
>
>
> ---
>
> --- linux-2.6.27-rc3/kernel/sched.c 2008-08-14 06:23:49.000000000 +0800
> +++ linux-2.6.27-rc3_race/kernel/sched.c 2008-08-14 07:19:07.000000000 +0800
> @@ -8462,8 +8462,8 @@ struct task_group *sched_create_group(st
> WARN_ON(!parent); /* root should already exist */
>
> tg->parent = parent;
> - list_add_rcu(&tg->siblings, &parent->children);
> INIT_LIST_HEAD(&tg->children);
> + list_add_rcu(&tg->siblings, &parent->children);
> spin_unlock_irqrestore(&task_group_lock, flags);
>
> return tg;
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix the race between walk_tg_tree and sched_create_group
2008-08-14 8:36 ` Peter Zijlstra
@ 2008-08-14 8:46 ` Ingo Molnar
0 siblings, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2008-08-14 8:46 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Zhang, Yanmin, LKML
* Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Wed, 2030-08-14 at 15:56 +0800, Zhang, Yanmin wrote:
> > With 2.6.27-rc3, I hit a kernel panic when running volanoMark on my
> > new x86_64 machine. I also hit it with other 2.6.27-rc kernels.
> > See below log.
> >
> > Basically, function walk_tg_tree and sched_create_group have a race between
> > accessing and initiating tg->children. Below patch fixes it by moving
> > tg->children initiation to the front of linking tg->siblings to parent->children.
> >
> > Signed-off-by: Zhang Yanmin <yanmin_zhang@linux.intel.com>
>
> Nice catch
>
> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
applied to tip/sched/urgent - thanks.
Ingo
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-08-14 8:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2030-08-14 7:56 [PATCH] Fix the race between walk_tg_tree and sched_create_group Zhang, Yanmin
2008-08-14 8:36 ` Peter Zijlstra
2008-08-14 8:46 ` Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.