X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9eed27f6f2f002145667fb4abfc5e476b53630e5..59ecf21e36b2332f6adf2a568ef555283d8c119a:/lunaix-os/kernel/debug/trace.c?ds=inline diff --git a/lunaix-os/kernel/debug/trace.c b/lunaix-os/kernel/debug/trace.c index 1cf9ae3..8c5c180 100644 --- a/lunaix-os/kernel/debug/trace.c +++ b/lunaix-os/kernel/debug/trace.c @@ -77,6 +77,10 @@ ksym_getstr(struct ksym_entry* sym) trace_ctx.ksym_table->ksym_label_off + sym->label_off); } +static inline bool valid_fp(ptr_t ptr) { + return KERNEL_STACK < ptr && ptr < KERNEL_EXEC_END; +} + int trace_walkback(struct trace_record* tb_buffer, ptr_t fp, @@ -87,7 +91,7 @@ trace_walkback(struct trace_record* tb_buffer, struct ksym_entry* current = NULL; int i = 0; - while (frame && i < limit) { + while (valid_fp((ptr_t)frame) && i < limit) { ptr_t pc = *(frame + 1); current = trace_sym_lookup(pc);