【发布时间】:2019-09-07 14:17:07
【问题描述】:
如果我最初理解得很好,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 程序,如果不可能,下一步是将 cBPF 转换为 eBPF。
问题:
1) 在最后一个net/core/filter.c 中运行jitted/converted cbpf 过滤器的实际调用在哪里?
2) 将 cBPF 程序作为 eBPF 程序执行的函数调用序列是什么?
【问题讨论】: