ebpf 中的有界循环。现在验证者是否检查程序是否为 DAG?

bounded loops in ebpf. Does now the verifier check if the program is a DAG?

因为 ebpf 程序现在允许有界循环 https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit/?id=2589726d12a1b12eaaa93c7f1ea64287e383c7a5 如果程序控制流是有向无环图,验证者是否仍然在第一遍检查?

是,it still does,并在两种情况下拒绝有后缘的程序:

  • 如果程序由非特权用户加载。 env->allow_ptr_leaks 布尔值表示特权用户。
  • 如果后缘是performed using a call只有正常的跳转才能形成有界循环(这并不意味着你不能在内部进行有界循环的bpf-to-bpf调用) .