Module Name: src Committed By: martin Date: Sat Feb 28 21:44:33 UTC 2015
Modified Files: src/sys/arch/sparc64/sparc64: trap.c Log Message: As christos put it: "Tidy up error handling, and return SIGBUS for mmap past the end of file as required by the spec." To generate a diff of this commit: cvs rdiff -u -r1.180 -r1.181 src/sys/arch/sparc64/sparc64/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/sparc64/sparc64/trap.c diff -u src/sys/arch/sparc64/sparc64/trap.c:1.180 src/sys/arch/sparc64/sparc64/trap.c:1.181 --- src/sys/arch/sparc64/sparc64/trap.c:1.180 Thu Feb 20 01:40:42 2014 +++ src/sys/arch/sparc64/sparc64/trap.c Sat Feb 28 21:44:33 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.180 2014/02/20 01:40:42 joerg Exp $ */ +/* $NetBSD: trap.c,v 1.181 2015/02/28 21:44:33 martin Exp $ */ /* * Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.180 2014/02/20 01:40:42 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.181 2015/02/28 21:44:33 martin Exp $"); #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -1198,17 +1198,25 @@ kfault: } #endif KSI_INIT_TRAP(&ksi); - if (rv == 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); + switch (rv) { + case EINVAL: + ksi.ksi_signo = SIGBUS; + ksi.ksi_code = BUS_ADRERR; + break; + case EACCES: + ksi.ksi_signo = SIGSEGV; + ksi.ksi_code = SEGV_ACCERR; + break; + case ENOMEM: ksi.ksi_signo = SIGKILL; - ksi.ksi_code = SI_NOINFO; - } else { + 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); + break; + default: ksi.ksi_signo = SIGSEGV; - ksi.ksi_code = (rv == EACCES - ? SEGV_ACCERR : SEGV_MAPERR); + ksi.ksi_code = SEGV_MAPERR; + break; } ksi.ksi_trap = type; ksi.ksi_addr = (void *)sfva;