Re: panic with tcpdrop




On Fri, 23 Nov 2007, Rako wrote:

Sorry for not send this before.

The connection that i kill was in TIME_WAIT or FIN_WAIT_? state

Any other information, please, tell me.
Javier

Javier,

Indeed, it looks like sysctl_drop is not handling certain TCP states properly with respect to locking. This is probably my fault, as it looks like perhaps this was fallout from the socket<->inpcb reference cleanup work in 7.x. The attached patch may help, could you give it a try?

Robert N M Watson
Computer Laboratory
University of Cambridge



(kgdb) bt
#0 doadump () at pcpu.h:195
#1 0xc0788594 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409
#2 0xc07887bf in panic (fmt=Variable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3 0xc09ccb43 in trap_fatal (frame=0xd66589c0, eva=24) at /usr/src/sys/i386/i386/trap.c:872
#4 0xc09cd4dd in trap (frame=0xd66589c0) at /usr/src/sys/i386/i386/trap.c:277
#5 0xc09b68fb in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#6 0xc07b8644 in turnstile_broadcast (ts=0x0, queue=0) at /usr/src/sys/kern/subr_turnstile.c:834
#7 0xc077ba02 in _mtx_unlock_sleep (m=0xc4c35288, opts=0, file=0x0, line=0) at /usr/src/sys/kern/kern_mutex.c:593
#8 0xc086ba27 in sysctl_drop (oidp=0xc0b0d2e0, arg1=0x0, arg2=0, req=0xd6658ba4) at /usr/src/sys/netinet/tcp_subr.c:2057
#9 0xc0791a87 in sysctl_root (oidp=Variable "oidp" is not available.
) at /usr/src/sys/kern/kern_sysctl.c:1306
#10 0xc0791bd4 in userland_sysctl (td=0xc38c0210, name=0xd6658c14, namelen=4, old=0x0, oldlenp=0x0, inkernel=0, new=0xbfbfeb90, newlen=256,
retval=0xd6658c10, flags=0) at /usr/src/sys/kern/kern_sysctl.c:1401
#11 0xc07928fd in __sysctl (td=0xc38c0210, uap=0xd6658cfc) at /usr/src/sys/kern/kern_sysctl.c:1336
#12 0xc09cd0f5 in syscall (frame=0xd6658d38) at /usr/src/sys/i386/i386/trap.c:1008
#13 0xc09b6960 in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:196
#14 0x00000033 in ?? ()
Previous frame inner to this frame (corrupt stack?)

(kgdb) f 8
#8 0xc086ba27 in sysctl_drop (oidp=0xc0b0d2e0, arg1=0x0, arg2=0, req=0xd6658ba4) at /usr/src/sys/netinet/tcp_subr.c:2057
2057 INP_UNLOCK(inp);
(kgdb) l
2052 } else if (!(inp->inp_vflag & INP_DROPPED) &&
2053 !(inp->inp_socket->so_options & SO_ACCEPTCONN)) {
2054 tp = intotcpcb(inp);
2055 tcp_drop(tp, ECONNABORTED);
2056 }
2057 INP_UNLOCK(inp);
2058 } else
2059 error = ESRCH;
2060 INP_INFO_WUNLOCK(&tcbinfo);
2061 return (error);
(kgdb)


On Fri, 23 Nov 2007, Javier wrote:

Hi, a got a panic with tcpdrop command.

Javier,

I see you may have a coredump -- could you provide a backtrace from gdb for the below? Specifically, I'd like to know what line sysctl_drop+0x207 is.

Thanks,

Robert N M Watson
Computer Laboratory
University of Cambridge


Regards,
Javier

uname -a
FreeBSD odin.valhala 7.0-BETA3 FreeBSD 7.0-BETA3 #0: Mon Nov 19 15:40:35 ART 2007

