| CARVIEW |
SeaHorn
A fully automated analysis framework for LLVM-based languages.
In Action
About
Analysis techniques
(The way we prove things)
(Non)-Termination checking
SeaHorn can be used to prove termination and non-termination of programs. The core of the approach lies on the innovative use of the backend verification engines to build termination arguments. More specifically, the backend verification engines are used to systematically sample terminating program execution and to extrapolate from these a candidate ranking function for the program. The candidate ranking function can be a piecewise-defined, lexicographic, or multiphase combination of affine functions of the program variables. The backend verification engines are then used to validate the candidate ranking function, or to otherwise provide a witness for program non-termination. More information about this can be found this paper.
Inconsistency Checking
Inconsistent code is an important class of program abnormalities that appears in real-world code bases and often reveals serious bugs. A piece of code is inconsistent if it is not part of any safely terminating execution. Existing approaches to inconsistent code detection scale to programs with millions of lines of code, and have lead to patches in applications like the web-server Tomcat or the Linux kernel. However, the ability of existing tools to detect inconsistencies is limited by gross over-approximation of looping control-flow. SeaHorn is able to detect inconsistent code fragments. This is done by computing a path coverage for the generated system of Horn clauses. More information about this can be found in this paper.
Publications
- S. Wesley, M. Christakis, J. A. Navas, R. J. Trefler, V. Wüstholz, and A. Gurfinkel. Verifying Solidity Smart Contracts Via Communication Abstraction in SmartACE. At VMCAI 2022.
- S. Priya, X. Zhou, Y. Su, Y. Vizel, Yuyan Bao, and A. Gurfinkel. Verifying Verified Code. At ATVA 2021.
- S. Wesley, M. Christakis, J. A. Navas, R. J. Trefler, V. Wüstholz, and A. Gurfinkel. Compositional Verification of Smart Contracts Through Communication Abstraction. At SAS 2021.
- A. Gurkinkel and J.A. Navas. Abstract Interpretation of LLVM with a Region-Based Memory Model. At VSTTE 2021.
- J. A. Navas, B. Dutertre, I. Mason. Verification of an Optimized NTT Algorithm. At VSTTE 2020.
- J. Kuderski, A. Gurfinkel and J.A.Navas. Unification-based Pointer Analysis without Oversharing. At FMCAD 2019.
- E. Gershuni, N. Amit, A. Gurfinkel, N. Narodytska, J. A. Navas, N. Rinetzky, L. Ryzhyk and M. Sagiv. Simple and Precise Static Analysis of Untrusted Linux Kernel Extensions . (Slides) At PLDI 2019.
- J. Gennari, A. Gurfinkel, T.Kahsai, J.A.Navas, and E.J.Schwartz. Executable Counterexamples in Software Model Checking . (Slides) At VSTTE 2018.
- A. Gurfinkel and J.A.Navas. A Context-Sensitive Memory Model for Verification of C/C++ Programs . (Slides) At SAS 2017.
- A. Gurfinkel: SeaHorn Tutorial.
- C. Urban, A. Gurfinkel, T.Kahsai. Synthesizing Ranking Functions from Bits and Pieces. At TACAS 2016.
- T.Kahsai, J.A.Navas, D. Jovanovic, M. Schaf. Finding Inconsistencies in Programs with Loops. At LPAR 2015. LNCS 9450, pp. 499-514, 2015.
- G.Gange, J.A.Navas, P.Schachte, H.Sondergaard, P.Stuckey. Exploiting Sparsity in Difference-Bound Matrices . At SAS 2016.
- G.Gange, J.A.Navas, P.Schachte, H.Sondergaard, P.Stuckey. An Abstract Domain of Uninterpreted Functions. At VMCAI 2016.
- A. Gurfinkel Algoritmic Logic-Based Verification with SeaHorn. Invited tutorial at SYNASC 2015.
- A. Komuravelli, N.Bjorner, A. Gurfinkel, K. McMillan. Compositional Verification of Procedural Programs using Horn Clauses over Integers and Arrays. At FMCAD 2015. IEEE, pp. 89-96, 2015.
- A.Gurfinkel, T.Kahsai, A. Komuravelli, J.A.Navas. The SeaHorn Verification Framework. At CAV 2015. LNCS 9206, pp. 343-361. 2015
- A.Gurfinkel, T.Kahsai, J.A.Navas. Algorithmic Logic-Based Verification. At ACM SIGLOG Newsletter, April 2015.
- A.Gurfinkel, T.Kahsai, J.A.Navas. SeaHorn: A Framework for Verifying C Programs (Competition Contribution). At TACAS 2015. LNCS 9035. pp 447-450. 2015
- A. Komuravelli, A.Gurfinkel, S.Chaki. SMT-Based Model Checking for Recursive Programs.. At CAV 2014. LNCS 8559, pp. 17-34. 2014