VST-Floyd: A Separation Logic Tool to Verify Correctness of C Programs

The Verified Software Toolchain builds foundational machine-checked proofs of the functional correctness of C programs. Its program logic, Verifiable C, is a shallowly embedded higher-order separation Hoare logic which is proved sound in Coq with respect to the operational semantics of CompCert Clight. This paper introduces VST-Floyd, a verification assistant which offers a set of semiautomatic tactics helping users build functional correctness proofs for C programs using Verifiable C.

[1]  Tobias Nipkow,et al.  Hoare Logics for Recursive Procedures and Unbounded Nondeterminism , 2002, CSL.

[2]  Peter W. O'Hearn,et al.  Symbolic Execution with Separation Logic , 2005, APLAS.

[3]  Andrew W. Appel,et al.  Verification of a Cryptographic Primitive: SHA-256 , 2015, TOPL.

[4]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[5]  Adam Chlipala,et al.  The bedrock structured programming system: combining generative metaprogramming and hoare logic in an extensible program verifier , 2013, ICFP.

[6]  Sandip Ray,et al.  Verification Condition Generation Via Theorem Proving , 2006, LPAR.

[7]  Lars Birkedal,et al.  Interactive proofs in higher-order concurrent separation logic , 2017, POPL.

[8]  Lars Birkedal,et al.  Charge! - A Framework for Higher-Order Separation Logic in Coq , 2012, ITP.

[9]  K. Rustan M. Leino,et al.  Dafny: An Automatic Program Verifier for Functional Correctness , 2010, LPAR.

[10]  Lars Birkedal,et al.  Iris: Monoids and Invariants as an Orthogonal Basis for Concurrent Reasoning , 2015, POPL.

[11]  Daniel Kroening,et al.  A Tool for Checking ANSI-C Programs , 2004, TACAS.

[12]  Andrew W. Appel,et al.  A verified messaging system , 2017, Proc. ACM Program. Lang..

[13]  Aquinas Hobor,et al.  The ramifications of sharing in data structures , 2013, POPL.

[14]  Thomas Kleymann,et al.  Hoare logic and VDM : machine-checked soundness and completeness proofs , 1998 .

[15]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[16]  Peter W. O'Hearn,et al.  Compositional Shape Analysis by Means of Bi-Abduction , 2011, JACM.

[17]  Andrew W. Appel,et al.  Program Logics for Certified Compilers , 2014 .

[18]  Tanja Lange,et al.  TweetNaCl: A Crypto Library in 100 Tweets , 2014, LATINCRYPT.

[19]  Martin Wildmoser,et al.  Verified proof carrying code , 2006 .

[20]  Xavier Leroy,et al.  Formal verification of a realistic compiler , 2009, CACM.

[21]  Shengchao Qin,et al.  Automated Verification of Shape, Size and Bag Properties , 2007, ICECCS.

[22]  Lars Birkedal,et al.  The Essence of Higher-Order Concurrent Separation Logic , 2017, ESOP.

[23]  Reynald Affeldt,et al.  Towards formal verification of TLS network packet processing written in C , 2013, PLPV.

[24]  Ramana Kumar,et al.  Verified Characteristic Formulae for CakeML , 2017, ESOP.

[25]  Julien Signoles,et al.  Foncteurs impératifs et composés: la notion de projets dans Frama-C , 2009, Stud. Inform. Univ..

[26]  Andrew W. Appel,et al.  Verified Correctness and Security of OpenSSL HMAC , 2015, USENIX Security Symposium.

[27]  Andrew W. Appel,et al.  A theory of indirection via approximation , 2010, POPL '10.

[28]  Andrew W. Appel,et al.  An indexed model of recursive types for foundational proof-carrying code , 2001, TOPL.

[29]  Robbert Krebbers,et al.  The C standard formalized in Coq , 2015 .

[30]  W AppelAndrew Verification of a Cryptographic Primitive , 2015 .

[31]  C. A. R. HOARE,et al.  An axiomatic basis for computer programming , 1969, CACM.