Re: [PATCH] ARM: kprobes: Explicitly assign register for local variables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


On 9/27/2023 6:11 PM, Ard Biesheuvel wrote:
On Wed, 27 Sept 2023 at 09:44, Aiqun(Maria) Yu <quic_aiquny@xxxxxxxxxxx> wrote:

On 9/27/2023 5:26 PM, Ard Biesheuvel wrote:
Hello Maria,

On Wed, 27 Sept 2023 at 06:00, Maria Yu <quic_aiquny@xxxxxxxxxxx> wrote:

Registers r7 is removed in clobber list, so compiler may choose r7 for
local variables usage, while r7 will be actually updated by the inline asm

The inline asm does not update R7, it preserves and restores it.
That is the asm is updating r7 purposely and compiler still choose r7
for the asm local varialbe and use it inside the asm code.
So the change is to fix the issue when "r7 is removed from the clobber
list of current asm code while actually r7 shouldn't be choosed for the
current asm local variables".
The issue is only reproducible when ftrace is not enabled, and r7 is
removed from the current clobber list.

Let me have the assemble code that will make you understand better.

--the original code:
"mov    r11, r7                 \n\t"
"ldmia  %[regs], {r0-r7}        \n\t"
"blx    %[fn]                   \n\t"
"mov    r7, r11                 \n\t"

--After compile to choose register for [fn] and [regs].
mov     r11, r7
ldr  r7, [r1, #16] //r7 used for store asi->insn_fn
ldmia.w  ip, {r0, r1, r2, r3, r4, r5, r6, r7}
blx r7
mov r7,r11

The current change is to avoid by fix the registers for local variable
usage and not choose r7 for [fn].

OK, I understand now, thanks.

Would it help if we just always enabled frame pointers for this source file?

--- a/arch/arm/probes/kprobes/Makefile
+++ b/arch/arm/probes/kprobes/Makefile
@@ -9,6 +9,7 @@ test-kprobes-objs               := test-core.o
  obj-$(CONFIG_KPROBES)          += actions-thumb.o checkers-thumb.o
  test-kprobes-objs              += test-thumb.o
+KBUILD_CFLAGS                  += -fno-omit-frame-pointer
I've tried this before, but it didn't work.
The compiler(clang 17 here I am using) will still complain for "inline asm clobber list contains reserved registers" when ftrace enabled.
  obj-$(CONFIG_KPROBES)          += actions-arm.o checkers-arm.o
  obj-$(CONFIG_OPTPROBES)                += opt-arm.o

Thx and BRs,
Aiqun(Maria) Yu

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux