aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64/amd64/db_trace.c
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2005-12-23 21:33:55 +0000
committerJeff Roberson <jeff@FreeBSD.org>2005-12-23 21:33:55 +0000
commit660002d398fc8ef90b6010f25d7dbbca18f42e42 (patch)
treea85b28a4c710154b53c92673280c6796e3e24e7c /sys/amd64/amd64/db_trace.c
parent49bdcff518a6e81f55a2febd17f4c004daebc940 (diff)
downloadsrc-660002d398fc8ef90b6010f25d7dbbca18f42e42.tar.gz
src-660002d398fc8ef90b6010f25d7dbbca18f42e42.zip
- Improve the INKERNEL macro such that it can no longer give false positives.
This fixes the stack(9) functionality. Submitted by: Antoine Brodin <antoine.brodin@laposte.net>
Notes
Notes: svn path=/head/; revision=153694
Diffstat (limited to 'sys/amd64/amd64/db_trace.c')
-rw-r--r--sys/amd64/amd64/db_trace.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/amd64/amd64/db_trace.c b/sys/amd64/amd64/db_trace.c
index d4263956629e..274d56fec6bc 100644
--- a/sys/amd64/amd64/db_trace.c
+++ b/sys/amd64/amd64/db_trace.c
@@ -180,7 +180,7 @@ db_ss(struct db_variable *vp, db_expr_t *valuep, int op)
* Stack trace.
*/
#define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \
- || (va) >= KERNBASE)
+ || ((va) >= KERNBASE && (va) < VM_MAX_KERNEL_ADDRESS))
struct amd64_frame {
struct amd64_frame *f_frame;
@@ -515,6 +515,10 @@ stack_save(struct stack *st)
break;
if (stack_put(st, callpc) == -1)
break;
+ if (frame->f_frame <= frame ||
+ (vm_offset_t)frame->f_frame >=
+ (vm_offset_t)rbp + KSTACK_PAGES * PAGE_SIZE)
+ break;
frame = frame->f_frame;
}
}