From: Tomas Hruby Date: Sat, 29 Aug 2009 19:26:46 +0000 (+0000) Subject: saved_proc in exception() may be NULL X-Git-Tag: v3.1.5~170 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zpipe.c?a=commitdiff_plain;h=50473107c21b7468602e60e50c6626bb9c10c46f;p=minix.git saved_proc in exception() may be NULL If an exception happens in kernel while the kernel is booting and no processes are running yet, saved_proc == NULL and priting any process related information results in dumping rubish. This check is mostly useful when debugging kernel stuff. Should _never_ happen on a production kernel. --- diff --git a/kernel/arch/i386/exception.c b/kernel/arch/i386/exception.c index 2657482de..21fe09709 100755 --- a/kernel/arch/i386/exception.c +++ b/kernel/arch/i386/exception.c @@ -163,16 +163,25 @@ struct proc *t; else kprintf("\n%s\n", ep->msg); kprintf("k_reenter = %d ", k_reenter); - kprintf("process %d (%s), ", proc_nr(saved_proc), saved_proc->p_name); - kprintf("pc = %u:0x%x\n", (unsigned) saved_proc->p_reg.cs, - (unsigned) saved_proc->p_reg.pc); - kprintf( - "vec_nr= %d, trap_errno= 0x%lx, eip= 0x%lx, cs= 0x%x, eflags= 0x%lx\n", - vec_nr, (unsigned long)trap_errno, - (unsigned long)old_eip, old_cs, (unsigned long)old_eflags); - proc_stacktrace(saved_proc); - minix_panic("exception in a kernel task", saved_proc->p_endpoint); + /* TODO should we enable this only when compiled for some debug mode? */ + if (saved_proc) { + kprintf("process %d (%s), ", proc_nr(saved_proc), saved_proc->p_name); + kprintf("pc = %u:0x%x\n", (unsigned) saved_proc->p_reg.cs, + (unsigned) saved_proc->p_reg.pc); + kprintf("vec_nr= %d, trap_errno= 0x%lx, eip= 0x%lx, " + "cs= 0x%x, eflags= 0x%lx\n", + vec_nr, (unsigned long)trap_errno, + (unsigned long)old_eip, old_cs, + (unsigned long)old_eflags); + proc_stacktrace(saved_proc); + + minix_panic("exception in a kernel task", saved_proc->p_endpoint); + } + else { + /* in an early stage of boot process we don't have processes yet */ + minix_panic("exception in kernel while booting", NO_NUM); + } } /*===========================================================================*