diff options
author | John Baldwin <jhb@FreeBSD.org> | 2020-12-08 17:57:18 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2020-12-08 17:57:18 +0000 |
commit | 9b9e7f4c51abea7a0776a283d3d4f583139bea08 (patch) | |
tree | f0a31219b740d97a5350509330dceab40bf8b5f8 /sys/cddl/dev/dtrace | |
parent | a70c318de4824b0b6eed4c0e2fc591edff261240 (diff) | |
download | src-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.c | 8 |
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++; |