Merge tag 'for-v3.19' of git://git.infradead.org/battery-2.6
[pandora-kernel.git] / kernel / kprobes.c
index 3995f54..06f5830 100644 (file)
@@ -915,7 +915,7 @@ static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
 #ifdef CONFIG_KPROBES_ON_FTRACE
 static struct ftrace_ops kprobe_ftrace_ops __read_mostly = {
        .func = kprobe_ftrace_handler,
-       .flags = FTRACE_OPS_FL_SAVE_REGS,
+       .flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_IPMODIFY,
 };
 static int kprobe_ftrace_enabled;
 
@@ -1410,16 +1410,10 @@ static inline int check_kprobe_rereg(struct kprobe *p)
        return ret;
 }
 
-static int check_kprobe_address_safe(struct kprobe *p,
-                                    struct module **probed_mod)
+int __weak arch_check_ftrace_location(struct kprobe *p)
 {
-       int ret = 0;
        unsigned long ftrace_addr;
 
-       /*
-        * If the address is located on a ftrace nop, set the
-        * breakpoint to the following instruction.
-        */
        ftrace_addr = ftrace_location((unsigned long)p->addr);
        if (ftrace_addr) {
 #ifdef CONFIG_KPROBES_ON_FTRACE
@@ -1431,7 +1425,17 @@ static int check_kprobe_address_safe(struct kprobe *p,
                return -EINVAL;
 #endif
        }
+       return 0;
+}
 
+static int check_kprobe_address_safe(struct kprobe *p,
+                                    struct module **probed_mod)
+{
+       int ret;
+
+       ret = arch_check_ftrace_location(p);
+       if (ret)
+               return ret;
        jump_label_lock();
        preempt_disable();