RELENG_7 panic
Pyun YongHyeon
pyunyh at gmail.com
Tue Mar 25 17:51:31 PDT 2008
On Tue, Mar 25, 2008 at 02:44:58PM -0400, Mike Tancsa wrote:
> I have a RELENG_7 box running in a netboot environment that is
> crashing every few days. I dont have a disk on it yet, so I have no
> where to send the coredump. But I hooked up a serial cable and made
> it drop to debugger. We are going to try a USB connected disk and
> configure it as swap so that we can then try and drop the coredump to
> it. Any other suggestions on how to track this down ?
>
I guess rl(4) hardware received too long/short frame such that
subsequent code in driver tried to copy recevied frame with invalid
length. I don't have data sheet for rl(4) hardwares so I'm not sure
how this can happen.
Anyway, try attached patch.
>
> db> where
> Tracing pid 24 tid 100023 td 0xc4cc4cc0
> kdb_enter(c08587d4,e5301000,1,e5273a9c,e5273a8c,...) at kdb_enter+0x33
> vm_fault(c1071000,e5301000,1,0,14990740,...) at vm_fault+0x178
> trap_pfault(0,0,c1072d80,c1072d38,c4d50558,...) at trap_pfault+0x20e
> trap(e5273bdc) at trap+0x3fa
> calltrap() at calltrap+0x6
> --- trap 0xc, eip = 0xc07f5cb6, esp = 0xe5273c1c, ebp = 0xe5273c54 ---
> generic_bcopy(e5300836,7ac5,0,c4dacc00,0,...) at generic_bcopy+0x1a
> rl_rxeof(c05c3466,c4cc4cc0,0,1,1273cbc,...) at rl_rxeof+0x139
> rl_intr(c4d27000,0,c0841c05,46b,0,...) at rl_intr+0xba
> ithread_loop(c4d809d0,e5273d38,0,0,0,...) at ithread_loop+0x1ab
> fork_exit(c059da60,c4d809d0,e5273d38) at fork_exit+0x99
> fork_trampoline() at fork_trampoline+0x8
> --- trap 0, eip = 0, esp = 0xe5273d70, ebp = 0 ---
> db> panic
> panic: from debugger
> cpuid = 1
> KDB: stack backtrace:
> db_trace_self_wrapper(c0845ff1,e52736cc,c05c3367,c4d97340,e52736c8,...)
> at db_trace_self_wrapper+0x26
> kdb_backtrace(c4d97340,e52736c8,c05e1a92,c0830310,c4d97374,...) at
> kdb_backtrace+0x29
> mi_switch(1,0,1,104,0,...) at mi_switch+0x47
> sched_bind(c4cc4cc0,0,c0843f3c,10e,e527370c,...) at sched_bind+0x60
> boot(c0844067,1,0,0,1,...) at boot+0x47
> panic(c0829200,e5273810,c0467c95,c05e3cc3,0,...) at panic+0x13b
> db_panic(c05e3cc3,0,ffffffff,e527377c,c0469c00,...) at db_panic+0x17
> db_command_loop(c05e3cc3,0,86,1,0,...) at db_command_loop+0x2f5
> db_trap(a,0,1,a,e5273924,...) at db_trap+0xc5
> kdb_trap(a,0,e5273924,0,c4d50558,...) at kdb_trap+0x96
> trap(e5273924) at trap+0x57b
> calltrap() at calltrap+0x6
> --- trap 0xa, eip = 0xc05e3cc3, esp = 0xe5273964, ebp = 0xe527398c ---
> kdb_enter(c08587d4,e5301000,1,e5273a9c,e5273a8c,...) at kdb_enter+0x33
> vm_fault(c1071000,e5301000,1,0,14990740,...) at vm_fault+0x178
> trap_pfault(0,0,c1072d80,c1072d38,c4d50558,...) at trap_pfault+0x20e
> trap(e5273bdc) at trap+0x3fa
> calltrap() at calltrap+0x6
> --- trap 0xc, eip = 0xc07f5cb6, esp = 0xe5273c1c, ebp = 0xe5273c54 ---
> generic_bcopy(e5300836,7ac5,0,c4dacc00,0,...) at generic_bcopy+0x1a
> rl_rxeof(c05c3466,c4cc4cc0,0,1,1273cbc,...) at rl_rxeof+0x139
> rl_intr(c4d27000,0,c0841c05,46b,0,...) at rl_intr+0xba
> ithread_loop(c4d809d0,e5273d38,0,0,0,...) at ithread_loop+0x1ab
> fork_exit(c059da60,c4d809d0,e5273d38) at fork_exit+0x99
> fork_trampoline() at fork_trampoline+0x8
> --- trap 0, eip = 0, esp = 0xe5273d70, ebp = 0 ---
> db>
>
--
Regards,
Pyun YongHyeon
-------------- next part --------------
--- sys/pci/if_rl.c.orig 2008-03-04 13:07:34.000000000 +0900
+++ sys/pci/if_rl.c 2008-03-26 09:35:49.000000000 +0900
@@ -1117,17 +1117,19 @@
* datasheet makes absolutely no mention of this and
* RealTek should be shot for this.
*/
- if ((uint16_t)(rxstat >> 16) == RL_RXSTAT_UNFINISHED)
+ total_len = rxstat >> 16;
+ if (total_len == RL_RXSTAT_UNFINISHED)
break;
- if (!(rxstat & RL_RXSTAT_RXOK)) {
+ if (!(rxstat & RL_RXSTAT_RXOK) ||
+ total_len < ETHER_MIN_LEN ||
+ total_len > ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN) {
ifp->if_ierrors++;
rl_init_locked(sc);
return;
}
/* No errors; receive the packet. */
- total_len = rxstat >> 16;
rx_bytes += total_len + 4;
/*
More information about the freebsd-stable
mailing list