diff options
author | andrew <andrew@FreeBSD.org> | 2015-10-04 21:16:45 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-10-04 21:16:45 +0000 |
commit | 771796b063b65eae334aa668ceb7a63c233c926f (patch) | |
tree | e3e1c64ca7f986a7ceecbe41fdc5e04cc9781137 | |
parent | e2681931e491c40d3418500651c1578e5b89a567 (diff) | |
download | FreeBSD-src-771796b063b65eae334aa668ceb7a63c233c926f.zip FreeBSD-src-771796b063b65eae334aa668ceb7a63c233c926f.tar.gz |
When trying to execute from a misaligned address raise a SIGBUS with the
invalid address alignment code.
Obtained from: EuroBSDCon
Sponsored by: ABT Systems Ltd
-rw-r--r-- | sys/arm64/arm64/trap.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c index 058490c..a29f915 100644 --- a/sys/arm64/arm64/trap.c +++ b/sys/arm64/arm64/trap.c @@ -377,6 +377,11 @@ do_el0_sync(struct trapframe *frame) case EXCP_UNKNOWN: el0_excp_unknown(frame); break; + case EXCP_PC_ALIGN: + td = curthread; + call_trapsignal(td, SIGBUS, BUS_ADRALN, (void *)frame->tf_elr); + userret(td, frame); + break; case EXCP_BRK: td = curthread; call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_elr); |