Browse Source

[lwp][rv64] restore tp register in arch_thread_signal_enter to fix user-mode memory access

Yulong Wang 3 weeks ago
parent
commit
e7a40ae6ec
2 changed files with 4 additions and 0 deletions
  1. 3 0
      components/lwp/arch/risc-v/rv64/lwp_gcc.S
  2. 1 0
      libcpu/risc-v/common64/stackframe.h

+ 3 - 0
components/lwp/arch/risc-v/rv64/lwp_gcc.S

@@ -178,6 +178,9 @@ arch_thread_signal_enter:
     /* restore user GP */
     LOAD gp, FRAME_OFF_GP(s3)
 
+    /* restore user TP */
+    LOAD tp, FRAME_OFF_TP(s3)
+
     /**
      * handler(signo, psi, ucontext);
      */

+ 1 - 0
libcpu/risc-v/common64/stackframe.h

@@ -41,6 +41,7 @@
 #define FRAME_OFF_SSTATUS   BYTES(2)
 #define FRAME_OFF_SP        BYTES(32)
 #define FRAME_OFF_GP        BYTES(3)
+#define FRAME_OFF_TP        BYTES(4)
 
 /* switch frame */
 #define RT_HW_SWITCH_CONTEXT_SSTATUS    0