Subject: kern/1290: crash in tcp_reass
To: None <gnats-bugs@gnats.netbsd.org>
From: John Kohl <jtk@kolvir.blrc.ma.us>
List: netbsd-bugs
Date: 07/27/1995 21:10:36
>Number: 1290
>Category: kern
>Synopsis: tcp_reass faulted on bogus q->ti_prev;
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people (Kernel Bug People)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Jul 27 21:35:02 1995
>Last-Modified:
>Originator: John Kohl
>Organization:
NetBSD Kernel Hackers `R` Us
>Release: -current as of July 27 1995
>Environment:
System: NetBSD kolvir 1.0A NetBSD 1.0A (KOLVIR) #618: Tue Jul 25 18:50:28 EDT 1995 jtk@pattern:/u1/NetBSD-current/src/sys/arch/i386/compile/KOLVIR i386
>Description:
I got a kernel page fault in tcp_reass on a fresh i386 kernel running PPP.
kernel: page fault trap, code=0
Stopped at _tcp_reass+0x48: movswl 0xa(%ebx),%eax
db> tr
_tcp_reass(f87ed800,f87ee720,f87ee700,f87ee720,f87ee700) at _tcp_reass+0x48
_tcp_input(f87ee700,14) at _tcp_input+0x1272
_ipintr(7e,8000001a,f81e9a90,f8149698,f81e9a90) at _ipintr+0x394
_Xsoftnet() at _Xsoftnet+0x2d
--- interrupt ---
Bad frame pointer: 0xf86f50b8
_compoll:
db> show reg
es 0x10
ds 0x10
edi 0xf87ed800 _end+0x5daac0
esi 0xf87ee720 _end+0x5db9e0
ebp 0xf9a8ec88 _end+0x187bf48
ebx 0x2000000
edx 0xf87ee700 _end+0x5db9c0
ecx 0xf87ed800 _end+0x5daac0
eax 0x276f2f4f
eip 0xf8159b2c _tcp_reass+0x48
cs 0x8
eflags 0x10207
esp 0xf9a8ec74 _end+0x187bf34
ss 0x10
_tcp_reass+0x48: movswl 0xa(%ebx),%eax
db>
I looked over the tcp reassembly code and the stack trace. I couldn't
figure out exactly what went wrong where, but it looks like
q->ti_prev is bogus (0x2000000) in the tcp segment in question.
The call from tcp_input() is from the TCP_REASS() macro call to tcp_reass().
>How-To-Repeat:
I was using PPP on a 56k line. Maybe this is related to interrupt
masking problems?
>Fix:
>Audit-Trail:
>Unformatted: