CNCF Graduatedプロジェクト - 11/24現在の12ヶ月以内のコミット数で33129, これは3位 Argoの11180と比べて 3倍程度のコミット数:) - cf.https://www.cncf.io/announcements/2023/10/11/cloud-native-computing-foundation-announces-cilium-graduation/ - Isovalent が Cilium以外にもTetragon やHubbleなども実装している - 子供向けにeBPFを説明する謎の本まである力の入れ具合はすごい https://isovalent.com/books/children-guide-to-ebpf/ Isovalentのサイト見ると all explained so that your kids or colleagues can follow along too と書いているので、多分 これを読むとebpf 完全理解したができると思われます....(?)→ 11
int e, struct bpf_verifier_env *env) {(以下中略および重要なコードを抜粋 ) if (w < 0 || w >= env->prog->len) { verbose_linfo(env, t, "%d: ", t); verbose(env, "jump out of range from insn %d to %d\n", t, w); return -EINVAL; } if (e == BRANCH) { /* mark branch target for state pruning */ mark_prune_point(env, w); mark_jmp_point(env, w); } (以下中略) } cf. https://elixir.bootlin.com/linux/v6.12/source/kernel/bpf/verifier.c#L16051 CFGでエッジ(辺)に関してケアしつつ、 どのようにpushするかを判断してる 71
int e, struct bpf_verifier_env *env) {(以下中略および重要なコードを抜粋 ) if (w < 0 || w >= env->prog->len) { verbose_linfo(env, t, "%d: ", t); verbose(env, "jump out of range from insn %d to %d\n", t, w); return -EINVAL; } if (e == BRANCH) { /* mark branch target for state pruning */ mark_prune_point(env, w); mark_jmp_point(env, w); } (以下中略) } cf. https://elixir.bootlin.com/linux/v6.12/source/kernel/bpf/verifier.c#L16051 命令のindexを見て定義外ジャンプ していないかをチェック 条件付き分岐が発生する場合は、 ジャンプ先でも枝刈りのためのポイントを 作る(visit_insnでは現在の命令につけてた) 72