Results 1 - 10
of
13
Static Error Detection using Semantic Inconsistency Inference
, 2007
"... Inconsistency checking is a method for detecting software errors that relies only on examining multiple uses of a value. We propose that inconsistency inference is best understood as a variant of the older and better understood problem of type inference. Using this insight, we describe a precise and ..."
Abstract
-
Cited by 19 (2 self)
- Add to MetaCart
Inconsistency checking is a method for detecting software errors that relies only on examining multiple uses of a value. We propose that inconsistency inference is best understood as a variant of the older and better understood problem of type inference. Using this insight, we describe a precise and formal framework for discovering inconsistency errors. Unlike previous approaches to the problem, our technique for finding inconsistency errors is purely semantic and can deal with complex aliasing and path-sensitive conditions. We have built a null dereference analysis of C programs based on semantic inconsistency inference and have used it to find hundreds of previously unknown null dereference errors in widely used C programs.
The software model checker BLAST: Applications to software engineering
- INT. J. SOFTW. TOOLS TECHNOL. TRANSFER
, 2007
"... Blast is an automatic verification tool for checking temporal safety properties of C programs. Given a C program and a temporal safety property, Blast either statically proves that the program satisfies the safety property, or provides an execution path that exhibits a violation of the property (or ..."
Abstract
-
Cited by 18 (5 self)
- Add to MetaCart
Blast is an automatic verification tool for checking temporal safety properties of C programs. Given a C program and a temporal safety property, Blast either statically proves that the program satisfies the safety property, or provides an execution path that exhibits a violation of the property (or, since the problem is undecidable, does not terminate). Blast constructs, explores, and refines abstractions of the program state space based on lazy predicate abstraction and interpolation-based predicate discovery. This paper gives an introduction to Blast and demonstrates, through two case studies, how it can be applied to program verification and test-case generation. In the first case study, we use Blast to statically prove memory safety for C programs. We use CCured, a type-based memory-safety analyzer, to annotate a program with run-time assertions that check for safe memory operations. Then, we use Blast to remove as many of the run-time checks as possible (by proving that these checks never fail), and to generate execution scenarios that violate the assertions for the remaining run-time checks. In our second case study, we use Blast to automatically generate test suites that guarantee full coverage with respect to a given predicate. Given a C program and a target predicate p, Blast determines the program locations q for which there exists a program execution that reaches q with p true, and automatically generates a set of test vectors that
G.: BLASTing Linux Code
- In Proc. of the 11th International Workshop on Formal Methods for Industrial Critical Systems (FMICS 06), volume 4346 of LNCS
, 2007
"... Abstract. Computer programs can only run reliably if the underlying operating system is free of errors. In this paper we evaluate, from a practitioner’s point of view, the utility of the popular software model checker Blast for revealing errors in Linux kernel code. The emphasis is on important erro ..."
Abstract
-
Cited by 10 (4 self)
- Add to MetaCart
Abstract. Computer programs can only run reliably if the underlying operating system is free of errors. In this paper we evaluate, from a practitioner’s point of view, the utility of the popular software model checker Blast for revealing errors in Linux kernel code. The emphasis is on important errors related to memory safety in and locking behaviour of device drivers. Our conducted case studies show that, while Blast’s abstraction and refinement techniques are efficient and powerful, the tool has deficiencies regarding usability and support for analysing pointers, which are likely to prevent kernel developers from using it. 1
Varieties of Static Analyzers: A Comparison with ASTRÉE
"... We discuss the characteristic properties of ASTRÉE, an automatic static analyzer for proving the absence of runtime errors in safety-critical real-time synchronous controlcommand C programs, and compare it with a variety of other program analysis tools. 1 ..."
Abstract
-
Cited by 8 (2 self)
- Add to MetaCart
We discuss the characteristic properties of ASTRÉE, an automatic static analyzer for proving the absence of runtime errors in safety-critical real-time synchronous controlcommand C programs, and compare it with a variety of other program analysis tools. 1
Linear Logic and Imperative Programming
, 2008
"... One of the most important and enduring problems in programming languages research involves verification of programs that construct, manipulate and dispose of complex heapallocated data structures. Over the last several years, great progress has been made on this problem by using substructural logics ..."
Abstract
-
Cited by 4 (1 self)
- Add to MetaCart
One of the most important and enduring problems in programming languages research involves verification of programs that construct, manipulate and dispose of complex heapallocated data structures. Over the last several years, great progress has been made on this problem by using substructural logics to specify the shape of heap-allocated data structures. These logics can capture aliasing properties in a concise notation. In this dissertation, we present our work on using an extension of Girard’s intuitionistic linear logic (a substructural logic) with classical constraints as the base logic to reason about the memory safety and shape invariants of programs that manipulate complex heap-allocated data structures. To be more precise, we have defined formal proof rules for an intuitionistic linear logic with constraints, ILC, which modularly combines substructural reasoning with general constraint-based reasoning. We have also defined a formal semantics for our logic – program heaps – with recursively defined predicates. Next, we developed verification systems using different fragments of ILC to verify pointer programs. In particular, we developed a set of sound verification generation
Inferring Invariants by Symbolic Execution
"... Abstract. In this paper we propose a method for inferring invariants for loops in Java programs. An example of a simple while loop is used throughout the paper to explain our approach. The method is based on a combination of symbolic execution and computing fixed points via predicate abstraction. It ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
Abstract. In this paper we propose a method for inferring invariants for loops in Java programs. An example of a simple while loop is used throughout the paper to explain our approach. The method is based on a combination of symbolic execution and computing fixed points via predicate abstraction. It reuses the axiomatisation of the Java semantics of the KeY system. The method has been implemented within the KeY system which allows to infer invariants and perform verification within the same environment. We present in detail the results of a non-trivial example. 1
Predicate Abstraction in a Program Logic Calculus
"... Abstract. Predicate abstraction is a form of abstract interpretation where the abstract domain is constructed from a finite set of predicates over the variables of the program. This paper explores a way to integrate predicate abstraction into a calculus for deductive program verification, where it a ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Abstract. Predicate abstraction is a form of abstract interpretation where the abstract domain is constructed from a finite set of predicates over the variables of the program. This paper explores a way to integrate predicate abstraction into a calculus for deductive program verification, where it allows to infer loop invariants automatically that would otherwise have to be given interactively. The approach has been implemented as a part of the KeY verification system. 1
Software Model-Checking: Benchmarking and Techniques for Buffer Overflow Analysis
, 2008
"... Software model-checking based on abstraction-refinement has recently achieved widespread success in verifying critical properties of real-world device drivers. We believe this success can be replicated for the problem of buffer overflow detection. This thesis presents two projects which contribute t ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Software model-checking based on abstraction-refinement has recently achieved widespread success in verifying critical properties of real-world device drivers. We believe this success can be replicated for the problem of buffer overflow detection. This thesis presents two projects which contribute to this objective. First, it discusses the design and construction of a buffer overflow benchmark for software model-checkers. The benchmark consists of 298 code fragments of varying complexity capturing 22 buffer overflow vulnerabilities in 12 open source applications. We give a preliminary evaluation of the benchmark using the SatAbs model checker. Second, the thesis describes the implementation of several components for supporting buffer overflow analysis in the YASM software model-checker.
PhD Qualifying Dissertation Validating and Verifying Memory Safety for Concurrent Operating System Code
, 2006
"... The current practice of finding programming errors in operating system development is by testing and debugging. However, testing techniques are expensive because of their requirement of manual labour. Furthermore, they are susceptible to missing severe errors. This problem can be solved by applying ..."
Abstract
- Add to MetaCart
The current practice of finding programming errors in operating system development is by testing and debugging. However, testing techniques are expensive because of their requirement of manual labour. Furthermore, they are susceptible to missing severe errors. This problem can be solved by applying automated verification techniques such as software model checking. Most of these techniques suffer from limitations in analysing pointer programs and dealing with concurrency. Because of this, verification methods available today are not sufficient to cover the class of software defects related to memory safety in concurrent reactive software systems. In this dissertation we give a review on current practice and state-ofthe-art techniques and tools for detecting memory safety errors in computer programs. Furthermore we outline a new approach in validating and verifying memory safety properties for concurrent reactive software systems such as device drivers. Our approach is based on both, program simulation and
Intrusion-Resilient Middleware Design and Validation ∗
"... Intrusion Tolerance has become a reference paradigm for dealing with intrusions and accidental faults, achieving security and dependability in an automatic way, much along the lines of classical fault tolerance. This chapter is an introduction to the design and validation of intrusion-tolerant middl ..."
Abstract
- Add to MetaCart
Intrusion Tolerance has become a reference paradigm for dealing with intrusions and accidental faults, achieving security and dependability in an automatic way, much along the lines of classical fault tolerance. This chapter is an introduction to the design and validation of intrusion-tolerant middleware and systems. 1

