From 1d02ac35fc1d9ff98603db27016d5bfa0af1e1fc Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 19 Jan 2020 13:53:22 +0100 Subject: [PATCH] Kernel: Limit Thread::raw_backtrace() to the max profiler stack size Let's avoid walking overly long stacks here, since kmalloc() is finite. --- Kernel/Thread.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 65e7c489ba..12c34c1a75 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -798,11 +799,13 @@ Vector Thread::raw_backtrace(u32 ebp) const { auto& process = const_cast(this->process()); ProcessPagingScope paging_scope(process); - Vector backtrace; + Vector backtrace; backtrace.append(ebp); for (u32* stack_ptr = (u32*)ebp; process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2); stack_ptr = (u32*)*stack_ptr) { u32 retaddr = stack_ptr[1]; backtrace.append(retaddr); + if (backtrace.size() == Profiling::max_stack_frame_count) + break; } return backtrace; }