You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

uprobes的PID过滤器正常,uretprobes的PID过滤失效致重复触发

Uretprobe PID过滤失效导致多次触发的问题

测试uprobes过程中发现,PID过滤器仅对uprobe生效,uretprobes不受PID过滤控制。具体场景如下:

  • 运行两个独立应用,分别为PIDpid1和pid2的进程附加针对Func1函数的uprobe,代码实现:
uprobe_opts.func_name = "Func1";
uprobe_opts.retprobe = false;
uprobe_link =
        bpf_program__attach_uprobe_opts(bpf_func_ent,
                                        pid1,
                                        lib_path,
                                        0, &uprobe_opts);

uprobe_opts.func_name = "Func1";
uprobe_opts.retprobe = false;
uprobe_link =
       bpf_program__attach_uprobe_opts(bpf_func_ent,
                                        pid2,
                                        lib_path,
                                        0, &uprobe_opts);
  • 同时为这两个进程附加针对Func1的uretprobe,代码实现:
uprobe_opts.func_name = "Func1";
uprobe_opts.retprobe = true;
uprobe_link =
        bpf_program__attach_uprobe_opts(bpf_func_ret,
                                        pid1,
                                        lib_path,
                                        0, &uprobe_opts);
uprobe_opts.func_name = "Func1";
uprobe_opts.retprobe = true;
uprobe_link =
        bpf_program__attach_uprobe_opts(bpf_func_ret,
                                        pid2,
                                        lib_path,
                                        0, &uprobe_opts);

其中lib_path是目标共享库的路径。

现象总结:

  • 调用Func1时,对应uprobe的入口函数仅触发1次(符合预期),但uretprobe的返回函数会被触发2次;
  • 删除针对pid2的uretprobe后,uprobe和uretprobe均仅触发1次,恢复正常;
  • 若添加更多不同PID的uretprobe,uretprobe的触发次数会随附加数量线性增加。

当前环境:Linux内核版本5.14,libbpf版本1.1。

内容的提问来源于stack exchange,提问作者user123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:42:42