Date: Sun, 1 Feb 2004 17:49:50 +0100 From: Thomas Moestl <t.moestl@tu-bs.de> To: Kris Kennaway <kris@obsecurity.org> Cc: sparc64@freebsd.org Subject: Re: "panic: trap: fast data access mmu miss" on 5.2-C Message-ID: <20040201164950.GB713@timesink.dyndns.org> In-Reply-To: <20040201105032.GA17856@xor.obsecurity.org> References: <20040201105032.GA17856@xor.obsecurity.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, 2004/02/01 at 02:50:32 -0800, Kris Kennaway wrote: > I updated the sparc64 package clients to 5.2-CURRENT 2 days ago, and > one of them panicked today: > > panic: trap: fast data access mmu miss > at line 364 in file /var/portbuild/sparc64/src-client/sys/sparc64/sparc64/trap.c > cpuid = 0; > Debugger("panic") > Stopped at Debugger+0x1c: ta %xcc, 1 > db> trace > __panic() at __panic+0x17c > trap() at trap+0x3f0 > -- fast data access mmu miss tar=0x4410000000 %o7=0xc005e34c -- > db_read_bytes() at db_read_bytes+0x1c > db_stack_trace_cmd() at db_stack_trace_cmd+0x1cc > db_print_backtrace() at db_print_backtrace+0x18 > backtrace() at backtrace+0x10 > witness_checkorder() at witness_checkorder+0x6b0 > [...] > fork_exit() at fork_exit+0x8c > fork_trampoline() at fork_trampoline+0x8 > ofw_pci_default_intr_pending() at ofw_pci_default_intr_pending+0x38 > panic: trap: fast data access mmu miss > at line 364 in file /var/portbuild/sparc64/src-client/sys/sparc64/sparc64/trap.ccpuid = 0; > Debugger("panic") > Stopped at Debugger+0x1c: ta %xcc, 1 > db> Looks like the back trace ran off the end of the stack; db_stack_trace_cmd() only handles the usual starting points of kernel stacks (traps from userland), but not freshly forked processes (or kernel threads). The attached patch should fix that by initializing the fr_pc and fr_fp fields of the first frame to 0 in cpu_fork(). - Thomas -- Thomas Moestl <t.moestl@tu-bs.de> http://www.tu-bs.de/~y0015675/ <tmm@FreeBSD.org> http://people.FreeBSD.org/~tmm/ "In my opinion, television validates existence." -- Calvin and Hobbes --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="fork.diff" Index: sparc64/sparc64/vm_machdep.c =================================================================== RCS file: /vol/ncvs/src/sys/sparc64/sparc64/vm_machdep.c,v retrieving revision 1.58 diff -u -r1.58 vm_machdep.c --- sparc64/sparc64/vm_machdep.c 28 Dec 2003 08:57:09 -0000 1.58 +++ sparc64/sparc64/vm_machdep.c 1 Feb 2004 15:20:17 -0000 @@ -300,6 +300,8 @@ fp->fr_local[0] = (u_long)fork_return; fp->fr_local[1] = (u_long)td2; fp->fr_local[2] = (u_long)tf; + /* Terminate stack traces at this frame. */ + fp->fr_pc = fp->fr_fp = 0; pcb2->pcb_sp = (u_long)fp - SPOFF; pcb2->pcb_pc = (u_long)fork_trampoline - 8; --RnlQjJ0d97Da+TV1--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040201164950.GB713>