NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/46286: posix_spawn induced panic



>Number:         46286
>Category:       kern
>Synopsis:       posix_spawn induced panic
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Apr 01 11:15:01 +0000 2012
>Originator:     Thomas Klausner
>Release:        NetBSD 6.99.4
>Organization:
Curiosity is the very basis of education and if you tell me that 
curiosity killed the cat, I say only that the cat died nobly.
- Arnold Edinborough
>Environment:
        
        
System: NetBSD yt.nih.at 6.99.4 NetBSD 6.99.4 (YT) #8: Fri Mar 30 08:08:11 CEST 
2012 wiz%yt.nih.at@localhost:/archive/cvs/src/sys/arch/amd64/compile/obj/YT 
amd64
Architecture: x86_64
Machine: amd64
>Description:
When building NetBSD with clang on a clang based userland+kernel, I get 
repeatable panics.
Copied from screenshot:
fatal page faultfatal page fault in supervisor mode
trap type 6 code 0 rip ffffffff8040e27e cs 8 rflags 10246 cr2 0 cpl  rsp 
ff...e81165d4860
kernel: page fault t
                             =0
pStopped in pid 18769.1 (x86_64--netbsd-c) at    netbsd:pmap_deactivate+0x93:
 m
ovq     0(%rax),%rbx
pmap_deactivate() at netbsd:pmap_deactivate+0x93
mi_switch() at netbsd:mi_switch+0x2c5
sleepq_block() at netbsd:sleepq_block+0xa4
turnstile_block() at netbsd:turnstile_block+0x3d4
mutex_vector_enter() at netbsd:mutex_vector_enter+0x223
pmap_create() at netbsd:pmap_create+0x140
uvmspace_init() at netbsd:uvmspace_init+0x4b
uvmspace_alloc() at netbsd:uvmspace_alloc+0x39
uvmspace_exec() at netbsd:uvmspace_exec+0xf8
execve_runproc() at netbsd:execve_runproc+0xd0
spawn_return() at netbsd:spawn_return+0x39e

Chuck Silvers analyzes:
looks like a bug in the posix_spawn() stuff, yea.  we're trying to sleep
before the current process has a pmap or even a vmspace, which isn't going to 
work.
even though the new thread is now created as non-preemptable, it needs to sleep
because it's taking pmaps_lock which must be held by another thread that is
sleeping, which I'll guess is because the other thread was preempted.
it would be better to have these posix_spawn() processes use proc0's vmspace
until they can allocate their own.

>How-To-Repeat:
For me, just building a NetBSD using clang on a NetBSD built using clang.
>Fix:
Not provided.

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index