summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormickey <mickey@openbsd.org>2003-04-07 17:09:42 +0000
committermickey <mickey@openbsd.org>2003-04-07 17:09:42 +0000
commit43a9164877e34cc0175681b993e0079bfd6856f3 (patch)
tree5b734d6f093575b63dab22f45935874d478c30ff
parentproperly recalculate spa-epa when it comes to per-page (diff)
downloadwireguard-openbsd-43a9164877e34cc0175681b993e0079bfd6856f3.tar.xz
wireguard-openbsd-43a9164877e34cc0175681b993e0079bfd6856f3.zip
only check for space mismatch when coming from user.
the only case of user refering the kernel space is for the syscall and that never faults since always mapped. this fixes some random sig11 occurences.
-rw-r--r--sys/arch/hppa/hppa/trap.c42
1 files changed, 9 insertions, 33 deletions
diff --git a/sys/arch/hppa/hppa/trap.c b/sys/arch/hppa/hppa/trap.c
index 947ef13b150..5f5351af7bb 100644
--- a/sys/arch/hppa/hppa/trap.c
+++ b/sys/arch/hppa/hppa/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.62 2003/02/25 14:04:09 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.63 2003/04/07 17:09:42 mickey Exp $ */
/*
* Copyright (c) 1998-2003 Michael Shalayeff
@@ -355,47 +355,23 @@ trap(type, frame)
break;
}
- if (!(vm = p->p_vmspace)) {
- printf("trap: no vm, p=%p\n", p);
- goto dead_end;
- }
-
/*
* it could be a kernel map for exec_map faults
*/
- if (!(type & T_USER) && space == HPPA_SID_KERNEL)
+ if (space == HPPA_SID_KERNEL)
map = kernel_map;
- else
+ else {
+ vm = p->p_vmspace;
map = &vm->vm_map;
-
- if (map->pmap->pm_space != space) {
- if (map->pmap->pm_space != HPPA_SID_KERNEL) {
- sv.sival_int = va;
- trapsignal(p, SIGSEGV, vftype, SEGV_MAPERR, sv);
- } else {
- printf("trap: space missmatch %d != %d\n",
- space, map->pmap->pm_space);
- goto dead_end;
- }
- }
-
-#ifdef TRAPDEBUG
- if (space == -1) {
- extern int pmapdebug;
- pmapdebug = 0xffffff;
}
-#endif
- ret = uvm_fault(map, hppa_trunc_page(va), fault, vftype);
-#ifdef TRAPDEBUG
- if (space == -1) {
- extern int pmapdebug;
- pmapdebug = 0;
+ if (type & T_USER && map->pmap->pm_space != space) {
+ sv.sival_int = va;
+ trapsignal(p, SIGSEGV, vftype, SEGV_MAPERR, sv);
+ break;
}
- printf("uvm_fault(%p, %x, %d, %d)=%d\n",
- map, va, 0, vftype, ret);
-#endif
+ ret = uvm_fault(map, hppa_trunc_page(va), fault, vftype);
/*
* If this was a stack access we keep track of the maximum