summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-18 16:02:56 +0000
committerian <ian@FreeBSD.org>2014-05-18 16:02:56 +0000
commitde651b30e730164993d4fa41093184fac17ca6c7 (patch)
tree840ec801fa1fb81d78663d2b07f72832276e8fed
parent4670db3f86733b03125d5881a2806efdd3defd14 (diff)
downloadFreeBSD-src-de651b30e730164993d4fa41093184fac17ca6c7.zip
FreeBSD-src-de651b30e730164993d4fa41093184fac17ca6c7.tar.gz
MFC 256941: make sure the frame is indeed in the kernel memory.
-rw-r--r--sys/arm/arm/stack_machdep.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/arm/arm/stack_machdep.c b/sys/arm/arm/stack_machdep.c
index 36a776a..f1708f5 100644
--- a/sys/arm/arm/stack_machdep.c
+++ b/sys/arm/arm/stack_machdep.c
@@ -43,13 +43,16 @@ __FBSDID("$FreeBSD$");
* APCS where it lays out the stack incorrectly. Because of this we disable
* this when building for ARM EABI or when building with clang.
*/
+
+extern vm_offset_t kernel_vm_end;
+
static void
stack_capture(struct stack *st, u_int32_t *frame)
{
#if !defined(__ARM_EABI__) && !defined(__clang__)
vm_offset_t callpc;
- while (INKERNEL(frame)) {
+ while (INKERNEL(frame) && (vm_offset_t)frame < kernel_vm_end) {
callpc = frame[FR_SCP];
if (stack_put(st, callpc) == -1)
break;
OpenPOWER on IntegriCloud