summaryrefslogtreecommitdiff
path: root/sys/arch/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/i386')
-rw-r--r--sys/arch/i386/i386/trap.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/arch/i386/i386/trap.c b/sys/arch/i386/i386/trap.c
index ce83d2eea25..f29f4aa7759 100644
--- a/sys/arch/i386/i386/trap.c
+++ b/sys/arch/i386/i386/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.12 1996/10/17 13:36:45 deraadt Exp $ */
+/* $OpenBSD: trap.c,v 1.13 1997/01/18 15:17:38 niklas Exp $ */
/* $NetBSD: trap.c,v 1.95 1996/05/05 06:50:02 mycroft Exp $ */
#undef DEBUG
@@ -227,11 +227,13 @@ trap(frame)
case T_SEGNPFLT:
case T_ALIGNFLT:
/* Check for copyin/copyout fault. */
- pcb = &p->p_addr->u_pcb;
- if (pcb->pcb_onfault != 0) {
- copyfault:
- frame.tf_eip = (int)pcb->pcb_onfault;
- return;
+ if (p && p->p_addr) {
+ pcb = &p->p_addr->u_pcb;
+ if (pcb->pcb_onfault != 0) {
+ copyfault:
+ frame.tf_eip = (int)pcb->pcb_onfault;
+ return;
+ }
}
/*
@@ -329,7 +331,7 @@ trap(frame)
goto out;
case T_PAGEFLT: /* allow page faults in kernel mode */
- if (p == 0)
+ if (p == 0 || p->p_addr == 0)
goto we_re_toast;
pcb = &p->p_addr->u_pcb;
/*