ソースを参照

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.
Daniel Bertalan 2 年 前
コミット
f18e7659a6
1 ファイル変更4 行追加0 行削除
  1. 4 0
      Userland/DynamicLoader/main.cpp

+ 4 - 0
Userland/DynamicLoader/main.cpp

@@ -63,7 +63,11 @@ void _entry(int, char**, char**) __attribute__((used));
 NAKED void _start(int, char**, char**)
 NAKED void _start(int, char**, char**)
 {
 {
 #if ARCH(AARCH64)
 #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(
     asm(
+        "mov x29, 0\n"
+        "mov x30, 0\n"
         "bl _entry\n");
         "bl _entry\n");
 #else
 #else
     asm(
     asm(