summaryrefslogtreecommitdiffstats
path: root/sys/amd64
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/amd64
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/amd64')
-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 d426395..274d56f 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;
}
}
OpenPOWER on IntegriCloud