kern/130261: kernel panic in/below sys_pipe.c:knlist_cleardel

Yvan Seth Yvan.Seth at Zeus.com
Wed Jan 7 07:20:03 PST 2009


The following reply was made to PR kern/130261; it has been noted by GNATS.

From: Yvan Seth <Yvan.Seth at Zeus.com>
To: bug-followup at FreeBSD.org, Yvan.Seth at Zeus.com
Cc:  
Subject: Re: kern/130261: kernel panic in/below sys_pipe.c:knlist_cleardel
Date: Wed, 7 Jan 2009 15:12:37 +0000

 In trying to replicate this more simply (still using our complex test
 scripts unfortunately) I'm seeing some slightly different panics.
 
 I've seen the following one just a couple of times before, but figure it
 must be related as it is also under knlist_cleardel.  To my untrained
 eye things look to be in an even worse state in this case, should
 knl->kl_list.slh_first->kn_kq.kq_lock.mtx_lock ever have a value of
 0x06?  On all occurrences of this form of the panic this has value 0x06,
 seemingly not random clobbering.
 
 The 'kq' is in state 0x10 - KQ_CLOSING
 The 'kn' has status 0x11 - KN_ACTIVE | KN_INFLUX
 
 Notably: 0x78 = 0x04+0x74 - i.e. "mov 0x74(%ecx),%eax"
 
 And: 0x04 = 0x06 & MTX_FLAGMASK (see #define mtx_owner)
 
 Perhaps: mtx_lock = MTX_UNOWNED | MTX_CONTESTED = MTX_DESTROYED
 
 
 More details:
 -----------------------------------------------------------------------
 Fatal trap 12: page fault while in kernel mode
 fault virtual address   = 0x78
 fault code             = supervisor read, page not present
 instruction pointer    = 0x20:0xc06dc281
 stack pointer          = 0x28:0xd184cb64
 frame pointer          = 0x28:0xd184cb68
 code segment           = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
 processor eflags       = resume, IOPL = 0
 current process        = 24539 (perl)
 panic: from debugger
 KDB: stack backtrace:
 Uptime: 2h42m13s
 <SNIP/>
 #10 0xc092388a in calltrap () at /usr/src/sys/i386/i386/exception.s:139
 #11 0xc06dc281 in turnstile_setowner (ts=0xc25124c0, owner=0x4) at /usr/src/sys/kern/subr_turnstile.c:456
 #12 0xc06dc5de in turnstile_wait (lock=0xc2ec6600, owner=0x4, queue=0) at /usr/src/sys/kern/subr_turnstile.c:661
 #13 0xc06b1a5e in _mtx_lock_sleep (m=0xc2ec6600, tid=3272086656, opts=0, file=0x0, line=0) at /usr/src/sys/kern/kern_mutex.c:579
 #14 0xc069c961 in knlist_cleardel (knl=0xc27bdb98, td=0x0, islocked=1, killkn=0) at /usr/src/sys/kern/kern_event.c:1730
 #15 0xc06e2597 in pipeclose (cpipe=0xc27bdb28) at /usr/src/sys/kern/sys_pipe.c:1526
 #16 0xc06e2216 in pipe_close (fp=0xc30814a0, td=0xc3081480) at /usr/src/sys/kern/sys_pipe.c:1443
 #17 0xc06980d8 in fdrop_locked (fp=0xc2fa83a8, td=0xc3081480) at file.h:296
 #18 0xc0698001 in fdrop (fp=0xc2fa83a8, td=0xc3081480) at /usr/src/sys/kern/kern_descrip.c:2173
 #19 0xc069662f in closef (fp=0xc2fa83a8, td=0xc3081480) at /usr/src/sys/kern/kern_descrip.c:1993
 #20 0xc06939c3 in kern_close (td=0xc3081480, fd=5) at /usr/src/sys/kern/kern_descrip.c:1083
 #21 0xc06937b4 in close (td=0xc3081480, uap=0xc30814a0) at /usr/src/sys/kern/kern_descrip.c:1035
 #22 0xc0937903 in syscall (frame=
       {tf_fs = 59, tf_es = 140116027, tf_ds = -1078001605, tf_edi = 0, tf_esi = 673782480, tf_ebp = -1077942568, tf_isp = -779825820, tf_ebx = 673694016, tf_edx = 0, tf_ecx = 0, tf_eax = 6, tf_trapno = 12, tf_err = 2, tf_eip = 673632627, tf_cs = 51, tf_eflags = 530, tf_esp = -1077942596, tf_ss = 59}) at /usr/src/sys/i386/i386/trap.c:984
 #23 0xc09238df in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:200
 #24 0x00000033 in ?? ()
 Previous frame inner to this frame (corrupt stack?)
 <SNIP/>
 (kgdb) p/x *knl
 st = {
     slh_first = 0xc2859770
   }, 
   kl_lock = 0xc069c7ec, 
   kl_unlock = 0xc069c820, 
   kl_locked = 0xc069c85c, 
   kl_lockarg = 0xc27bdc98
 }
 (kgdb) p/x *knl->kl_list.slh_first
 $3 = {
   kn_link = {
     sle_next = 0x0
   }, 
   kn_selnext = {
     sle_next = 0x0
   }, 
   kn_knlist = 0xc27bdb98, 
   kn_tqe = {
     tqe_next = 0x0, 
     tqe_prev = 0xc285a848
   }, 
   kn_kq = 0xc2ec6600, 
   kn_kevent = {
     ident = 0x1, 
     filter = 0xfffe, 
     flags = 0x0, 
     fflags = 0x0, 
     data = 0x4000, 
     udata = 0x0
   }, 
   kn_status = 0x11, 
   kn_sfflags = 0x0, 
   kn_sdata = 0x0, 
   kn_ptr = {
     p_fp = 0x0, 
     p_proc = 0x0
   }, 
   kn_fop = 0x0, 
   kn_hook = 0x0
 }
 (kgdb) p/x *knl->kl_list.slh_first->kn_kq
 $4 = {
   kq_lock = {
     mtx_object = {
       lo_class = 0xc0a32c84, 
       lo_name = 0xc09b8585, 
       lo_type = 0xc09b8585, 
       lo_flags = 0x420000, 
       lo_list = {
         tqe_next = 0x0, 
         tqe_prev = 0x0
       }, 
       lo_witness = 0x0
     }, 
     mtx_lock = 0x6,   <<<<======================= ???????
     mtx_recurse = 0x0
   }, 
   kq_refcnt = 0x1, 
   kq_list = {
     sle_next = 0x0
   }, 
   kq_head = {
     tqh_first = 0x0, 
     tqh_last = 0xc2ec662c
   }, 
   kq_count = 0x0, 
   kq_sel = {
     si_thrlist = {
       tqe_next = 0x0, 
       tqe_prev = 0x0
     }, 
     si_thread = 0x0, 
     si_note = {
       kl_list = {
         slh_first = 0x0
       }, 
       kl_lock = 0x0, 
       kl_unlock = 0x0, 
       kl_locked = 0xc069c85c, 
       kl_lockarg = 0x0
     }, 
     si_flags = 0x0
   }, 
   kq_sigio = 0x0, 
   kq_fdp = 0x0, 
   kq_state = 0x10, 
   kq_knlistsize = 0x100, 
   kq_knlist = 0xc268e800, 
   kq_knhashmask = 0x0, 
   kq_knhash = 0x0, 
   kq_task = {
     ta_link = {
       stqe_next = 0x0
     }, 
     ta_pending = 0x0, 
     ta_priority = 0x0, 
     ta_func = 0xc069b788, 
     ta_context = 0xc2ec6600
   }
 }
 -----------------------------------------------------------------------
 
 Regards,
 -Yvan
 


More information about the freebsd-bugs mailing list