diff options
author | andrew <andrew@FreeBSD.org> | 2015-08-24 17:28:19 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-08-24 17:28:19 +0000 |
commit | d80880058c07a394b3802bcb44105235a40e2f99 (patch) | |
tree | f965924a17130889346a888a5d1a400ca9469ea4 | |
parent | 56efeb95675425946db45b35bbacd54fb76f6c2e (diff) | |
download | FreeBSD-src-d80880058c07a394b3802bcb44105235a40e2f99.zip FreeBSD-src-d80880058c07a394b3802bcb44105235a40e2f99.tar.gz |
Check the frame pointer is within the kernel before accessing it.
-rw-r--r-- | sys/arm64/arm64/unwind.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/arm64/arm64/unwind.c b/sys/arm64/arm64/unwind.c index 13e0b54..bef9c6f 100644 --- a/sys/arm64/arm64/unwind.c +++ b/sys/arm64/arm64/unwind.c @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <machine/stack.h> +#include <machine/vmparam.h> int unwind_frame(struct unwind_state *frame) @@ -39,7 +40,7 @@ unwind_frame(struct unwind_state *frame) uint64_t fp; fp = frame->fp; - if (fp == 0) + if (!INKERNEL(fp)) return (-1); frame->sp = fp + 0x10; |