验证器的首要职责是确保 eBPF 程序不会陷入无限循环、不会阻塞内核执行。它会对程序的控制流进行完整分析,要求所有执行路径都能在有限步骤内结束。自 Linux 5.3 起,验证器开始支持有界循环,即程序可包含循环,但必须能证明循环存在必然成立的退出条件。
验证器会追踪寄存器和栈的状态,确保程序不会发生越界内存访问、不会使用未初始化的变量,并对 Helper 函数的参数进行严格的类型检查。任何可能导致非法状态的路径都会被判定为验证失败。
为防止验证器自身在分析时耗尽资源,eBPF 程序的大小与复杂度受到限制。字节码指令数上限在 Linux 5.8 之后已放宽至 100 万条(BPF_COMPLEXITY_LIMIT_INSNS),而对无特权加载的程序仍保留 4096 条指令的限制(BPF_MAXINSNS)。验证器必须能在配置的复杂度上限内完成对所有路径的分析。