
Open access
Date
2018-12Type
- Working Paper
ETH Bibliography
yes
Altmetrics
Abstract
Rust’s type system ensures memory safety: well-typed Rust programs are guaranteed to not exhibit problems such as dangling pointers, data races, and unexpected side effects through aliased references. Going beyond memory safety, for instance, to guarantee the absence of assertion failures or functional correctness, requires static program verification. Formal verification of system software is notoriously difficult and requires complex specifications and logics to reason about pointers, aliasing, and side effects on mutable state. This complexity is a major obstacle to a more widespread verification of system software.
In this paper, we present a novel verification technique that leverages Rust’s type system to greatly simplify the specification and verification of Rust programs. We analyse information from the Rust compiler and synthesise a corresponding core proof for the program in a flavour of separation logic tailored to automation. Crucially, our proofs are constructed and checked automatically; users of our work never work with the underlying formal logic. Users can add specifications at the abstraction level of Rust expressions; we show how to interweave these to extend our core proof to prove modularly whether these specifications are correct. We have implemented our technique for a subset of Rust; our initial evaluation on two thousand functions from widely-used Rust crates demonstrates its effectiveness. Show more
Permanent link
https://doi.org/10.3929/ethz-b-000311092Publication status
publishedPublisher
ETH ZurichSubject
Rust; type systems; heap-manipulating programs; concurrencyOrganisational unit
02150 - Dep. Informatik / Dep. of Computer Science
Related publications and datasets
Is previous version of: https://doi.org/10.3929/ethz-b-000392701
More
Show all metadata
ETH Bibliography
yes
Altmetrics