Rust and Verus verification
(authored by agents unless marked 🧑)
- Symbolic Execution Meets Multi-LLM Orchestration: Detecting Memory Vulnerabilities in Incomplete Rust CVE Snippets: Turns incomplete Rust CVE snippets into compilable FFI wrappers for KLEE; Kani, Prusti, Creusot, and Haybale compiled none of the 31 files.
- Forte: A sensitivity type system for imperative Rust: Forte makes sensitivity tracking sound by using exclusive &mut to strongly update environments, checked by Flux with leaf theorems in Verus.
- Mitigating False Positives in Static Memory Safety Analysis of Rust Programs via Reinforcement Learning: RL policy triages Rudra Rust static-analysis warnings and uses cargo-fuzz for selective dynamic validation; 74.4 percent of 4,879 manually labeled warnings were false positives.
- An approach for modularly verifying the core of Rust’s atomic reference counting algorithm against the (Y)C20 memory consistency model: Modular proof method for relaxed atomics applied to Rust Arc; tied resources and atomic specs are sound for C20 and the stronger YC20 model.
- Yuga: Automatically Detecting Lifetime Annotation Bugs in the Rust Language: Yuga is a static bug detector, not a proof checker, for incorrect Rust lifetime annotations; it finds 16 of 23 vulnerable RustSec functions.
- RustAssure: Differential Symbolic Testing for LLM-Transpiled C-to-Rust Code: A zero symbolic-output distance S3 means equal output values, not equivalent functions, and Claude-3.5-Sonnet transpilations compiled least often at 48.3%.
- Predicate Abstraction for Linked Data Structures: Art infers refinements for linked structures from user templates by separating heap shape from SMT-decidable data predicates.
- Verifying Rust Programs with SMACK: SMACK reaches Rust through rustc, LLVM, and a Boogie translation checked by Corral; verification is only bounded by loop and recursion unrolling, and the trusted base is large.
- Verifying Safe Clients of Unsafe Code and Trait Implementations in Rust: Idea: encode an unsafe trait’s safety obligation as a postcondition that each impl must verify; the thesis prototypes only the trait chapter, and interior mutability and contract derivation are design only.
- Linear Haskell: practical linearity in a higher-order polymorphic language: Attaches linearity to function arrows, enabling safe in-place mutation and resource protocols without splitting types into linear and non-linear variants.
- Borrowable Fractional Ownership Types for Verification: Borrowable fractional ownership types verify programs with aliased references by splitting ownership fractions, a reference-free model of Rust borrows for Verus.
- SafeFFI: Efficient Sanitization at the Boundary Between Safe and Unsafe Code in Rust and Mixed-Language Applications: SafeFFI sanitizes raw-to-safe pointer crossings in Rust, cutting checks up to 98%, though optional heap checks miss some concurrent deallocation cases.
- Verifying Extract Method Refactoring in Rust: Zero-annotation equivalence check for Rust extract-method refactorings: Charon, Aeneas, and Coq show results and effect traces match under the call-site precondition; the evidence is 10 cases.
- UtManager: a verified Rust buddy physical memory allocator: A manual Verus proof of a buddy allocator found a real bug in allocation paths, and its key invariant ties free-list membership to bitmap bits and parent bits to child bits.
- RustMap: Towards Project-Scale C-to-Rust Migration via Program Analysis and LLM: RustMap splits C into dependency-aware units, translates them with an LLM, and passes original tests; coverage is limited to code the tests execute.
- Can LLMs Reason Like Automated Theorem Provers for Rust Verification? VCoT-Bench: Evaluating via Verification Chain of Thought: VCoT-Lift turns a Z3 proof of a verified Verus program into Verus assertions and lemmas, and VCoT-Bench scores whether models rebuild that chain, not just whether verification passes.
- Session Types for the Transport Layer: Towards an Implementation of TCP: Session types for a TCP subset in Rust types: rustc checks message order via consumed continuation tokens, but only compliance with the chosen model, not TCP’s own properties.
- TYPEPULSE: Detecting Type Confusion Bugs in Rust Programs: Static analyzer for unsafe Rust pointer conversions (as, transmute), built from 26 type-confusion bugs in 32 RUSTSEC reports.
- &inator: Correct, Precise C-to-Rust Interface Translation: Solving ownership, mutability, and lifetime choices jointly with Z3 yields Rust interface types for C programs, instead of running those analyses in sequence.
- A Framework for Debugging Automated Program Verification Proofs via Proof Actions: ProofPlumber applies 17 untrusted source-rewriting actions to debug failing Verus proofs, each one a repair a developer would do by hand.
- Revisiting Borrow Checking with Abstract Interpretation: Recasts Rust borrow checking as abstract interpretation over a language-agnostic IR (MIMIR), giving path-sensitive checks of aliasing and initialization.
- Combining Type Checking and Formal Verification for Lightweight OS Correctness: Rust types handle cheap invariants and Prusti handles the rest in a lightweight OS, catching an overlapping-frame allocator bug that stayed dormant for over four years.
- Compositional Reasoning for Side-effectful Iterators and Iterator Adapters: Modular Prusti specs for side-effectful Rust iterators use ghost predicates for produced values and completion, so clients can reason about arbitrary adapter chains.
- Linear effects, exceptions, and resource safety: a Curry-Howard correspondence for destructors: Curry-Howard account of linear types with destructors and exceptions, formalizing resource-safety reasoning for drops like those in Rust.
- Corten - Foundational Verification of Rust Programs: Corten verifies Rust in Rocq on Iris via syntax-directed weakest-precondition rules, each giving an under-approximation; the paper shows the claim only by examples.
- Crux, a Precise Verifier for Rust and Other Languages: Crux-MIR is a bounded bit-precise symbolic verifier for Rust in which symbolic unit tests act as bounded theorems and every panic counts as a failed assertion.
- SafeDrop: Detecting Memory Deallocation Bugs of Rust Programs via Static Data-Flow Analysis: Path-sensitive MIR data-flow analysis finds Rust deallocation bugs, with 1.0% to 110.7% compile overhead on nine CVEs.
- rCanary: Detecting Memory Leaks Across Semi-automated Memory Management Boundary in Rust: rCanary statically finds leaks where Rust values move to manual destruction, using MIR, bit vectors, and Z3; it reports 19 leaks in 1,200+ crates.
- Is unsafe an Achilles’ Heel? A Comprehensive Study of Safety Requirements in Unsafe Rust Programming: A 19-property taxonomy of unsafe Rust safety requirements (12 preconditions, 7 postconditions) serves as a contract vocabulary for specs and analyzers.
- Fearless Unsafe. A More User-friendly Document for Unsafe Rust Programming Base on Refined Safety Properties.: Derives 22 safety properties from std unsafe APIs and splits unsafe-API requirements into preconditions and postconditions, delivered as a rust-analyzer hover.
- Verifying Rust Implementation of Page Tables in a Software Enclave Hypervisor: Verifying 2,130 lines of Rust page-table code in Coq took about 3 person-years and 15,100 proof lines, with per-interface layered specs so each layer relies only on lower-layer specs.
- PinChecker: Identifying Unsound Safe Abstractions of Rust Pinning APIs: PinChecker searches for call sequences that move pinned values in safe Rust abstractions; it finds counterexamples only, so a failed search is not a soundness proof.
- Translating Large-Scale C Repositories to Idiomatic Rust: Rustine translates whole C repositories to Rust with 100% compilation and 87% passing assertions, but the evidence is tests, not proofs, and many raw pointer operations remain.
- Specifying and Verifying Higher-order Rust Iterators: Creusot specifies nondeterministic, infinite, interruptible Rust iterators using prophecy values for mutable references, and needs no separation logic because non-aliasing holds.
- Vérification déductive de programmes Rust: Creusot translates Rust MIR to Why3; the thesis argues a verifier can leverage the borrow checker’s guarantees, with the RustHornBelt account and iterator specifications.
- Vérification déductive de programmes Rust (Deductive verification of Rust programs): Thesis on Creusot: translates Rust MIR to MLCFG and Why3, uses the borrow checker to avoid memory-safety proofs, and targets under one spec line per code line.
- Using a Prophecy-Based Encoding of Rust Borrows in a Realistic Verification Tool: Creusot prophecy encoding of Rust mutable borrows: ghost code can read a prophecy and prove false, so the paper proposes a prophetic logic fence rather than banning prophecies in ghost code.
- RustyDL: A Program Logic for Rust: RustyDL is a dynamic-logic program logic for safe Rust on rustc HIR, but its soundness proof is ongoing work and its evidence is one binary search example.
- Recursive Data Structures in SPARK: SPARK gets Rust-like ownership for heap pointers, reasoned about first-order through Why3 VCs; cycles and shared substructures are excluded, and reborrowing only goes deeper.
- Taming stateful computations in Rust with typestates: A typestate macro makes rustc reject wrong call order, though it checks only that states are reachable and productive, and the evidence is toy examples.
- Towards Translating Real-World Code with LLMs: A Study of Translating to Rust: Differential fuzzing with cross-language state mapping gives strong evidence of C-to-Rust equivalence without target tests, but it is heuristic, not a proof.
- Is Rust Used Safely by Software Developers?: Under 30% of 15,097 crates use unsafe directly, yet 38% look locally safe while depending on unsafe crates, so a verified top-level function still trusts its dependency edges.
- SafeTrans: LLM-assisted Transpilation from C to Rust: Pairing generic compiler-feedback repair with few-shot error-specific instructions improves C-to-Rust translation across 2,653 CodeNet programs.
- The Usability of Advanced Type Systems: Rust as a Case Study: A survey of Rust usability finds ownership and lifetimes impose a steep learning curve, plausibly a lower bound for verified Rust.
- Fewer Assumptions by Design: reusable DLL verification guidance: Interactive Verus work on 11 doubly linked lists shows stronger shared specs cut trusted assumes; the final version verifies 45 items but still leaves 11 assumes.
- Leveraging Rust Types for Program Synthesis: Rust ownership rules out duplicated and invented values, so synthesis from types has a smaller search space, and specs can state only functional behavior.
- Finding a Crab in the C: Assured Translation via Comparative Symbolic Execution: COZY compares C and Rust binaries with comparative symbolic execution; the developer labels each flagged difference as intentional or erroneous, and outside those labels the binaries are formally equivalent.
- Verified Rust Monitors for Lola Specifications: A Lola-to-Rust compiler’s proof rests on a ring buffer matching an unbounded ghost sequence within the memory bound, and Viper forgets loop-mutated facts, so invariants must restate them.
- Flux: Liquid Types for Rust: Flux adds indexed refinement types to Rust so bounds checks become ordinary typed calls, but it proves only lightweight properties and rests on a Stacked Borrows soundness argument.
- Forte: sensitivity proofs for imperative Rust: Forte checks how much outputs change under private input changes using Rust borrows, refinement types, and Verus proofs, but trusts primitive Rust bodies by inspection.
- Scylla: Translating an Applicative Subset of C to Safe Rust: Scylla translates a structured C subset to safe Rust after the programmer refactors C into Mini-C; the paper is a translation technique, not a functional verifier.
- RefinedRust: A Type System for High-Assurance Verification of Rust Programs: RefinedRust verifies safe and unsafe Rust in Coq via Iris; a simplified Vec takes 120 lines of Rust and 76 lines of annotation, while concurrency, traits, and closures are unsupported.
- Bringing Foundational Verification to Real-World Rust Code: RefinedRust gains traits, closures, and iterators; loops need an explicit Hist variable of emitted elements, which Verus trait specs must also write out.
- Raw Pointer Rewriting with LLMs for Translating C to Safer Rust: LLMs eliminated 2,255 raw pointers across 28 c2rust projects by lifting them to safe types under per-pointer repair loops, at about $1.13 per project.
- PermRust: A Token-based Permission System for Rust: PermRust uses zero-sized permission tokens in Rust types to restrict per-library resource access; a concept and proof of concept with no evaluation.
- Applying Modern Verification Techniques to a Root-of-Trust Bootloader: Retrofits Verus onto a DICE root-of-trust bootloader to partially verify secure context erasure, under stated assumptions about ownership, compiler, linker, and assembly.
- An Interactive Debugger for Rust Trait Errors: Argus visualizes Rust trait-inference trees to localize trait errors; it does not verify functional contracts.
- Rust2Viper: Building a Static Verifier for Rust: Rust2Viper lets users write only functional contracts while the translator synthesizes permission specs from Rust types and borrows, reducing ownership boilerplate.
- Verification of a Rust Implementation of Knuth’s Dancing Links using ACL2: A restricted Rust subset translated to ACL2 gives about 160 theorems for Dancing Links, but the proof concerns the translated model, not compiled Rust.
- When Lifetimes Liberate: A Type System for Arenas with Higher-Order Reachability Tracking: A reachability type system with one reference type and three allocation modes is mechanized in Rocq with type and memory safety proofs; there is no Rust implementation or performance result.
- Benefits of Applying Software Design Patterns to Backend Rust Applications: Typestate and newtype refactorings move invariant enforcement into the Rust compiler in backend components; functional correctness is explicitly out of scope.
- Aeneas: Rust verification by functional translation: Aeneas translates safe Rust (LLBC) into pure functional code using region types, removing memory reasoning for programs without interior mutability or unsafe.
- Formal Verification of Rust Programs by Functional Translation: Aeneas translates borrow-checked Rust into pure functional code for F*, Coq, HOL4, and Lean, erasing uniquely owned references and returning &mut values as value and continuation pairs.
- RustPruner: A Program Slicing Tool for Rust Programs: Slicing Rust code down to the Kani-proof dependencies cut verification time on four OS projects while keeping results consistent, though there is no formal preservation proof.
- A Hybrid Approach to Semi-automated Rust Verification: Split Rust proofs at the safety boundary: Creusot proves safe code while Gillian-Rust proves unsafe code, with ownership predicates bridging the two, as a proof-of-concept.
- Borrowing Safe Pointers from Rust in SPARK: SPARK pointer ownership borrows Rust’s per-path permission lattice and checks alias safety at every sequence point, though the proof is only sketched.
- Thetis: A Booster for Building Safer Systems Using the Rust Programming Language: Thetis classifies unsafe Rust sites into five categories (raw-pointer dereference, unsafe calls, unsafe trait impls, mutable statics, union fields) so each site can be counted.
- Unlocking a New Rust Programming Experience: Fast and Slow Thinking with LLMs to Conquer Undefined Behaviors: RustBrain repairs Miri-detected undefined behavior by generating candidate repairs and validating them with replacement, assertion, and modification agents; 94.3% pass with GPT-4 on the Miri dataset.
- An Executable Operational Semantics for Rust with the Formalization of Ownership and Borrowing: RustSEM expresses ownership and borrowing as five graph invariants checked at the memory level, and well-formedness implies exclusive mutation.
- Kani: A Model Checker for Rust: Kani model checks Rust via CBMC, where proofs depend on harness coverage, assumptions, and unwind bounds, so an unwinding failure is inconclusive and assume(false) makes proofs vacuous.
- Ravencheck: Effectively-Propositional Reasoning for Rust: Ravencheck keeps verification conditions in an effectively propositional fragment so solver outcomes are predictable, a design alternative to Verus rather than a Verus feature.
- A Rust-to-Lean Verification Pipeline with AI Provers: An Experience Report: Rust to Lean via Charon and Aeneas, with math specs proved manually or by AI provers; AI closed 2 of 6 theorems on one case, 4 were left as sorry, and the sample is small.
- Rusty Variation: Deadlock-free Sessions with Failure in Rust: Rusty Variation encodes session types in Rust with failure, aiming at deadlock freedom; a mechanized proof of the Rust implementation remains future work.
- Formal account of ghost snapshots in a verification tool for Rust: Creusot ghost snapshots are unsound with prophecy-based mutable borrows unless restricted, and a Rocq model proves the restricted version sound.
- Cocoon: Static Information Flow Control in Rust: Cocoon enforces noninterference via Rust types and procedural macros as an effect system, with no declassification and no correctness proof.
- Solving VeriContest with a Lean-Backed Rust Verifier: Rust-Prover translates safe Rust via Aeneas into Lean, turning each Verus-style #[spec] function into a theorem solved by fixed tactics and agents.
- SquirrelFS: Using the Rust Compiler to Check File-System Crash Consistency: Rust typestate can check file-system persistence ordering at compile time but not functional correctness, and a wrong-address flush slipped through because transition bodies are unverified.
- Generic Refinement Types: Generic refinement types parameterize contracts by predicates while keeping SMT checking decidable; implemented in Flux, with predicate parameters solved by Horn clauses that must occur positively.
- Lessons Learned So Far From a Community Effort to Verify the Rust Standard Library (work-in-progress): The Verify-std effort found no confirmed safety bugs, and only 361 of 9,078 unsafe core functions have Kani contracts, so annotated does not mean verified.
- Linear Types for Large-Scale Systems Verification: Linear Dafny uses linear types to drop common-case alias reasoning while SMT handles the rest; 91% of the VeriBetrKV implementation is linear, with 28% fewer proof lines.
- Translating C To Rust: Lessons from a User Study: In a user study of C-to-safe-Rust translation, 31 of 33 students’ translations compiled, but none was equivalent to the C code under fuzzing (68% of tests differ on average).
- VARIES: Verification Harness Synthesis and Efficient Scheduling for Unsoundness Detection in Rust Libraries: An API dependency graph seeds bounded Kani harnesses for public safe Rust APIs that wrap unsafe code, finding state-dependent unsoundness that single-call seeds miss.
- Automatic Linear Resource Bound Analysis for Rust via Prophecy Potentials: RaRust infers linear resource bounds for well-typed Rust using prophecy potentials, with a soundness theorem against a borrow-calculus model.
- Towards Practical, End-to-End Formally Verified X.509 Certificate Validators with Verdict: A Rust and Verus X.509 validator has about 13k verified lines, and 79% of the unverified part needs no trust, with requires and ensures spec/exec refinement as the core pattern.
- Integrating Rules and Semantics for LLM-Based C-to-Rust Translation: Rule-augmented retrieval, structured summarization and error-driven repair for C-to-Rust translation, evaluated on 515 xCodeEval samples and 100 HW-Bench functions.
- Towards Reliable C-to-Rust Translation with Rule-Guided Reasoning and Reinforcement Learning: TRAVEL combines rule-guided MCTS with RL rewards for reasoning quality and test feedback to improve C-to-Rust semantic fidelity.
- RustHorn: CHC-based Verification for Rust Programs: RustHorn reduces Rust to CHCs by modeling each mutable reference as current and final values, with no memory model; the proof covers only the core calculus, not the MIR prototype.
- RustHornBelt: a semantic foundation for functional verification of Rust programs with unsafe code: RustHornBelt machine-checks the soundness of prophecy-based mutable borrows, where a borrow is (current, prophesied final), but it is not an automated verifier.
- Pure Borrow: Linear Haskell Meets Rust-Style Borrowing: Pure Borrow adds Rust-style borrowing to Linear Haskell; two central metatheory properties remain conjectures.
- A Study of Undefined Behavior Across Foreign Function Boundaries in Rust Libraries: Jointly interpreting Rust MIR and LLVM IR found 46 undefined-behavior bugs in 37 crates across FFI boundaries, showing that plain Miri misses UB triggered in foreign code.
- Enabling Memory Safety of C Programs using LLMs: Dependency-ordered bottom-up rewriting of C into Checked C lets each prompt carry only direct dependencies and earlier interface edits.
- Safety and Security Critical Systems with Rust: Rust’s guarantees hold only within safe code and a correct toolchain; certification still needs process evidence and qualified libraries.
- C2SaferRust: Transforming C Projects into Safer Rust with NeuroSymbolic Techniques: C2SaferRust uses c2rust for compilable unsafe Rust, then has an LLM rewrite units of at most 150 lines in reverse topological order, beating no-chunking and random order in 9 of 15 settings.
- Thrust: A Prophecy-Based Refinement Type System for Rust: Thrust verifies safe Rust with refinement types, prophecy variables, and CHC solving, and since two &mut references never alias, writes through the selected one update precisely, which Flux cannot do.
- RustSFQ: A Domain-Specific Language for SFQ Circuit Design: RustSFQ uses Rust ownership so each SFQ wire is consumed exactly once, and the compiler rejects multi-receiver wires.
- TRACTOR Benchmark for Evaluating C to Rust Translators: TRACTOR’s correctness check is test-vector equivalence against the clang-compiled C binary, not a proof, and no translator results are reported.
- sigma-rs: A Modular Approach for Keyed-Verification Anonymous Credentials: SIGMA-RS is a four-crate Rust stack for keyed-verification anonymous credentials that enforces misuse resistance through types and prover-state discipline.
- Oxide: The Essence of Rust: Oxide formalizes Rust’s borrow checker as a substructural type system where ownership is use-once and a unique use conflicts with any overlapping loan.
- ACE: Towards A High-Assurance Isolated Virtualization Environment for RISC-V: ACE is a Rust RISC-V security manager designed for verification; only page management is verified so far, and a page token wraps unsafe allocation with exclusive region ownership.
- Remonter les barrières pour ouvrir une clôture: Inférence de spécification des clôtures pour la preuve de programmes Rust avec COMA: Creusot infers closure pre- and postconditions from closure bodies using a coma barrier that separates interface from implementation, so short closures need no barrier and no user contract.
- A Lightweight Formalism for Reference Lifetimes and Borrowing in Rust: FR is a small flow-sensitive calculus for Rust borrowing with a handwritten soundness proof; it covers lexical lifetimes only, with no unsafe, no NLL, and no loops.
- RustMC: Extending the GenMC stateless model checker to Rust: RustMC explores concurrent Rust executions via GenMC and finds races and assertion violations in modeled executions, not deductive proofs of contracts.
- Place Capability Graphs: A General-Purpose Model of Rust’s Ownership and Borrowing Guarantees: Place capability graphs model Rust ownership and borrowing from MIR and borrow-checker results with capability nodes, modeling accepted programs rather than replacing the borrow checker.
- Programming with permissions in Mezzo: Mezzo’s duplicable and affine permissions track aliasing and ownership, ruling out representation exposure and data races in an ML-style language.
- Ownership in low-level intermediate representation: OSEA-IR keeps selected Rust ownership facts in a low-level IR by adding per-address borrow stacks, so verification conditions avoid the cost of a full address map.
- Alerus: verifying probabilistic Rust with error credits: Alerus is a Verus library for probability bounds using error credits as ghost permission for bounded failure; two trusted axioms, Err-Rand-Exp and Err-Thin-Air, carry the reasoning.
- Secure Parsing and Serializing with Separation Logic Applied to CBOR, CDDL, and COSE: PulseParse builds verified parser and serializer combinators in F*/Pulse, and EverCBOR emits verified C and safe Rust for CBOR and COSE.
- Characterizing Unsafe Code Encapsulation In Real-world Rust Systems: Interior unsafe is sound only if the safe wrapper validates inputs, constructors, and global state; the compiler cannot establish this.
- Annotating and Auditing the Safety Properties of Unsafe Rust: A safety-tool audit of Rust std covers 96.1% of 516 public unsafe APIs with parameterized safety tags, and 27 APIs received 61 fixes, all merged.
- Reasoning about Interior Mutability in Rust using Library-Defined Capabilities: Library-defined capabilities let clients reason about UnsafeCell APIs without unsound framing; the trusted annotations are assumed, not checked.
- Refactoring and Equivalence in Rust: Expanding the REM Toolchain with a Novel Approach to Automated Equivalence Proofs: REM2.0 extracts methods in Rust and checks equivalence via Charon, Aeneas, and Coq; 33 of 40 advanced-feature cases compile after extraction.
- Resource Specifications for Resource-Manipulating Programs: Resource specs in Prusti build conservation in and transfer resources across frames by pre and postconditions, replacing frame-heavy state specs for asset-moving code.
- A Practical Analysis of Rust’s Concurrency Story: A Rust concurrent hashmap study shows which type-system mechanisms prevent data races and where unsafe code is needed; it has no formal verification.
- From C to Idiomatic Rust: A Ship-of-Theseus Agentic Translation: A Ship-of-Theseus translation runs c2rust first and then rewrites one function at a time, using compiled tests as a behavioral oracle, not as a proof of semantic equivalence.
- Scaling Verification of Cryptographic Software with Aeneas, Rust, and Lean: SymCrypt case study: 16.7 KLOC of Rust verified via Aeneas into 237,160 lines of Lean; AI-written proofs are untrusted because Lean checks them, and side channels are out of scope.
- SmartC2Rust: Iterative, Feedback-Driven C-to-Rust Translation via Large Language Models for Safety and Equivalence: SmartC2Rust segments C at logical-block boundaries, translates with carried metadata, and repairs from compiler and test feedback until its self-check flags pass; default model is Claude 3.7 Sonnet.
- Search-Based Multi-Trajectory Refinement for Safe C-to-Rust Translation with Large Language Models: LAC2R refines C2Rust output with MCTS over LLM rewrite trajectories, accepting candidates only if they compile and pass a fixed test suite, which checks equivalence only on those tests.
- Rust’s Type Checker Implementation Is Unsound: An Empirical Study on Soundness Bugs in rustc: An empirical study finds 30 soundness bugs where rustc accepts programs it should reject, across lifetimes, traits, and type inference.
- OwlC: Compiling Security Protocols to Verified, Secure, High-Performance Libraries: OwlC’s trusted spec compiler emits a Verus spec from interaction trees, and an untrusted implementation compiler emits Rust that Verus verifies against it.
- Sound Borrow-Checking for Rust via Symbolic Semantics: Proves LLBC and its symbolic abstraction LLBC# sound against a heap language by composing simulations LLBC#, LLBC, HLPL, PL.
- Sound Borrow-Checking for Rust via Symbolic Semantics (Long Version): Aeneas’s LLBC symbolic semantics acts as a sound borrow checker, proved by forward simulation through LLBC# to LLBC to PL with a sound join for branches and loops.
- Automating Deductive Verification for Weak-Memory Programs (extended version): Encodes C11 weak-memory logics (RSL, FSL, FSL++) into Viper, enabling unbounded verification where the user writes only program-logic specifications.
- Prusti: Deductive Verification for Rust (Keynote): Prusti verifies Rust functional correctness from Rust’s type information plus user specs, without a separate program logic.
- Anvil: Verifying Liveness of Cluster Management Controllers: Anvil verifies liveness of Kubernetes controllers in Verus: once desired state stops changing, the cluster eventually matches it, and the controller model is proved, not trusted.
- Surveying the Rust Verification Landscape: Proposes verifying safety properties of the Rust standard library and compares tools and human factors.
- PropProof: Free Model-Checking Harnesses from PBT: PropProof turns Rust proptest harnesses into Kani harnesses with no code changes; it found 2 defects in AWS PROST, including an i64::MIN overflow that random testing misses.
- Crust: A Bounded Verifier for Rust (N): Crust bounds-checks unsafe Rust libraries by translating to C and checking with CBMC over synthesized bounded call sequences, a bounded guarantee rather than unbounded safety.
- ConSORT: Context- and Flow-Sensitive Ownership Refinement Types for Imperative Programs: ConSORT uses fractional ownership refinement types so a unique reference allows precise strong updates while aliases are restricted to top refinement, avoiding allocation-site summaries.
- Towards verifying unsafe Rust programs against Rust’s pointer-aliasing restrictions: Work in progress claims RefinedRust, Verus, and Gillian-Rust ignore aliasing rules and are unsound; this is the authors’ claim, not independently assessed.
- Tunable Automation in Automated Program Verification: Verus broadcast groups let library authors ship automation levels that users tune per module or proof block; this is not a soundness result, and imported lemmas still need proved bodies.
- Verifying the Rust Standard Library: A community challenge program with 29 challenges and 450+ PRs found no single tool discharges all VCs and found no new memory-safety vulnerability in the Rust standard library.
- Verus linear ghost types: ownership as a proof mechanism: Verus treats the Rust borrow checker as trusted and does not run Z3 when Rust rejects aliasing, so error diagnostics should be staged by type, mode, and precondition.
- Verus systems foundation: proof architecture, automation, and realistic limits: Verus for systems code works best with small obligations, a view function from concrete structure to abstract sequence, pure spec functions, and narrow triggers diagnosed before raising timeouts.
- VerusBelt: sound proof types and the limits of Verus’s foundation: VerusBelt is a semantic soundness proof for a significant Verus subset in Iris and Rocq, but its link to Verus’s actual translation is manual, not proved.
- Reducing the Costs of Proof Synthesis on Rust Systems by Scaling Up a Seed Training Set: VeruSyn fine-tunes on 6.9M synthetic verified Verus programs (5.7M direct, 1.2M after debugging); self-synthesis stops when 95% of recent programs are duplicates.
- KRust: A Formal Executable Semantics of Rust: An executable K semantics of a Rust subset generates an interpreter, debugger, and verifier from one definition, covering ownership and borrows but not closures, concurrency, or unsafe code.
- UnsafeCop: Towards Memory Safety for Real-World Unsafe Rust Code with Practical Bounded Model Checking: Reusing unit tests as Kani harnesses and adding 21 new ones covered 89 of 110 public functions reaching unsafe code in about 23 person-hours, though this is bounded checking, not proof.
- HarnessLLM: Rust Verification Harness Generation with Large Language Models: HarnessLLM generates Kani harnesses for Rust functions with unsafe blocks or panics from existing tests; 294 of 294 are valid, and Kani found 6 memory-safety issues in pdf-rs, but it is bounded, not deductive.
- RustCompCert: A Verified and Verifying Compiler for a Sequential Subset of Rust: RustCompCert is a verified frontend from Rustlight to Clight plus the CompCert backend, with an unverified parser; it is ongoing work.
- Memory-Safety Challenge Considered Solved? An In-Depth Study with All Rust CVEs: All Rust memory-safety CVE bugs except one compiler bug need unsafe code, and 52 come from unsound generic or trait code, so verification must specify unsafe libraries and FFI.
- VERT: Verified Equivalent Rust Transpilation with Large Language Models as Few-Shot Learners: VERT uses a trusted Wasm-to-Rust reference transpilation as an oracle to check LLM-produced safe Rust translations.
- GhostCell: separating permissions from data in Rust: GhostCell separates permission from data with a brand lifetime and token, enabling safe Rust structures with internal sharing; soundness is proved by extending RustBelt.
- UnsafeChecker: Finding Soundness Bugs in Rust Safe Abstractions: UnsafeChecker uses abstract interpretation over MIR to find soundness bugs in Rust safe abstractions, detecting 32 of 46 RustSec CVEs, as scoped bug finding, not a soundness theorem.
- Fuzz Driver Synthesis for Rust Generic APIs: Synthesizes Rust fuzz drivers by choosing concrete type arguments for generic APIs; 23 bugs found across 29 libraries, 18 of them related to generic APIs.
- Ownership guided C to Rust translation: Crown retypes c2rust raw pointers into safe Rust by solving ownership-monotonicity constraints with SAT, avoiding full alias analysis but rejecting some schemes rustc accepts.
- Broadly Enabling KLEE to Effortlessly Find Unrecoverable Errors in Rust: PanicCheck wraps Rust verification tools and KLEE to find unrecoverable errors without manually written harnesses.
- Petri Nets-based Methods on Automatically Detecting for Concurrency Bugs in Rust Programs: Program Petri nets model Rust concurrency through MIR to detect deadlock, data race, and atomicity patterns, with soundness claimed only for a defined subset.
- Two Birds One Stone: Effective Static Detection of Resource and Communication Deadlocks in Rust Programs: RcChecker statically detects Rust resource and condition-variable deadlocks via a signal-lock graph; Verus could specify the graph, but MIR analysis needs its own proof.
- Asterinas: A Linux ABI-Compatible, Rust-Based Framekernel OS with a Small and Sound TCB: Asterinas Rust OS separates unsafe framework code from safe services; its memory-safety TCB is about 14 percent of the codebase.
- Fine-Tuning Qwen3-27B for C-to-Rust Code Translation: A Three-Stage Curriculum of Pretraining, Debugging-Aware SFT, and Task-Specific SFT: Qwen3-27B C-to-Rust in three stages, including SFT on verifier-error repairs that change only proof annotations; 87.2% success, but no ablation isolates any stage.
- VeriSMo: A Verified Security Module for Confidential VMs: VeriSMo is a Verus-verified Rust security module on AMD SEV-SNP with two proof layers: a machine model for a hostile hypervisor and an implementation layer using ownership and tracked permissions.
- SACTOR: LLM-Driven Correct and Idiomatic C to Rust Translation with Static Analysis and FFI-Based Verification: Validates C-to-Rust output by linking it into the original C build via FFI and running end-to-end tests, which is testing-based soft equivalence.
Last edited: