sasuf-workshop-2019

Workshop "Making systems trustworthy by model checking and symbolic execution"

View the Project on GitHub

SASUF Workshop 2019

Workshop “Making systems trustworthy by model checking and symbolic execution”

Tuesday, May 7, University of Stellenbosch

Committee Room A521, 5th floor, Main Engineering Building

Use Google Maps for directions.

Schedule

08.45 – 09.00 Introductions
09.00 – 09.30 An Overview of Recent Progress in Stateless Model Checking
09.30 – 10.00 Multi-agent systems
10.00 – 10.30 Java Pathfinder and some of its applications
10.30 – 11.00 Break
11.00 – 11.30 Concolic Testing of Higher-order Functional Languages
11.30 – 12.00 A day at the beach: From Java PathFinder to COASTAL
12.00 – 12.30 Searching Fast and Slow: Fuzzing and Symbolic Execution
12.30 – 14.00 Lunch
14.00 – 14.30 Systematic Generation of Programs with Guaranteed Syntax Errors
14.30 – 15.00 An Empirical Comparison of Systematic and Random Grammar-based Fuzzing
15.00 – 15.30 Break
15.30 – 16.00 SMT Result Caching for Symbolic Execution
16.00 – 16.30 Symbolic Automata Learning
16.30 – 17.30 Closing
19.00 - … Dinner at Hussar Grill

Speakers and topics

Willem Visser (University of Stellenbosch): Searching Fast and Slow: Fuzzing and Symbolic Execution Abstract: </br> The past few years a number of research groups built tools where they combined fuzzing and symbolic execution, and in this talk we will discuss yet another case. The combination of these two technologies for bug finding is a no-brainer: fuzzing covers lots of cases with very little effort, but can get stuck generating inputs to highly constrained behaviours, for which symbolic execution is good. What makes our approach (COASTAL) somewhat unique is that it uses concolic execution rather than classic symbolic execution and that the fuzzer and the concolic execution were built into the same framework, from scratch (in other words it is not two existing tools that are being combined). In this talk we will discuss the design decisions, the integrated architecture and show some examples.
Cyrille Artho (KTH Royal Institute of Technology): Java Pathfinder and some of its applications Abstract: </br> This talk gives an overview of Java Pathfinder and then presents the case study "Verifying Nested Lock Priority Inheritance in RTEMS with Java Pathfinder". That work analyzes a Java model of the priority inheritance protocol for mutual exclusion, as implemented in the RTEMS open-source real-time operating system. We verified this model using Java Pathfinder to detect potential data races, deadlocks, and priority inversions. JPF detected a known bug in the RTEMS implementation, which we modified along with the Java model. Verification of the modified model showed the absence of data races, deadlocks, and established nine protocol-specific correctness properties.
Moeketsi Raselimo (University of Stellenbosch): An Empirical Comparison of Systematic and Random Grammar-based Fuzzing
Bernd Fischer (University of Stellenbosch): Systematic Generation of Programs with Guaranteed Syntax Errors
Kostis Sagonas (Uppsala University): An Overview of Recent Progress in Stateless Model Checking Abstract: </br> A successful technique for finding concurrency bugs (i.e., defects that arise only under some thread schedulings) and for verifying their absence is stateless model checking (SMC). Given a terminating program, which may be annotated with assertions, SMC systematically explores the set of all thread schedulings that are possible during runs of this program. A special runtime scheduler drives the SMC exploration by making decisions on scheduling whenever such choices may affect the interaction between threads. Given enough time, the exploration covers all possible executions and detects any unexpected program results, program crashes, or assertion violations. The technique is entirely automatic, has no false positives, does not consume excessive memory, and can quickly reproduce the concurrency bugs it detects. SMC faces the problem that the number of possible thread schedulings grows exponentially with the length of program execution, and must therefore be equipped with techniques to reduce the number of explored executions. This talk will overview algorithms and tools for stateless model checking, focusing on recent progress in algorithms for dynamic partial order reduction (DPOR), both under Sequential Consistency and Weak Memory Models.
Kostis Sagonas (Uppsala University): Concolic Testing of Higher-order Functional Languages Abstract: </br> Concolic testing is a fully automatic software testing technique that combines concrete and symbolic execution of a program unit in an attempt to explore all the code paths in this unit or at least explore all its paths up to a depth bound. In this talk, we will describe how concolic testing can be applicable to high-level languages in general and to functional programming languages in particular. For such languages, the concolic engine needs to efficiently support pattern matching, recursive data types such as lists, recursion and higher-order functions. We will also briefly talk about the engineering effort that concolic testing tools require, in particular in interfacing with SMT solvers.
The talk will also include a demo of CutEr (as in “more cute”), a concolic testing tool for Erlang, and will briefly report on some of the bugs in the implementation of Erlang/OTP that CutEr has discovered and the coverage that it manages to achieve.
Jaco Geldenhuys (University of Stellenbosch): A day at the beach: From Java PathFinder to COASTAL
Stefan Gruner and Nils Timm (University of Pretoria): Multi-agent systems
Jan Taljaard (University of Stellenbosch): SMT Result Caching for Symbolic Execution
Phillip van Heerden (University of Stellenbosch): Symbolic Automata Learning