From f18e7659a62571a9d1a4a62ed43c83fecb72e67d Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Sat, 22 Apr 2023 17:30:09 +0200 Subject: [PATCH] DynamicLoader: Ensure that backtrace computation stops at `_start` If we don't set FP and LR to 0, the Kernel might not stop generating backtraces when it reaches `_start`'s stack frame, and might continue by reading garbage memory instead. This leads to a kernel panic, as SafeMem access faults aren't handled properly in the AArch64 kernel yet. We might want to ensure that the kernel zeroes out all registers when a new process is created. --- Userland/DynamicLoader/main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Userland/DynamicLoader/main.cpp b/Userland/DynamicLoader/main.cpp index fa39761975..2a82b64304 100644 --- a/Userland/DynamicLoader/main.cpp +++ b/Userland/DynamicLoader/main.cpp @@ -63,7 +63,11 @@ void _entry(int, char**, char**) __attribute__((used)); NAKED void _start(int, char**, char**) { #if ARCH(AARCH64) + // Make sure backtrace computation stops here by setting FP and LR to 0. + // FIXME: The kernel should ensure that registers are zeroed on program start asm( + "mov x29, 0\n" + "mov x30, 0\n" "bl _entry\n"); #else asm(