OSDN Git Service

arm/ftrace: Fix BE text poking
authorPeter Zijlstra <peterz@infradead.org>
Fri, 7 Feb 2020 11:57:36 +0000 (12:57 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 11 Feb 2020 11:56:26 +0000 (12:56 +0100)
The __patch_text() function already applies __opcode_to_mem_*(), so
when __opcode_to_mem_*() is not the identity (BE*), it is applied
twice, wrecking the instruction.

Fixes: 42e51f187f86 ("arm/ftrace: Use __patch_text()")
Reported-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Dmitry Osipenko <digetx@gmail.com>
arch/arm/kernel/ftrace.c

index 2a5ff69..10499d4 100644 (file)
@@ -78,13 +78,10 @@ static int ftrace_modify_code(unsigned long pc, unsigned long old,
 {
        unsigned long replaced;
 
-       if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) {
+       if (IS_ENABLED(CONFIG_THUMB2_KERNEL))
                old = __opcode_to_mem_thumb32(old);
-               new = __opcode_to_mem_thumb32(new);
-       } else {
+       else
                old = __opcode_to_mem_arm(old);
-               new = __opcode_to_mem_arm(new);
-       }
 
        if (validate) {
                if (probe_kernel_read(&replaced, (void *)pc, MCOUNT_INSN_SIZE))