* BUG: Use after free in detach_pid
@ 2003-03-22 16:57 Zwane Mwaikambo
2003-03-22 17:05 ` Zwane Mwaikambo
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Zwane Mwaikambo @ 2003-03-22 16:57 UTC (permalink / raw)
To: Linux Kernel; +Cc: Manfred Spraul
Hi Manfred, much quicker turnover if i leave it to you. kernel/box is SMP
i triggered it whilst doing a find in a large NFS directory and writing
out 512M to that same directory.
187 }
188
189 static inline int __detach_pid(task_t *task, enum pid_type type)
190 {
191 struct pid_link *link = task->pids + type;
192 struct pid *pid = link->pidptr;
193 int nr;
194
195 list_del(&link->pid_chain); <==
196 if (!atomic_dec_and_test(&pid->count))
Unable to handle kernel paging request at virtual address 6b6b6b6b
printing eip:
c013479c
*pde = 00000000
Oops: 0002
CPU: 0
EIP: 0060:[<c013479c>] Not tainted
EFLAGS: 00010046
EIP is at detach_pid+0x1c/0xf0
eax: 6b6b6b6b ebx: 6b6b6b6b ecx: 6b6b6b6b edx: c1bb93d0
esi: 00000000 edi: bfffef74 ebp: 00000000 esp: caaa3f08
ds: 007b es: 007b ss: 0068
Process bash (pid: 1292, threadinfo=caaa2000 task=cbb02560)
Stack: c1bb9380 00000000 bfffef74 00000000 c01232ec c1bb9380 c01233dc c1bb9380
c1bb9380 c1bb9944 c1bb9380 00000526 c01251cb c1bb9380 bfffef74 bfffef74
c1bb9424 c1bb9380 cbb02560 cbb025fc c0125681 c1bb9380 bfffef74 00000000
Call Trace:
[<c01232ec>] __unhash_process+0x10c/0x170
[<c01233dc>] release_task+0x8c/0x200
[<c01251cb>] wait_task_zombie+0x15b/0x1c0
[<c0125681>] sys_wait4+0x241/0x290
[<c011cb10>] default_wake_function+0x0/0x20
[<c011cb10>] default_wake_function+0x0/0x20
[<c0109477>] syscall_call+0x7/0xb
Code: 89 01 89 48 04 f0 ff 4b 04 0f 94 c0 31 f6 84 c0 74 1f 8b 43
--
function.linuxpower.ca
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: BUG: Use after free in detach_pid 2003-03-22 16:57 BUG: Use after free in detach_pid Zwane Mwaikambo @ 2003-03-22 17:05 ` Zwane Mwaikambo 2003-03-22 17:15 ` William Lee Irwin III 2003-03-22 20:17 ` Manfred Spraul 2 siblings, 0 replies; 8+ messages in thread From: Zwane Mwaikambo @ 2003-03-22 17:05 UTC (permalink / raw) To: Linux Kernel; +Cc: Manfred Spraul, William Lee Irwin III Forgot to mention, kernel is 2.5.65-pgcl w/ HIGHMEM + 32k PAGE_SIZE, i haven't encountered any memory stomping other than this one so far. Thanks, Zwane -- function.linuxpower.ca ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 16:57 BUG: Use after free in detach_pid Zwane Mwaikambo 2003-03-22 17:05 ` Zwane Mwaikambo @ 2003-03-22 17:15 ` William Lee Irwin III 2003-03-22 20:17 ` Manfred Spraul 2 siblings, 0 replies; 8+ messages in thread From: William Lee Irwin III @ 2003-03-22 17:15 UTC (permalink / raw) To: Zwane Mwaikambo; +Cc: Linux Kernel, Manfred Spraul On Sat, Mar 22, 2003 at 11:57:15AM -0500, Zwane Mwaikambo wrote: > EIP is at detach_pid+0x1c/0xf0 > Call Trace: > [<c01232ec>] __unhash_process+0x10c/0x170 > [<c01233dc>] release_task+0x8c/0x200 > [<c01251cb>] wait_task_zombie+0x15b/0x1c0 > [<c0125681>] sys_wait4+0x241/0x290 > [<c011cb10>] default_wake_function+0x0/0x20 > [<c011cb10>] default_wake_function+0x0/0x20 > [<c0109477>] syscall_call+0x7/0xb This is highly unusual. I know of what I believe to be most of the outstanding bugs in pgcl and none are of this form. I'm hoping manfred's analysis will turn up something; I can chase this, but he seems to have good leads already. -- wli ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 16:57 BUG: Use after free in detach_pid Zwane Mwaikambo 2003-03-22 17:05 ` Zwane Mwaikambo 2003-03-22 17:15 ` William Lee Irwin III @ 2003-03-22 20:17 ` Manfred Spraul 2003-03-22 20:41 ` Zwane Mwaikambo 2003-03-22 20:44 ` Andrew Morton 2 siblings, 2 replies; 8+ messages in thread From: Manfred Spraul @ 2003-03-22 20:17 UTC (permalink / raw) To: Zwane Mwaikambo; +Cc: Linux Kernel Zwane Mwaikambo wrote: >Process bash (pid: 1292, threadinfo=caaa2000 task=cbb02560) >Call Trace: > [<c01232ec>] __unhash_process+0x10c/0x170 > [<c01233dc>] release_task+0x8c/0x200 > [<c01251cb>] wait_task_zombie+0x15b/0x1c0 > [<c0125681>] sys_wait4+0x241/0x290 > [<c011cb10>] default_wake_function+0x0/0x20 > [<c011cb10>] default_wake_function+0x0/0x20 > [<c0109477>] syscall_call+0x7/0xb > >Code: 89 01 89 48 04 f0 ff 4b 04 0f 94 c0 31 f6 84 c0 74 1f 8b 43 > > > 0: 89 01 mov %eax,(%ecx) 2: 89 48 04 mov %ecx,0x4(%eax) list_del(&link->pid_chain): link->pid_chain->next, prev == 0x6b6b6b6b 5: f0 ff 4b 04 lock decl 0x4(%ebx) %ebx: link->pidptr == 0x6b6b6b6b The whole link structure is filled with slab poison. The link structure is embedded in the task struct stucture. You mentioned that the last detach_pid() within __unhash_process oopsed. That means the reference count of the task structure was off by one, and the put_task_struct(pid->task) within detach_pid(p,PIDTYPE_PGID); freed the task structure. The process was bash - does your bash use anything fancy, or plain boring single threaded app? -- Manfred ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 20:17 ` Manfred Spraul @ 2003-03-22 20:41 ` Zwane Mwaikambo 2003-03-22 20:44 ` Andrew Morton 1 sibling, 0 replies; 8+ messages in thread From: Zwane Mwaikambo @ 2003-03-22 20:41 UTC (permalink / raw) To: Manfred Spraul; +Cc: Linux Kernel On Sat, 22 Mar 2003, Manfred Spraul wrote: > >Code: 89 01 89 48 04 f0 ff 4b 04 0f 94 c0 31 f6 84 c0 74 1f 8b 43 > > > > > > > 0: 89 01 mov %eax,(%ecx) > 2: 89 48 04 mov %ecx,0x4(%eax) > list_del(&link->pid_chain): > link->pid_chain->next, prev == 0x6b6b6b6b > 5: f0 ff 4b 04 lock decl 0x4(%ebx) > %ebx: link->pidptr == 0x6b6b6b6b Yep, sorry i should have given this to you earlier. 0xc01232d0 <__unhash_process+240>: push $0xc0505400 0xc01232d5 <__unhash_process+245>: call 0xc011ef20 <__preempt_spin_lock> 0xc01232da <__unhash_process+250>: pop %eax 0xc01232db <__unhash_process+251>: jmp 0xc0123259 <__unhash_process+121> 0xc01232e0 <__unhash_process+256>: mov $0x2,%edx 0xc01232e5 <__unhash_process+261>: mov %ebx,%eax 0xc01232e7 <__unhash_process+263>: call 0xc0134780 <detach_pid> <== 0xc01232ec <__unhash_process+268>: mov %ebx,%eax 0xc01232ee <__unhash_process+270>: mov $0x3,%edx 0xc01232f3 <__unhash_process+275>: call 0xc0134780 <detach_pid> 0xc01232f8 <__unhash_process+280>: mov 0x7c(%ebx),%edx 0xc01232fb <__unhash_process+283>: test %edx,%edx 0xc01232fd <__unhash_process+285>: je 0xc012331f <__unhash_process+319> 0xc01232ff <__unhash_process+287>: mov $0xffffe000,%edx 0xc0123304 <__unhash_process+292>: mov $0xc057b434,%eax 0xc0134780 <detach_pid>: lea (%edx,%edx,4),%edx 0xc0134783 <detach_pid+3>: push %ebp 0xc0134784 <detach_pid+4>: push %edi 0xc0134785 <detach_pid+5>: lea (%eax,%edx,8),%edx 0xc0134788 <detach_pid+8>: push %esi 0xc0134789 <detach_pid+9>: push %ebx 0xc013478a <detach_pid+10>: lea 0xb0(%edx),%eax 0xc0134790 <detach_pid+16>: mov 0x4(%eax),%ecx 0xc0134793 <detach_pid+19>: mov 0x8(%eax),%ebx 0xc0134796 <detach_pid+22>: mov 0xb0(%edx),%eax 0xc013479c <detach_pid+28>: mov %eax,(%ecx) <=== 0xc013479e <detach_pid+30>: mov %ecx,0x4(%eax) 0xc01347a1 <detach_pid+33>: lock decl 0x4(%ebx) > The whole link structure is filled with slab poison. The link structure is embedded in the task struct stucture. > You mentioned that the last detach_pid() within __unhash_process oopsed. > That means the reference count of the task structure was off by one, and the > put_task_struct(pid->task) > within > detach_pid(p,PIDTYPE_PGID); > freed the task structure. Yes that corresponds with where it oopsed. 0xc01232ec is in __unhash_process (kernel/exit.c:43). 38 nr_threads--; 39 detach_pid(p, PIDTYPE_PID); 40 detach_pid(p, PIDTYPE_TGID); 41 if (thread_group_leader(p)) { 42 detach_pid(p, PIDTYPE_PGID); 43 detach_pid(p, PIDTYPE_SID); > The process was bash - does your bash use anything fancy, or plain boring single threaded app? No nothing special, it's a default RH install type thing. Thanks, Zwane -- function.linuxpower.ca ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 20:17 ` Manfred Spraul 2003-03-22 20:41 ` Zwane Mwaikambo @ 2003-03-22 20:44 ` Andrew Morton 2003-03-22 20:44 ` Zwane Mwaikambo 2003-03-23 2:09 ` William Lee Irwin III 1 sibling, 2 replies; 8+ messages in thread From: Andrew Morton @ 2003-03-22 20:44 UTC (permalink / raw) To: Manfred Spraul; +Cc: zwane, linux-kernel, jochen Manfred Spraul <manfred@colorfullife.com> wrote: > > You mentioned that the last detach_pid() within __unhash_process oopsed. That means the reference count of the task structure was off by one, and the > put_task_struct(pid->task) > within > detach_pid(p,PIDTYPE_PGID); > freed the task structure. > Might be related to http://bugme.osdl.org/show_bug.cgi?id=482 in which someone did put_task_struct() on an already-freed task_struct. And that was a uniprocessor without pgcl gunk. It is not known whether preemption was enabled? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 20:44 ` Andrew Morton @ 2003-03-22 20:44 ` Zwane Mwaikambo 2003-03-23 2:09 ` William Lee Irwin III 1 sibling, 0 replies; 8+ messages in thread From: Zwane Mwaikambo @ 2003-03-22 20:44 UTC (permalink / raw) To: Andrew Morton; +Cc: Manfred Spraul, linux-kernel, jochen On Sat, 22 Mar 2003, Andrew Morton wrote: > Manfred Spraul <manfred@colorfullife.com> wrote: > > > > You mentioned that the last detach_pid() within __unhash_process oopsed. That means the reference count of the task structure was off by one, and the > > put_task_struct(pid->task) > > within > > detach_pid(p,PIDTYPE_PGID); > > freed the task structure. > > > > Might be related to http://bugme.osdl.org/show_bug.cgi?id=482 > in which someone did put_task_struct() on an already-freed task_struct. > > And that was a uniprocessor without pgcl gunk. > > It is not known whether preemption was enabled? CONFIG_PREEMPT=y on 3way P133 -- function.linuxpower.ca ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: BUG: Use after free in detach_pid 2003-03-22 20:44 ` Andrew Morton 2003-03-22 20:44 ` Zwane Mwaikambo @ 2003-03-23 2:09 ` William Lee Irwin III 1 sibling, 0 replies; 8+ messages in thread From: William Lee Irwin III @ 2003-03-23 2:09 UTC (permalink / raw) To: Andrew Morton; +Cc: Manfred Spraul, zwane, linux-kernel, jochen On Sat, Mar 22, 2003 at 12:44:47PM -0800, Andrew Morton wrote: > And that was a uniprocessor without pgcl gunk. I'd rather not hide my WIP's until they're "perfect". -- wli ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-03-23 1:58 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-03-22 16:57 BUG: Use after free in detach_pid Zwane Mwaikambo 2003-03-22 17:05 ` Zwane Mwaikambo 2003-03-22 17:15 ` William Lee Irwin III 2003-03-22 20:17 ` Manfred Spraul 2003-03-22 20:41 ` Zwane Mwaikambo 2003-03-22 20:44 ` Andrew Morton 2003-03-22 20:44 ` Zwane Mwaikambo 2003-03-23 2:09 ` William Lee Irwin III
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox