本文地址:https://www.ebpf.top/post/lpc2026-ebpf-track

每年秋天,内核社区最核心的开发者都会聚到一起,把接下来一两年要落地的东西摊开来吵一遍。今年的 Linux Plumbers Conference 定在 10 月 5 日到 7 日,捷克布拉格。

其中的 eBPF Track 排了 24 场议题,集中在前两天,技术委员会是三位 BPF 维护者 Alexei Starovoitov、Daniel Borkmann 和 Andrii Nakryiko。把 24 份议题摘要逐一读完,今年最值得关注的是两条线:一是 BPF 正在为完整支持 Rust 重写 verifier,二是在 LLM 加速漏洞发现的背景下,BPF 被推到了不重启缓解漏洞的最前线。

这篇导读先给出全景,再挑重点议题展开,文末附完整日程,方便大家按图索骥。需要说明的是,会议还没召开,幻灯片也没放出,下文内容都来自官方议题摘要,不代表会上结论。

1. 先看全景:24 场议题的六条主线

按议题内容归类,24 场可以分成六组:

主线 场次 关键词
Rust 与语言、工具链 5 Rust-BPF、异常处理、BTF 多语言、Rex、GCC
verifier 与 JIT 的正确性和性能 5 内存模型、KASAN、值追踪、携带证明的验证、kops
安全:热缓解与加固 5 shirudo、LSM hook 规模化、WhatsApp TEE、bpf-rbacd
新的可编程点 4 缺页处理、sysctl、跨虚拟机、RV 监视器
网络与生产案例 4 HTTP 解析、PlayStation 防 DDoS、ksock、车载
学术综述 1 eBPF 学术研究趋势

从报告人所属机构看(以议程登记为准,少数未登记的按公开资料补充),Isovalent 和 Meta 各有 4 场,Oracle、Red Hat、ETH Zurich 各 2 场,Google、SUSE、Bootlin、索尼各 1 场,另有 5 场来自高校和研究机构。

2. Rust 进场:verifier 要为一门完整语言重写

大会开场的前四场,全部和 Rust 有关。

Alexei Starovoitov 的 Rust-BPF updates 是整个 Track 的定调之作。 摘要里说得很直接:要支持完整的 Rust,verifier 处理指令的方式需要重新思考。栈活跃性分析、SCEV(标量演化,用于推导循环变量取值范围)、间接调用是已知的基础模块,但"more fundamental rewrite is still necessary"(更根本的重写仍然必要)。这场会覆盖 verifier、LLVM、GCC、rustc、libbpf 五个方向的进展。

紧随其后,Yonghong Song 的 大尺寸参数与 Rust 异常处理 补上两块拼图:

  • 大尺寸参数:现在的 verifier 会拒绝参数是结构体、联合体或超过一个寄存器宽度的函数,用户只能改写代码去迁就,这项限制要去掉。
  • 异常处理:C 写的 BPF 程序只有 bpf_throw();Rust 支持在每一层函数上挂清理回调,A → B → C 调用链中 C 抛出异常时,依次执行 C、B、A 的清理逻辑。9 月 16 日,Yonghong Song 在 bpf-next 上发出了相关的 20 补丁系列,让 bpf_throw() 回溯栈时执行清理代码。

Oracle 的 Alan Maguire 则在 BTF 多语言扩展 里讨论切片、带标签联合体、泛型、接口、生命周期这些 C 没有的概念,怎么表示成 BTF。

有意思的是,Google 带来了一条完全不同的路线。 Aniket Gattani 的 Slaying the BPF Verifier 介绍新版 Rex:不走 verifier,而是依靠 Rust 的类型系统、借用检查器和专门的编译器 pass,在编译期复现 verifier 的安全保证,新版做到完全静态编译、不会 panic,并已经和 Google 的 ghOSt 调度器完成概念验证。

一边是让 verifier 学会理解 Rust,一边是用 Rust 编译器替代 verifier,两条路线同场出现,会上怎么碰撞值得关注。

3. 给 verifier 上锁:测试、证明与消毒器

verifier 是 BPF 的安全边界,但它自身越来越复杂,也越来越难审计。今年有一组议题,都在尝试用外部的测试和证明来约束 verifier 与 JIT。

