All of lore.kernel.org
 help / color / mirror / Atom feed
* 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: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: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: 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 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.