aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/dev/dtrace
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2020-12-08 17:57:18 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2020-12-08 17:57:18 +0000
commit9b9e7f4c51abea7a0776a283d3d4f583139bea08 (patch)
treef0a31219b740d97a5350509330dceab40bf8b5f8 /sys/cddl/dev/dtrace
parenta70c318de4824b0b6eed4c0e2fc591edff261240 (diff)
downloadsrc-9b9e7f4c51abea7a0776a283d3d4f583139bea08.tar.gz
src-9b9e7f4c51abea7a0776a283d3d4f583139bea08.zip
Stack unwinding robustness fixes for RISC-V.
- Push the kstack_contains check down into unwind_frame() so that it is honored by DDB and DTrace. - Check that the trapframe for an exception frame is contained in the traced thread's kernel stack for DDB traces. Reviewed by: markj Obtained from: CheriBSD Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D27357
Notes
Notes: svn path=/head/; revision=368454
Diffstat (limited to 'sys/cddl/dev/dtrace')
-rw-r--r--sys/cddl/dev/dtrace/riscv/dtrace_isa.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/cddl/dev/dtrace/riscv/dtrace_isa.c b/sys/cddl/dev/dtrace/riscv/dtrace_isa.c
index aec2381c7c85..aab6797be9b3 100644
--- a/sys/cddl/dev/dtrace/riscv/dtrace_isa.c
+++ b/sys/cddl/dev/dtrace/riscv/dtrace_isa.c
@@ -90,7 +90,7 @@ dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
state.pc = (uintptr_t)dtrace_getpcstack;
while (depth < pcstack_limit) {
- if (unwind_frame(&state))
+ if (!unwind_frame(curthread, &state))
break;
if (!INKERNEL(state.pc) || !INKERNEL(state.fp))
@@ -259,10 +259,10 @@ dtrace_getstackdepth(int aframes)
int scp_offset;
register_t sp;
int depth;
- int done;
+ bool done;
depth = 1;
- done = 0;
+ done = false;
__asm __volatile("mv %0, sp" : "=&r" (sp));
@@ -271,7 +271,7 @@ dtrace_getstackdepth(int aframes)
state.pc = (uintptr_t)dtrace_getstackdepth;
do {
- done = unwind_frame(&state);
+ done = !unwind_frame(curthread, &state);
if (!INKERNEL(state.pc) || !INKERNEL(state.fp))
break;
depth++;