Meta 的 Puranjay Mohan 带来 blitmus,瞄准一个少有人注意的空白:eBPF 没有形式化的内存模型。 如今 eBPF 已经有 load_acquire / store_release、多架构 JIT 的 arena 原子操作、rqspinlock、无锁 ringbuf,程序跨 CPU 并发协作越来越常见。内核本身有可执行的内存模型 LKMM 和 klitmus7 工具,eBPF 却无法检查程序要求的内存序在经过 verifier 和各架构 JIT 之后是否还成立。

blitmus 把 LKMM 的 litmus 测试转换成 BPF 程序,每个测试进程绑定到一个 CPU,让它们竞争数百万次再统计结果。同一个测试不改动就能跑在所有架构上,能发现 JIT 漏掉内存屏障这类平时静默、出事致命的 bug。会上会展示 aarch64 与 x86-64 上的结果,其中有一个本应永不发生、却被 blitmus 判为违反的测试;作者也会借这个例子讨论工具本身的保真度,也就是这种批量测试能多真实地模拟多 CPU 竞争。

慕尼黑工业大学的 Proof-Carrying Verification 则想从架构上给 verifier 减负。 现在 verifier 在内核里同时负责找证明和查证明,编译器早已知道的循环不变量传不进来,推不出来就只能拒绝。新思路是拆开:用户态的证明生成器借助 SMT 求解器找出不变量,输出一份证书;内核里的检查器只校验证书的每一步,不搜索、不调用 SMT。团队已经有端到端原型,初步结果显示在需要大量路径探索的大程序上,证书检查尤其快。

另外两场也在这条线上:

  • 性能:UC Santa Cruz 与 ETH Zurich 研究者的 kops 与 rejit 指出,从生产程序提取的 27 个微基准中,eBPF 管线最多比原生编译慢 2 倍,一个 64 位循环移位要 15 条机器指令,而原生只要一条 ROL。方案是用户态重写字节码,加上由内核模块注册硬件相关的新操作;每个新操作都附带一段 verifier 能检查的普通 eBPF 等价序列,并可用 Lean 4 证明两者结果一致。数据是 x86-64 最多提速 24%,Cilium 与 Katran 数据面吞吐最多提升 12%。
  • 排障:Bootlin 的 JIT 程序 KASAN 支持 让 JIT 在每次访存前插入 __asan_*() 调用,补上 JIT 代码逃过内存检查的盲区,项目由 eBPF 基金会资助。

4. CVE 空窗期:BPF 被推上热缓解前线

这是今年最有时代感的一组议题。 背景是一个越来越尖锐的矛盾:LLM 让漏洞发现的速度大幅提升,而数据中心、Kubernetes 节点、嵌入式设备打补丁加重启的周期并没有变短。

Daniel Borkmann 和 John Fastabend 的 shirudo 把这个矛盾摆在了台面上。 摘要开头就写:“In times of Fable/Mythos or equivalent LLMs, security fixes and attack-surface hardening increasingly needs to land on production systems now”(在 Fable、Mythos 这类 LLM 的时代,安全修复和攻击面收缩越来越需要立刻落到生产环境)。

shirudo 是一个不需要常驻 agent 的 BPF 安全平台,有几处设计很有辨识度:

  • 刻意不做配置 DSL,理由是 agent 直接写代码效果更好,缓解补丁的天然作者就是与运维人员协作的 agent;
  • 全面使用 xattr 和 BPF 签名,并用 BPF LSM 封住自身所有资产,防止不可信的 root 篡改 BPF。

但 BPF 能改变执行路径的地方其实有限,这正是 Isovalent Anton Protopopov 那场 BPF LSM hook 与 error injection 规模化 要解决的问题。 目前只有两种手段:LSM hook 受限于现有集合,error injection 受限于很短的 ALLOW_ERROR_INJECTION 白名单,net/ 的很多部分和大量驱动完全没有 BPF 安全覆盖。议题会讨论怎样系统地补 hook,也会评价 Sasha Levin 提出的 killswitch:它允许任意函数被短路,确实解决了问题,但难以控制。

生产级的答卷来自 Meta。 WhatsApp TEE 里的无守护进程 eBPF LSM 讲的是 AMD SEV 机密虚拟机宿主机防护中的一层:

  1. exec 时,bprm_creds_from_file hook 读取二进制上的 xattr 得到角色名;
  2. 调用 bpf_get_fsverity_digest 和 bpf_verify_pkcs7_signature,用该角色的证书校验 fs-verity 摘要与 PKCS7 签名,通过才登记进角色;
  3. ptrace 与 task_kill 相关 hook 按角色白名单拦截,宿主机上谁都无法调试或给机密 VM 发信号。

