aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/kprobes.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index db3cd3e60bdd..a1606a4224e1 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -1795,10 +1795,14 @@ int register_jprobe(struct jprobe *jp)
1795 unsigned long addr, offset; 1795 unsigned long addr, offset;
1796 struct kprobe *kp = &jp->kp; 1796 struct kprobe *kp = &jp->kp;
1797 1797
1798 /* Verify probepoint is a function entry point */ 1798 /*
1799 * Verify probepoint as well as the jprobe handler are
1800 * valid function entry points.
1801 */
1799 addr = arch_deref_entry_point(jp->entry); 1802 addr = arch_deref_entry_point(jp->entry);
1800 1803
1801 if (kallsyms_lookup_size_offset(addr, NULL, &offset) && offset == 0) { 1804 if (kallsyms_lookup_size_offset(addr, NULL, &offset) && offset == 0 &&
1805 kprobe_on_func_entry(kp->addr, kp->symbol_name, kp->offset)) {
1802 kp->pre_handler = setjmp_pre_handler; 1806 kp->pre_handler = setjmp_pre_handler;
1803 kp->break_handler = longjmp_break_handler; 1807 kp->break_handler = longjmp_break_handler;
1804 return register_kprobe(kp); 1808 return register_kprobe(kp);