@@ -2591,6 +2591,13 @@ static DEFINE_PER_CPU(struct pt_regs, bpf_kprobe_multi_pt_regs);
2591
2591
#define bpf_kprobe_multi_pt_regs_ptr () (NULL)
2592
2592
#endif
2593
2593
2594
+ static unsigned long ftrace_get_entry_ip (unsigned long fentry_ip )
2595
+ {
2596
+ unsigned long ip = ftrace_get_symaddr (fentry_ip );
2597
+
2598
+ return ip ? : fentry_ip ;
2599
+ }
2600
+
2594
2601
static int copy_user_syms (struct user_syms * us , unsigned long __user * usyms , u32 cnt )
2595
2602
{
2596
2603
unsigned long __user usymbol ;
@@ -2829,7 +2836,8 @@ kprobe_multi_link_handler(struct fprobe *fp, unsigned long fentry_ip,
2829
2836
int err ;
2830
2837
2831
2838
link = container_of (fp , struct bpf_kprobe_multi_link , fp );
2832
- err = kprobe_multi_link_prog_run (link , get_entry_ip (fentry_ip ), fregs , false, data );
2839
+ err = kprobe_multi_link_prog_run (link , ftrace_get_entry_ip (fentry_ip ),
2840
+ fregs , false, data );
2833
2841
return is_kprobe_session (link -> link .prog ) ? err : 0 ;
2834
2842
}
2835
2843
@@ -2841,7 +2849,8 @@ kprobe_multi_link_exit_handler(struct fprobe *fp, unsigned long fentry_ip,
2841
2849
struct bpf_kprobe_multi_link * link ;
2842
2850
2843
2851
link = container_of (fp , struct bpf_kprobe_multi_link , fp );
2844
- kprobe_multi_link_prog_run (link , get_entry_ip (fentry_ip ), fregs , true, data );
2852
+ kprobe_multi_link_prog_run (link , ftrace_get_entry_ip (fentry_ip ),
2853
+ fregs , true, data );
2845
2854
}
2846
2855
2847
2856
static int symbols_cmp_r (const void * a , const void * b , const void * priv )
0 commit comments