整套程序由一个跑完即退的 init 程序加载并 pin 到 bpffs,不需要常驻守护进程,LSM link 在 pivot_root 之后依然有效。签名、fs-verity、xattr 与 BPF LSM 组合在一起,完整走通了从校验二进制身份到运行时防护的整条链路。

权限侧也有进展:Red Hat 的 Toke Høiland-Jørgensen 会介绍 bpf-rbacd,在 BPF token 基础上用 BPF 写的 LSM 精确限定应用能用哪部分 BPF,正在推进成为 Fedora 和 RHEL 的核心组件。

5. 可编程点继续外扩:从缺页到 sysctl

BPF 这些年一直在吞掉本来要加内核参数或写内核模块的场景,今年又多了几个新方向。

最吸引眼球的是哥伦比亚大学的 bpf_fault,合作者里还有内核内存管理维护者 David Hildenbrand。 它让应用直接在内核里用 eBPF 处理缺页,替代开销高、扩展性差的 userfaultfd:

  • 缺页延迟降低 2.8–6.1 倍,消除了 userfaultfd 的扩展性瓶颈;
  • 集成 Firecracker 和 QEMU 的虚拟机在线快照,消除快照造成的尾延迟尖刺;
  • 设计了把重定位推迟到缺页时的延迟动态链接,让 Chrome、Clang 的脏内存最多减少 50%。

另外几场同样值得一看:

  • Oracle 的 BPF 与 sysctl:以 accept 队列为例,队列满了才丢 SYN 往往太晚,挂一个 BPF 程序就能结合系统状态提前丢弃,让服务尽快恢复。
  • Red Hat 的 可插拔 RV 监视器:运行时验证监视器不必再逐个进上游,改用 BPF struct_ops 在用户态开发和部署。
  • GSoC 项目 跨虚拟机边界的 eBPF 编程:借助 QEMU IVSHMEM,让 guest 与 host 的 BPF 程序共享内存。

6. 生产一线:PlayStation 与 eBPF 里的 HTTP

索尼的 PlayStation 防 DDoS 是本届最硬核的生产案例。 游戏服务器面对的是数 Tbps 级别的攻击,他们的架构有三层:

  • 入口:给合法客户端发放短期令牌,XDP 在协议栈最早处做白名单校验,不在无用流量上浪费 CPU;
  • 节点:K8s 节点上的 eBPF agent 在公网防护层与私有游戏服务器云之间形成透明 overlay,后端集群无需暴露到公网;
  • 控制面:基于 CNCF xDS,把令牌高速分发到全球入口,持续更新驱动路由决策的 BPF map。

ETH 的 Beeper 则挑战了一个老难题:在 eBPF 里解析 HTTP。 HTTP 是自描述协议,需要的状态和控制流远超 verifier 的舒适区。Beeper 的办法是在用户态构造类似 Aho-Corasick 的状态机,交给内核里的 eBPF 程序去识别和提取报文头,不需要内核模块。议题会讨论解析 HTTP/1.1 和 HTTP/2 要解决的难点,并演示直接从 eBPF 响应 HTTP 请求。

同一天下午,Isovalent 的 BPF ksock 想让 BPF 程序直接往网络发数据,把用户态从可观测与日志的关键路径上拿掉;这个话题在前两届 LSF/MM/BPF 上都讨论过,最初基于 netpoll 的方案最终被否,这次会介绍当前的新设计。

7. 分会场彩蛋:不在 eBPF Track,但同样和 BPF 有关

eBPF Track 之外,还有 30 多场议题与 BPF 直接相关,挑几场值得关注的:

8. 总结

把 24 场议题放在一起看,可以读出几个清晰的信号:

  • BPF 正在从 C 的受限子集,走向能承载完整语言的运行时,Rust 是第一个目标;
  • verifier 的安全性开始被外部化、形式化,内存模型测试、证书检查、Lean 证明、KASAN 都在给它上锁;
  • 不重启缓解漏洞正在成为 BPF 安全的主叙事,签名、fs-verity、xattr 与 BPF LSM 的组合已有生产案例;
  • BPF 权限模型开始进入发行版,可编程点也在继续外扩到缺页、sysctl 和运行时验证。

