Heimdall: Formally Verified Automated Migration of Legacy eBPF Programs to Rust
cs.CR, cs.SC
Submitted: 2026-05-25
Updated: 2026-08-26
Code: https://github.com/angr/claripy
License: http://creativecommons.org/licenses/by/4.0/
The gist: Extended Berkeley Packet Filter (eBPF) programs are kernel extensions used for networking, observability, and security enforcement in the Linux kernel.
Terminology
Abstract
Extended Berkeley Packet Filter (eBPF) programs are kernel extensions used for networking, observability, and security enforcement in the Linux kernel. The in-kernel eBPF verifier checks low-level memory safety and termination on eBPF programs, but it does not enforce many higher-level source-level properties, such as initialization discipline, schema consistency, or error handling. We document nine classes of source-level bugs that compile, pass the kernel verifier, and can silently corrupt data, leak kernel memory to userspace, or yield incorrect enforcement outcomes. To harden such verifier-accepted buggy programs and support safe migration, we present Heimdall, an automated pipeline that uses large language models to translate legacy libbpf C programs to Aya Rust. Heimdall iteratively repairs compilation and kernel-verifier failures, rejects unsafe escape hatches in Rust-Aya with a static analysis safety engine, and proves per-program equivalence to the original via symbolic execution and Z3-based equivalence checking. Across 115 eBPF programs, Heimdall generates 109 formally proven-equivalent translations (94.8%). In the process, Heimdall identifies nine bugs in real-world eBPF programs and fixes all of them, two of which leak randomized kernel addresses to userspace and break KASLR. Eight of the nine have also been acknowledged and fixed upstream by the developers. Heimdall is the first system to automate memory-safe-language migration of production eBPF programs with per-program formal guarantees that the migration preserves observable behavior.
Sources
- RustMap: Towards Project-Scale C-to-Rust Migration via Program Analysis and LLM
- Towards Translating Real-World Code with LLMs: A Study of Translating to Rust
- SafeTrans: LLM-assisted Transpilation from C to Rust
- Raw Pointer Rewriting with LLMs for Translating C to Safer Rust
- Concrat: An Automatic C-to-Rust Lock API Translator for Concurrent Programs
- To Tag, or Not to Tag: Translating C's Unions to Rust's Tagged Unions
- Forcrat: Automatic I/O API Translation from C to Rust via Origin and Capability Analysis
- ReCodeAgent: A Multi-agent Workflow for Language-Agnostic Translation and Validation of Large-Scale Repositories
- SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
- Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces
- SWE-Lancer: Can Frontier LLMs Earn $1 Million from Real-World Freelance Software Engineering?
- C2SaferRust: Transforming C Projects into Safer Rust with NeuroSymbolic Techniques
- Syzygy: Dual Code-Test C to (safe) Rust Translation using LLMs and Dynamic Analysis
- EvoC2Rust: A Skeleton-guided Framework for Project-Level C-to-Rust Translation
- VERT: Verified Equivalent Rust Transpilation with Large Language Models as Few-Shot Learners
- Ownership guided C to Rust translation
- SACTOR: LLM-Driven Correct and Idiomatic C to Rust Translation with Static Analysis and FFI-Based Verification
Related papers
- SoK: AI-Augmented Binary Reversing
- Relaxed Sender Anonymity for CBDC Interbank Settlement: A Zero-Knowledge Approach on Permissioned EVM
- Calibration-Family Overfit: Why Trusted Sabotage Monitors Don't Transfer Across Lineages
- Efficient Fuzzy PSI under One-Sided Assumptions
- Sealing the Audit-Runtime Gap for LLM Skills
- Token Composition: A Graph Based on EVM Logs