powerpc/kprobes: Dereference function pointers only if the address does not belong...
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Mon, 30 Oct 2017 15:12:09 +0000 (20:42 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 1 Nov 2017 04:51:03 +0000 (15:51 +1100)
This makes the changes introduced in commit 83e840c770f2c5
("powerpc64/elfv1: Only dereference function descriptor for non-text
symbols") to be specific to the kprobe subsystem.

We previously changed ppc_function_entry() to always check the provided
address to confirm if it needed to be dereferenced. This is actually
only an issue for kprobe blacklisted asm labels (through use of
_ASM_NOKPROBE_SYMBOL) and can cause other issues with ftrace. Also, the
additional checks are not really necessary for our other uses.

As such, move this check to the kprobes subsystem.

Fixes: 83e840c770f2 ("powerpc64/elfv1: Only dereference function descriptor for non-text symbols")
Cc: stable@vger.kernel.org # v4.13+
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/kprobes.c

index 367494dc67d9e89a34ae7273b737479349987aef..bebc3007a793af02394909f47d29f30ab79c5b86 100644 (file)
@@ -600,7 +600,12 @@ NOKPROBE_SYMBOL(kprobe_fault_handler);
 
 unsigned long arch_deref_entry_point(void *entry)
 {
 
 unsigned long arch_deref_entry_point(void *entry)
 {
-       return ppc_global_function_entry(entry);
+#ifdef PPC64_ELF_ABI_v1
+       if (!kernel_text_address((unsigned long)entry))
+               return ppc_global_function_entry(entry);
+       else
+#endif
+               return (unsigned long)entry;
 }
 NOKPROBE_SYMBOL(arch_deref_entry_point);
 
 }
 NOKPROBE_SYMBOL(arch_deref_entry_point);