svn commit: r327472 - in head/sys: amd64/amd64 i386/i386
Konstantin Belousov
kib at FreeBSD.org
Mon Jan 1 20:47:04 UTC 2018
Author: kib
Date: Mon Jan 1 20:47:03 2018
New Revision: 327472
URL: https://svnweb.freebsd.org/changeset/base/327472
Log:
Avoid re-check of usermode condition.
It does not change anything in the behavior of trap_pfault(), while
eliminating obfuscation of jumping to the code which checks for the
condition reversed of the goto cause. Also avoid force initialize the
rv variable, since it is now only accessed after storing vm_fault()
return value.
Reviewed by: alc
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D13725
Modified:
head/sys/amd64/amd64/trap.c
head/sys/i386/i386/trap.c
Modified: head/sys/amd64/amd64/trap.c
==============================================================================
--- head/sys/amd64/amd64/trap.c Mon Jan 1 20:39:12 2018 (r327471)
+++ head/sys/amd64/amd64/trap.c Mon Jan 1 20:47:03 2018 (r327472)
@@ -608,7 +608,6 @@ trap_pfault(struct trapframe *frame, int usermode)
td = curthread;
p = td->td_proc;
eva = frame->tf_addr;
- rv = 0;
if (__predict_false((td->td_pflags & TDP_NOFAULTING) != 0)) {
/*
@@ -660,7 +659,7 @@ trap_pfault(struct trapframe *frame, int usermode)
* Don't allow user-mode faults in kernel address space.
*/
if (usermode)
- goto nogo;
+ return (SIGSEGV);
map = kernel_map;
} else {
@@ -715,7 +714,6 @@ trap_pfault(struct trapframe *frame, int usermode)
#endif
return (0);
}
-nogo:
if (!usermode) {
if (td->td_intr_nesting_level == 0 &&
curpcb->pcb_onfault != NULL) {
Modified: head/sys/i386/i386/trap.c
==============================================================================
--- head/sys/i386/i386/trap.c Mon Jan 1 20:39:12 2018 (r327471)
+++ head/sys/i386/i386/trap.c Mon Jan 1 20:47:03 2018 (r327472)
@@ -744,7 +744,6 @@ trap_pfault(struct trapframe *frame, int usermode, vm_
td = curthread;
p = td->td_proc;
- rv = 0;
if (__predict_false((td->td_pflags & TDP_NOFAULTING) != 0)) {
/*
@@ -805,7 +804,7 @@ trap_pfault(struct trapframe *frame, int usermode, vm_
return (-2);
#endif
if (usermode)
- goto nogo;
+ return (SIGSEGV);
map = kernel_map;
} else {
@@ -862,7 +861,6 @@ trap_pfault(struct trapframe *frame, int usermode, vm_
#endif
return (0);
}
-nogo:
if (!usermode) {
if (td->td_intr_nesting_level == 0 &&
curpcb->pcb_onfault != NULL) {
More information about the svn-src-all
mailing list