Module Name: src Committed By: martin Date: Tue Mar 3 13:23:49 UTC 2015
Modified Files: src/sys/arch/vax/vax: trap.c Log Message: Handle EINVAL in the fault path and send SIGBUS on mmap'd access past EOF To generate a diff of this commit: cvs rdiff -u -r1.132 -r1.133 src/sys/arch/vax/vax/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/vax/vax/trap.c diff -u src/sys/arch/vax/vax/trap.c:1.132 src/sys/arch/vax/vax/trap.c:1.133 --- src/sys/arch/vax/vax/trap.c:1.132 Fri Oct 25 16:30:52 2013 +++ src/sys/arch/vax/vax/trap.c Tue Mar 3 13:23:48 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.132 2013/10/25 16:30:52 martin Exp $ */ +/* $NetBSD: trap.c,v 1.133 2015/03/03 13:23:48 martin Exp $ */ /* * Copyright (c) 1994 Ludd, University of Lule}, Sweden. @@ -33,7 +33,7 @@ /* All bugs are subject to removal without further notice */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.132 2013/10/25 16:30:52 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.133 2015/03/03 13:23:48 martin Exp $"); #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -244,18 +244,28 @@ if(faultdebug)printf("trap accflt type % panic("SEGV in kernel mode: pc %#lx addr %#lx", tf->tf_pc, tf->tf_code); } - code = SEGV_ACCERR; - if (rv == ENOMEM) { + switch (rv) { + case ENOMEM: printf("UVM: pid %d (%s), uid %d killed: " "out of swap\n", p->p_pid, p->p_comm, l->l_cred ? kauth_cred_geteuid(l->l_cred) : -1); sig = SIGKILL; - } else { + code = SI_NOINFO; + break; + case EINVAL: + code = BUS_ADRERR; + sig = SIGBUS; + break; + case EACCES: + code = SEGV_ACCERR; sig = SIGSEGV; - if (rv != EACCES) - code = SEGV_MAPERR; + break; + default: + code = SEGV_MAPERR; + sig = SIGSEGV; + break; } } else { trapsig = false;