Fatal trap 12: page fault while in kernel mode
fault virtual address = 0x18
fault code = supervisor read, page not present
instruction pointer = 0x20:0xc07b8644
stack pointer = 0x28:0xd6658a00
frame pointer = 0x28:0xd6658a0c
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = resume, IOPL = 0
current process = 77347 (tcpdrop)
trap number = 12
panic: page fault
KDB: stack backtrace:
db_trace_self_wrapper(c0a5f1ea,d66588e0,c078878a,c0a5d5f4,c0b5bcc0,...) at db_trace_self_wrapper+0x26
kdb_backtrace(c0a5d5f4,c0b5bcc0,c0a1fb8c,d66588ec,d66588ec,...) at kdb_backtrace+0x29
panic(c0a1fb8c,c0a7c54d,c39ac220,1,1,...) at panic+0xaa
trap_fatal(c0a7c44f,c,246,c38c0210,c,...) at trap_fatal+0x303
trap(d66589c0) at trap+0x10d
calltrap() at calltrap+0x6
--- trap 0xc, eip = 0xc07b8644, esp = 0xd6658a00, ebp = 0xd6658a0c ---
turnstile_broadcast(0,0,c4c351f8,0,d6658b54,...) at turnstile_broadcast+0x34
_mtx_unlock_sleep(c4c35288,0,0,0,e103,...) at _mtx_unlock_sleep+0x52
sysctl_drop(c0b0d2e0,0,0,d6658ba4,d6658ba4,...) at sysctl_drop+0x207
sysctl_root(d6658ba4,100,1,c0937524,c1fbb1e0,...) at sysctl_root+0x127
userland_sysctl(c38c0210,d6658c14,4,0,0,...) at userland_sysctl+0x134
__sysctl(c38c0210,d6658cfc,18,c38c0210,d6658d2c,...) at __sysctl+0xdd
syscall(d6658d38) at syscall+0x335
Xint0x80_syscall() at Xint0x80_syscall+0x20
--- syscall (202, FreeBSD ELF32, __sysctl), eip = 0x28148a3b, esp = 0xbfbfe32c, ebp = 0xbfbfe358 ---
Uptime: 2d20h23m41s
Physical memory: 495 MB
Dumping 129 MB: 114 98 82 66 50 34 18 2

#0 doadump () at pcpu.h:195
195 pcpu.h: No such file or directory.
in pcpu.h
(kgdb)

_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"


Index: tcp_subr.c
===================================================================
RCS file: /zoo/cvsup/FreeBSD-CVS/src/sys/netinet/tcp_subr.c,v
retrieving revision 1.301
diff -u -r1.301 tcp_subr.c
--- tcp_subr.c 24 Oct 2007 19:03:59 -0000 1.301
+++ tcp_subr.c 24 Nov 2007 14:11:22 -0000
@@ -2049,12 +2049,16 @@
tw = intotw(inp);
if (tw != NULL)
tcp_twclose(tw, 0);
+ else
+ INP_UNLOCK(inp);
} else if (!(inp->inp_vflag & INP_DROPPED) &&
!(inp->inp_socket->so_options & SO_ACCEPTCONN)) {
tp = intotcpcb(inp);
- tcp_drop(tp, ECONNABORTED);
- }
- INP_UNLOCK(inp);
+ tp = tcp_drop(tp, ECONNABORTED);
+ if (tp != NULL)
+ INP_UNLOCK(inp);
+ } else
+ INP_UNLOCK(inp);
} else
error = ESRCH;
INP_INFO_WUNLOCK(&tcbinfo);
_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"

Relevant Pages

  • Re: 6.2-STABLE (i386) Repeating crash (supervisor read, page not present)
    ... GDB is free software, covered by the GNU General Public License, and you are ... page fault while in kernel mode ... #5 0xc06b3f19 in trap (frame= ...
    (freebsd-stable)
  • 4.8-release crash while trying to access dvd with mplayer
    ... page fault while in kernel mode ... acd0: Writes: CD-R, CD-RW, test write, burnproof ... acd1: Audio: play, 16 volume levels ...
    (freebsd-stable)
  • Re: panic with tcpdrop
    ... page fault while in kernel mode ... #0 doadump at pcpu.h:195 ... Previous frame inner to this frame ...
    (freebsd-current)
  • Re: panic with tcpdrop
    ... An other panic ocurred, but on other area, is on snp.ko module but can't get backtrace. ... page fault while in kernel mode ... Previous frame inner to this frame ...
    (freebsd-current)
  • Re: panic with tcpdrop
    ... An other panic ocurred, but on other area, is on snp.ko module but can't get backtrace. ... page fault while in kernel mode ... Previous frame inner to this frame ...
    (freebsd-current)