]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
samples/ftrace: Adjust LoongArch register restore order in direct calls
authorChenghao Duan <duanchenghao@kylinos.cn>
Wed, 31 Dec 2025 07:19:25 +0000 (15:19 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 8 Jan 2026 09:14:50 +0000 (10:14 +0100)
commit bb85d206be208bbf834883e948125a35ac59993a upstream.

Ensure that in the ftrace direct call logic, the CPU register state
(with ra = parent return address) is restored to the correct state after
the execution of the custom trampoline function and before returning to
the traced function. Additionally, guarantee the correctness of the jump
logic for jr t0 (traced function address).

Cc: stable@vger.kernel.org
Fixes: 9cdc3b6a299c ("LoongArch: ftrace: Add direct call support")
Reported-by: Youling Tang <tangyouling@kylinos.cn>
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
samples/ftrace/ftrace-direct-modify.c
samples/ftrace/ftrace-direct-multi-modify.c
samples/ftrace/ftrace-direct-multi.c
samples/ftrace/ftrace-direct-too.c
samples/ftrace/ftrace-direct.c

index 328c6e60f024bfa5d1d1819131ca6022d214ae7a..3bb791e0b05eca79ae20aa47870ff9ee44e1542c 100644 (file)
@@ -176,8 +176,8 @@ asm (
 "      st.d    $t0, $sp, 0\n"
 "      st.d    $ra, $sp, 8\n"
 "      bl      my_direct_func1\n"
-"      ld.d    $t0, $sp, 0\n"
-"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $ra, $sp, 0\n"
+"      ld.d    $t0, $sp, 8\n"
 "      addi.d  $sp, $sp, 16\n"
 "      jr      $t0\n"
 "      .size           my_tramp1, .-my_tramp1\n"
@@ -189,8 +189,8 @@ asm (
 "      st.d    $t0, $sp, 0\n"
 "      st.d    $ra, $sp, 8\n"
 "      bl      my_direct_func2\n"
-"      ld.d    $t0, $sp, 0\n"
-"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $ra, $sp, 0\n"
+"      ld.d    $t0, $sp, 8\n"
 "      addi.d  $sp, $sp, 16\n"
 "      jr      $t0\n"
 "      .size           my_tramp2, .-my_tramp2\n"
index f943e40d57fd32ed3fd1c57c9b197ac916ebe33d..cc7f42999c001b85fada522ff749c356b84ec3b2 100644 (file)
@@ -199,8 +199,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func1\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp1, .-my_tramp1\n"
@@ -215,8 +215,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func2\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp2, .-my_tramp2\n"
index aed6df2927ce1833af8729810ea182ad5e492bfb..1cebee87c5a6045ffb2daef4411fab22e19998e6 100644 (file)
@@ -131,8 +131,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"
index 6ff546a5d7eb05270683701b9693f3be2101b36d..81e6fb874d8aac5fd92344131e3c3737f394a55e 100644 (file)
@@ -143,8 +143,8 @@ asm (
 "      ld.d    $a0, $sp, 0\n"
 "      ld.d    $a1, $sp, 8\n"
 "      ld.d    $a2, $sp, 16\n"
-"      ld.d    $t0, $sp, 24\n"
-"      ld.d    $ra, $sp, 32\n"
+"      ld.d    $ra, $sp, 24\n"
+"      ld.d    $t0, $sp, 32\n"
 "      addi.d  $sp, $sp, 48\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"
index ef0945670e1eb985da1397e7e496cf4a768e49b7..7b0ff59f650f7349c08c693b9afe545c56442bdf 100644 (file)
@@ -124,8 +124,8 @@ asm (
 "      st.d    $ra, $sp, 16\n"
 "      bl      my_direct_func\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"