# BPF verifier
## 定義
BPF verifier は、ユーザ空間から渡された BPF プログラムをカーネル内で実行する前に解析し、許可できるメモリアクセス、制御フロー、ヘルパー利用、終了性などを検査する安全境界である。信頼できないユーザ空間を保護する役割があるため、開発者支援用の検査をユーザ空間へ移す場合でも、本番の安全性検査そのものをカーネルから外すことはできない。(Source: [[@2026__LWN__BPF in the agentic era]])
## エージェント時代の開発課題
コーディングエージェントは、生成、実行、エラー観測、修正を短いループで繰り返す。そのため verifier のエラーが大きな内部状態ダンプになり、テストのたびに仮想マシン起動を要する構成は、エージェントの性能を下げる。課題は安全性を弱めることではなく、安全なまま有用なフィードバックを早く返すことである。(Source: [[@2026__LWN__BPF in the agentic era]])
## 提案されている分業
- Rust コンパイラで、通常のプログラムの単純な型・所有権・構文上の誤りを早期検出する。
- verifier は安全境界としてカーネル内に残す。
- 通常の Rust 製 BPF プログラムが、Rust コンパイラを通過した後に verifier で大量のエラーを出さない状態を目標にする。
- 避けられないエラーには、何が起きたか、なぜ起きたか、どう直すかを含める。
- user-mode Linux 上の検証は、本番の信頼境界を移さず、開発時のエラー返却を速くする手段として検討する。
この分業は記事が報告した提案であり、互換性が保証された実装仕様ではない。(Source: [[@2026__LWN__BPF in the agentic era]])
## 表現力と検証コストのトレードオフ
候補として、より大きなスタック、深い呼び出し連鎖、間接関数呼び出し、構造体の値返し、128 ビット整数、長いジャンプ、100 万命令制限の見直し、BPF arena の活用が挙げられた。機能を増やすほど verifier が追跡すべき状態空間と、実行時検査へ押し出す責任の境界が広がる。(Source: [[@2026__LWN__BPF in the agentic era]])
ループに対する **widening** は、ループ変数の広い値域を一般化して扱い、検証の反復回数を抑える案である。状態の精度低下を実行時検査で補う可能性があるため、検証時間、安全性、実行時オーバーヘッドを同時に評価する必要がある。(Source: [[@2026__LWN__BPF in the agentic era]])
LSFMM 2026 のスライドはこの方向を具体化し、arena 型メモリ、`PTR_TO_FUNC` による間接呼び出し、5 個を超える引数と構造体返却の拡張呼び出し規約、`panic=unwind` と `.bpf_cleanup`、`bpf_throw()` を組み合わせる設計を示した。verifier の役割を停止性の完全証明からメモリ安全性の検証へ寄せ、証明できない箇所は実行時検査へフォールバックさせる考え方である。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
スライドは、ループの back-edge で状態を `[5,5]` から `[5,10]`、さらに必要なら `[MIN, MAX]` へ一般化する widening を示す。従来の `O(body × iterations)` に対し、widen の段数に依存する `O(body × widen_steps)` を目指すが、これは資料上の設計目標であり、実装済み性能結果ではない。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
## 横断的知見
- **安全境界をカーネル内に固定し、開発者向け説明を外側で改善する二層化が、エージェント対応の基本形になる**: BPF はカーネル内 verifier を必要とする一方、エージェントは短いフィードバックを必要とする。Rust の早期診断、開発用 verifier、説明的なエラー表示を組み合わせる提案は、安全性と反復速度を同じ層で無理に解こうとしない設計である。(Source: [[@2026__LWN__BPF in the agentic era]], [[eBPF]])
- **verifier の改善は、拒否を減らすことと安全性を弱めることを分離する**: LWN の報告は Rust 側で単純な誤りを早期検出し、カーネル内 verifier を安全境界として残す方向を示す。スライドはさらに、証明不能な場合の実行時検査、panic の明示的な unwind、arena と型付きポインタを組み合わせる。両資料を合わせると、目標は「何でも通す verifier」ではなく「安全性を保ったまま、エージェントが修正できる検証経路」である。(Source: [[@2026__LWN__BPF in the agentic era]], [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
## 未解決の問い
- Rust コンパイラ通過と verifier 通過の対応を、unsafe コード、インラインアセンブリ、ヘルパーの権限、Linux カーネル版差異を含めてどこまで定式化できるか。
- user-mode Linux 上の検証結果と実カーネル verifier の差異を、エージェントの開発ループでどう扱うか。
- widening が検証時間、誤拒否、実行時検査のオーバーヘッドに与える影響はどの程度か。
- verifier の説明的エラーを、LLM が誤った修正を反復しない形式へどう設計するか。
- BPF arena、長いジャンプ、関数呼び出し拡張を組み合わせたとき、安全性検査の複雑性はどのように増えるか。
- スライドが示す「verifier はメモリ安全性を証明し、停止性は実行時機構で扱う」という分業を、形式的な安全性定義と実カーネルの性能評価へどう落とし込むか。
## 関連
- 概念: [[BPF]] / [[eBPF]] / [[Rust-BPF]] / [[BPF arena memory]] / [[形式手法]] / [[フィードバックループ]] / [[エージェント型コーディング]]
- エンティティ: [[Alexei Starovoitov]] / [[Daniel Borkmann]]
- ソース: [[@2026__LWN__BPF in the agentic era]] / [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]]
## 出典
- [[@2026__LWN__BPF in the agentic era]](verifier の役割分離、Rust 連携、エラー表示、widening の提案)
- [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]](arena、間接呼び出し、widening、panic、ツールキットの設計案)