summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2020-06-24 20:19:14 +0000
committerkettenis <kettenis@openbsd.org>2020-06-24 20:19:14 +0000
commitbf74634c57442c28061010e2bea93eccfb8599c1 (patch)
treefc2171abd6b0f2b3f8ad3bfa07d0f16118796508 /sys
parentProperly document the return values of EVP_PKEY_base_id(3) (diff)
downloadwireguard-openbsd-bf74634c57442c28061010e2bea93eccfb8599c1.tar.xz
wireguard-openbsd-bf74634c57442c28061010e2bea93eccfb8599c1.zip
Terminate stack trace at userland boundary.
ok gkoehler@
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/powerpc64/powerpc64/db_trace.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/arch/powerpc64/powerpc64/db_trace.c b/sys/arch/powerpc64/powerpc64/db_trace.c
index ed6bda6328a..f2b4ef32a6e 100644
--- a/sys/arch/powerpc64/powerpc64/db_trace.c
+++ b/sys/arch/powerpc64/powerpc64/db_trace.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: db_trace.c,v 1.5 2020/06/22 18:49:36 kettenis Exp $ */
+/* $OpenBSD: db_trace.c,v 1.6 2020/06/24 20:19:14 kettenis Exp $ */
/* $NetBSD: db_trace.c,v 1.15 1996/02/22 23:23:41 gwr Exp $ */
/*
@@ -97,6 +97,7 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count,
char c, *cp = modif;
Elf_Sym *sym;
int has_frame, trace_proc = 0;
+ int end_trace = 0;
while ((c = *cp++) != 0) {
if (c == 't')
@@ -163,6 +164,9 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count,
frame->exc);
}
+ if (frame->srr1 & PSL_PR)
+ end_trace = 1;
+
sp = frame->fixreg[1];
lr = frame->srr0 + 4;
} else if (!has_frame) {
@@ -180,6 +184,11 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count,
}
callpc = lr - 4;
+ if (end_trace) {
+ (*pr)("End of kernel: 0x%lx lr 0x%lx\n", sp, callpc);
+ break;
+ }
+
--count;
}
}