编者认为,其中最值得会后跟进的是 Rust-BPF 与 Rex 两条路线的交锋,以及 shirudo 所代表的 agent 驱动热缓解能否真正落地。幻灯片和视频放出后,我们会挑选重点议题再做深入解读。

延伸阅读

若还想顺着读,可看这几篇:

  1. Cloudflare 基于 BPF LSM 热修高危提权 Copy Fail
  2. eBPF 安全分发:内核 6.18 证书签名机制实测
  3. 广告 P99 砍掉 28%:Meta 把 BPF sched_ext 打进 Ads 机群

附:LPC 2026 eBPF Track 完整日程

时间为布拉格当地时间(北京时间需加 6 小时)。eBPF Track 在布拉格会议中心 South Hall 1A,每场 30 分钟;sched_ext 分会场在 Club H,每场约 18 分钟。

10 月 5 日(周一)

时间 议题 报告人 机构
10:00 Rust-BPF updates(Rust-BPF 进展) Alexei Starovoitov Meta
10:30 大尺寸参数与 Rust 异常处理 Yonghong Song Meta
11:00 扩展 BTF 以支持更多语言 Alan Maguire Oracle
12:00 Rex:用 Rust 实现安全的静态内核扩展 Aniket Gattani Google
12:30 blitmus:在真实硬件上测试 eBPF 内存模型 Puranjay Mohan Meta
13:00 JIT 编译的 BPF 程序支持 KASAN Alexis Lothoré Bootlin
15:00 BPF verifier 与 GCC Vineet Gupta —
15:30 verifier 值追踪的演进 Shung-Hsi Yu SUSE
16:00 eBPF 的携带证明验证 Martin Fink 慕尼黑工业大学
17:00 kops 与 rejit:按硬件和负载优化 eBPF Yusheng Zheng、Hao Sun UC Santa Cruz、ETH Zurich
17:30 BPF、sysctl 与可编程的内核决策点 Alan Maguire Oracle
18:00 eBPF 安全:不均衡的防护版图 Gürkan Gür、Louie Wolf 苏黎世应用科学大学

10 月 6 日(周二)

时间 议题 报告人 机构
10:00 eBPF 学术研究在做什么 Paul Chaignon Isovalent
10:30 bpf_fault:用 eBPF 自定义缺页处理 Tal Zussman 哥伦比亚大学
11:00 跨虚拟机边界的 eBPF 编程 Roy Nchang 雅温得国立高等工程学院
12:00 shirudo:面向 AI 时代的 BPF 热修补设施 Daniel Borkmann、John Fastabend Isovalent
12:30 WhatsApp TEE 里的无守护进程 eBPF LSM Joshua Lilly、Liam Wisehart Meta(Lilly)
13:00 全内核扩展 BPF LSM hook 与 error injection Anton Protopopov Isovalent at Cisco
15:00 Beeper:在 eBPF 里解析应用层协议 Laurin Brandner ETH Zürich
15:30 PlayStation 用 eBPF/XDP 防护游戏服务器 DDoS Babis Stylianopoulos、Jeffrey Barendse 索尼互动娱乐
16:00 BPF ksock:让 BPF 使用网络 socket Kornilios Kourtis、Mahé Tardy Isovalent
17:00 BPF-RBACd:细粒度下放 BPF 权限 Toke Høiland-Jørgensen Red Hat
17:30 eBPF 上车:汽车与工业场景 Reinhard Kugler SBA Research
18:00 用 BPF 实现可插拔的 RV 监视器 Gabriele Monaco Red Hat

10 月 7 日(周三)sched_ext 分会场

时间 议题 报告人 机构
15:10 通过 pvsched 与 sched_ext 实现虚拟机调度直通 Josh Don、Vineeth Remanan Pillai Google
15:28 基于 BPF 的可组合空闲 CPU 选择 Emil Tsalapatis Meta
15:46 驯服锁持有者与等待者被抢占造成的延迟尖刺 Changwoo Min Igalia
16:04 让 proxy execution 与 sched_ext 兼容 Andrea Righi NVIDIA
17:00 让任务保持缓存热度:LAVD 调度器的黏性 Gavin Guo —
17:18 Intel HFI 接入 sched_ext Srinivas Pandruvada Intel
17:36 加速器负载的自动放置 Balbir Singh、Lee Trager NVIDIA

完整议程与每场摘要见 LPC 2026 eBPF Track 官方页面。

本文为会前导读,内容整理自官方议题摘要,非会议实录。