Skip to content

Commit 0f73ff8

Browse files
rnavIngo Molnar
authored andcommitted
kprobes: Simplify register_jprobes()
Re-factor jprobe registration functions as the current version is getting too unwieldy. Move the actual jprobe registration to register_jprobe() and re-organize code accordingly. Suggested-by: Ingo Molnar <[email protected]> Signed-off-by: Naveen N. Rao <[email protected]> Cc: Ananth N Mavinakayanahalli <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Masami Hiramatsu <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Link: http://lkml.kernel.org/r/089cae4bfe73767f765291ee0e6fb0c3d240e5f1.1499443367.git.naveen.n.rao@linux.vnet.ibm.com Signed-off-by: Ingo Molnar <[email protected]>
1 parent 659b957 commit 0f73ff8

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

kernel/kprobes.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,38 +1771,40 @@ unsigned long __weak arch_deref_entry_point(void *entry)
17711771

17721772
int register_jprobes(struct jprobe **jps, int num)
17731773
{
1774-
struct jprobe *jp;
17751774
int ret = 0, i;
17761775

17771776
if (num <= 0)
17781777
return -EINVAL;
1778+
17791779
for (i = 0; i < num; i++) {
1780-
unsigned long addr, offset;
1781-
jp = jps[i];
1782-
addr = arch_deref_entry_point(jp->entry);
1783-
1784-
/* Verify probepoint is a function entry point */
1785-
if (kallsyms_lookup_size_offset(addr, NULL, &offset) &&
1786-
offset == 0) {
1787-
jp->kp.pre_handler = setjmp_pre_handler;
1788-
jp->kp.break_handler = longjmp_break_handler;
1789-
ret = register_kprobe(&jp->kp);
1790-
} else
1791-
ret = -EINVAL;
1780+
ret = register_jprobe(jps[i]);
17921781

17931782
if (ret < 0) {
17941783
if (i > 0)
17951784
unregister_jprobes(jps, i);
17961785
break;
17971786
}
17981787
}
1788+
17991789
return ret;
18001790
}
18011791
EXPORT_SYMBOL_GPL(register_jprobes);
18021792

18031793
int register_jprobe(struct jprobe *jp)
18041794
{
1805-
return register_jprobes(&jp, 1);
1795+
unsigned long addr, offset;
1796+
struct kprobe *kp = &jp->kp;
1797+
1798+
/* Verify probepoint is a function entry point */
1799+
addr = arch_deref_entry_point(jp->entry);
1800+
1801+
if (kallsyms_lookup_size_offset(addr, NULL, &offset) && offset == 0) {
1802+
kp->pre_handler = setjmp_pre_handler;
1803+
kp->break_handler = longjmp_break_handler;
1804+
return register_kprobe(kp);
1805+
}
1806+
1807+
return -EINVAL;
18061808
}
18071809
EXPORT_SYMBOL_GPL(register_jprobe);
18081810

0 commit comments

Comments
 (0)