diff options
author | Jeff Roberson <jeff@FreeBSD.org> | 2005-12-23 21:33:55 +0000 |
---|---|---|
committer | Jeff Roberson <jeff@FreeBSD.org> | 2005-12-23 21:33:55 +0000 |
commit | 660002d398fc8ef90b6010f25d7dbbca18f42e42 (patch) | |
tree | a85b28a4c710154b53c92673280c6796e3e24e7c /sys/amd64/amd64/db_trace.c | |
parent | 49bdcff518a6e81f55a2febd17f4c004daebc940 (diff) | |
download | src-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.c | 6 |
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; } } |