net/core/filter.c and linux/bpf/verifier.c



如果我最初理解得很好,cBPF验证器和解释器都在net/core/fiter.c范围内,例如sk_run_filter在这里 https://elixir.bootlin.com/linux/v3.2/source/net/core/filter.c#L112 只需转换cBPF指令,将它们应用于仿真寄存器并直接应用于sk_buff。sk_chk_filter检查说明是否合法。

目前我已经看到 filter.c 中仍然有一个bpf_check_classic函数来替换旧的sk_chk_filter。检查后,尝试对程序进行JIT,如果不可能,下一步是在eBPF中转换cBPF。

问题:

1( 在最后net/core/filter.c中运行抖动/转换的 CBPF 滤波器的调用实际上在哪里?

2(使cBPF程序作为eBPF程序执行的函数调用顺序是什么?

据我所知,cBPF程序仅用于seccomp-bpf和套接字过滤器。

  • 对于seccomp-bpf,实际调用是在程序转换为eBPF之后的kernel/seccomp.c
  • 对于套接字过滤器,实际调用是net/core/filter.c,正如您所猜测的。 然后,sk_filter_trim_cap()在内核中的许多位置被调用,用于所有类型的套接字。

相关内容

  • 没有找到相关文章

最新更新