docker bpf_get_ns_current_pid_tgid帮助函数在不同eBPF程序类型中的兼容性

628mspwn  于 2023-06-05  发布在  Docker
关注(0)|答案(1)|浏览(145)

我目前正在处理一个用例,在Docker容器中运行eBPF程序。我想根据进程ID(PID)过滤请求,但从我的钩子(refer)获得的PID遇到了问题。具体来说,我在cgroup/connect 4上放置了一个钩子,但是当我试图加载程序时,我收到错误消息unknown func bpf_get_ns_current_pid_tgid#120
但是,当我在kprobe方法中使用bpf_get_ns_current_pid_tgid函数时,它工作正常。我怀疑bpf_get_ns_current_pid_tgid可能不是每个eBPF程序类型都支持。
有没有人能提供哪些eBPF程序类型支持bpf_get_ns_current_pid_tgid辅助函数的信息?我将非常感谢任何见解或参考文档,可以帮助澄清这个兼容性问题。
提前感谢您的帮助!

wqsoz72f

wqsoz72f1#

你是对的,不是所有的辅助函数在所有的上下文中都可用。bpf_get_ns_current_pid_tgid函数仅在以下程序类型中可用:

  • BPF_PROG_TYPE_KPROBE
  • BPF_PROG_TYPE_LSM
  • BPF_PROG_TYPE_PERF_EVENT
  • BPF_PROG_TYPE_RAW_TRACEPOINT
  • BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
  • BPF_PROG_TYPE_SYSCALL
  • BPF_PROG_TYPE_TRACEPOINT
  • BPF_PROG_TYPE_TRACING

但是,如果它是调用进程的PID,则可以使用bpf_get_current_pid_tgid助手,该助手在以下程序类型中可用:

  • BPF_PROG_TYPE_CGROUP_SOCK
  • BPF_PROG_TYPE_CGROUP_SOCK_ADDR
  • BPF_PROG_TYPE_KPROBE
  • BPF_PROG_TYPE_LSM
  • BPF_PROG_TYPE_PERF_EVENT
  • BPF_PROG_TYPE_RAW_TRACEPOINT
  • BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
  • BPF_PROG_TYPE_SK_MSG
  • BPF_PROG_TYPE_SYSCALL
  • BPF_PROG_TYPE_TRACEPOINT
  • BPF_PROG_TYPE_TRACING

对于其他辅助函数,您可以运行bpftool feature命令,以在本地系统上的任何辅助函数中找出这一点。
或者,您可以找到您感兴趣的程序类型的struct bpf_verifier_ops。然后查看.get_func_proto字段指示的 *_func_proto函数。sock_addr_func_proto,它揭示了允许的帮助程序调用。访问源代码的好处是,它们还显示了bpftool输出中没有详细说明的其他需求,如kconfig设置、附件类型和运行时模式限制

相关问题