Formally Verified System Initialisation

Published 2013

Authors

Andrew Boyton, June Andronick, Callum Bannister, Matthew Fernandez, Xin Gao, David Greenaway, Gerwin Klein, Corey Lewis, Thomas Sewell

Download

Abstract

The safety and security of software systems depends heavily on how they are initially configured. Manually writing program code that establishes such an initial configuration is a tedious and error-prone engineering process.

In this paper we present our automatic and formally verified initialiser for component-based systems on the general-purpose microkernel seL4. The initialiser takes a declarative formal description of the desired initialised state and uses seL4 provided services to create all necessary components, setup their communication channels, and distribute the required access rights.

We provide a formal specification of the initialiser and prove, in the theorem prover Isabelle/HOL, that the resulting state is the desired one. Our proof formally connects to the existing functional correctness proof of the seL4 microkernel.

This tool not only automates the process of initialising a system, it also provides unprecedented assurance for reaching a desired safe system state. In addition to the engineering advantages, this result is a key prerequisite for reasoning about system-wide security and safety properties.

BibTeX

@inproceedings{Boyton_ABFGGKLS_13,
    title            = {Formally Verified System Initialisation},
    author           = {Andrew Boyton and June Andronick and Callum Bannister and
                            Matthew Fernandez and Xin Gao and David Greenaway and Gerwin
                            Klein and Corey Lewis and Thomas Sewell},
    booktitle        = {Proceedings of the 15th International Conference on Formal
                            Engineering Methods},
    year             = {2013},
    month            = {oct},
    pages            = {70--85},
    address          = {Queenstown, New Zealand},
    editor           = {{Lindsay Groves, Jing Sun}},
    publisher        = {Springer},
    doi              = {10.1007/978-3-642-41202-8_6}
}