From 2319a993f9f4e79c9c9e8b3927ae59bb82bd34b7 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 31 Jul 1997 00:16:12 +0000 Subject: [PATCH] Add specific checks for user space accesses to the page table area (just above the stack). --- sys/arch/arm32/arm32/fault.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sys/arch/arm32/arm32/fault.c b/sys/arch/arm32/arm32/fault.c index e1370fe21f68..05d3069c9f01 100644 --- a/sys/arch/arm32/arm32/fault.c +++ b/sys/arch/arm32/arm32/fault.c @@ -1,4 +1,4 @@ -/* $NetBSD: fault.c,v 1.13 1997/02/04 07:12:31 mark Exp $ */ +/* $NetBSD: fault.c,v 1.14 1997/07/31 00:16:12 mark Exp $ */ /* * Copyright (c) 1994-1997 Mark Brinicombe. @@ -332,6 +332,15 @@ copyfault: printf("ok we have a page permission fault - addr=V%08x ", (u_int)va); + if ((fault_code & FAULT_USER) && va >= VM_MAXUSER_ADDRESS) { + printf("Data abort: '%s' status = %03x address = %08x PC = %08x\n", + aborts[fault_status & 0xf], fault_status & 0xfff, fault_address, + fault_pc); + postmortem(frame); + trapsignal(p, SIGSEGV, TRAP_CODE); + break; + } + /* * It is only a kernel address space fault iff: * 1. (fault_code & FAULT_USER) == 0 and @@ -454,6 +463,15 @@ copyfault: if (pmap_debug_level >= 0) printf("ok we have a page fault - addr=V%08x ", (u_int)va); + if ((fault_code & FAULT_USER) && va >= VM_MAXUSER_ADDRESS) { + printf("Data abort: '%s' status = %03x address = %08x PC = %08x\n", + aborts[fault_status & 0xf], fault_status & 0xfff, fault_address, + fault_pc); + postmortem(frame); + trapsignal(p, SIGSEGV, TRAP_CODE); + break; + } + /* * It is only a kernel address space fault iff: * 1. (fault_code & FAULT_USER) == 0 and