Towards deductive verification of C programs with shared data

This paper considers the problem of the deductive verification of the Linux kernel code that is concurrent and accesses shared data. The presence of shared data does not allow applying traditional deductive verification techniques, so we consider how to verify such a code by proving its compliance to a given specification of a certain synchronization discipline. The approach is illustrated by the examples of a spinlock specification and a simplified specification of the read-copy-update (RCU) API.

[1]  Wolfram Schulte,et al.  Local Verification of Global Invariants in Concurrent Programs , 2010, CAV.

[2]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.

[3]  Alexey V. Khoroshilov,et al.  High-level memory model with low-level pointer cast support for Jessie intermediate language , 2015, Programming and Computer Software.

[4]  Pierre Jouvelot,et al.  Polymorphic type, region and effect inference , 1992, Journal of Functional Programming.

[5]  Yves Bertot,et al.  Interactive Theorem Proving and Program Development: Coq'Art The Calculus of Inductive Constructions , 2010 .

[6]  Paul E. McKenney,et al.  RCU Usage In the Linux Kernel : One Decade Later , 2012 .

[7]  Mark A. Hillebrand,et al.  VCC: A Practical System for Verifying Concurrent C , 2009, TPHOLs.

[8]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[9]  Jean-Christophe Filliâtre,et al.  Why3 - Where Programs Meet Provers , 2013, ESOP.

[10]  Wolfram Schulte,et al.  A Practical Verification Methodology for Concurrent Programs , 2009 .

[11]  Yannick Moy Automatic modular static safety checking for C programs , 2009 .

[12]  Mark A. Hillebrand,et al.  Verifying C Programs : A VCC Tutorial Working draft , version 0 . 2 , April 18 , 2011 , 2011 .

[13]  Rupak Majumdar,et al.  Tools and Algorithms for the Construction and Analysis of Systems , 1997, Lecture Notes in Computer Science.

[14]  J. Filliâtre,et al.  ACSL: ANSI/ISO C Specification Language , 2008 .

[15]  Nikolai Kosmatov,et al.  Frama-C: A software analysis perspective , 2015, Formal Aspects of Computing.

[16]  Stephan Schulz,et al.  System Description: E 1.8 , 2013, LPAR.

[17]  Natarajan Shankar,et al.  PVS: Combining Specification, Proof Checking, and Model Checking , 1996, FMCAD.

[18]  François Bobot,et al.  Why3: Shepherd Your Herd of Provers , 2011 .

[19]  Wolfram Schulte,et al.  A Precise Yet Efficient Memory Model For C , 2009, Electron. Notes Theor. Comput. Sci..

[20]  Stephen N. Freund,et al.  Thread-Modular Verification for Shared-Memory Programs , 2002, ESOP.

[21]  Andrei Voronkov,et al.  The design and implementation of VAMPIRE , 2002, AI Commun..