summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-12-23 21:33:55 +0000
committerjeff <jeff@FreeBSD.org>2005-12-23 21:33:55 +0000
commitf1d333e1f58d5cd9b13504c6c7ce20dbdd94c59e (patch)
treea85b28a4c710154b53c92673280c6796e3e24e7c /sys/i386
parente2af894dc58b88ca48c5044e90e3b76abed2b922 (diff)
downloadFreeBSD-src-f1d333e1f58d5cd9b13504c6c7ce20dbdd94c59e.zip
FreeBSD-src-f1d333e1f58d5cd9b13504c6c7ce20dbdd94c59e.tar.gz
- 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>
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/db_trace.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/i386/i386/db_trace.c b/sys/i386/i386/db_trace.c
index 1fbcd43..fb8d0b0 100644
--- a/sys/i386/i386/db_trace.c
+++ b/sys/i386/i386/db_trace.c
@@ -168,7 +168,8 @@ db_ss(struct db_variable *vp, db_expr_t *valuep, int op)
/*
* Stack trace.
*/
-#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK)
+#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK && \
+ ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS)
struct i386_frame {
struct i386_frame *f_frame;
@@ -525,6 +526,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)ebp + KSTACK_PAGES * PAGE_SIZE)
+ break;
frame = frame->f_frame;
}
}
OpenPOWER on IntegriCloud