automatic predicate abstraction of c programspeople.cs.aau.dk/~srba/courses/fs-07/petur-2.pdf ·...

31
Automatic Predicate Abstraction of C Programs Thomas Ball Rupak Majumdar Todd Millstein Sriram K. Rajamani Presenter: Petur Olsen October 12, 2007

Upload: others

Post on 28-Mar-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

Automatic Predicate Abstraction of C Programs

Thomas Ball Rupak Majumdar Todd MillsteinSriram K. Rajamani

Presenter: Petur Olsen

October 12, 2007

Page 2: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

The ArticleThe Authors

Contributions

Predicate abstraction

First algorithm for industrial strength language

In this case C programs

Tool called C2BP

Integration into the SLAM toolkit

2/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 3: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

The ArticleThe Authors

The Article

Published

Conference on Programming language design andimplementation

ACM SIGPLAN 2001

Microsoft Research

3/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 4: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

The ArticleThe Authors

The Authors

Thomas Ball

Principal Researcher at Microsoft Research

Static and dynamic program analysis, model checking andtheorem proving techniques

Developer of SLAM

Rupak Majumdar

Assistant Professor at University of California, Los Angeles

Computer-aided verification, software verification andprogramming languages, logic, and automata theory

Developer of BLAST

4/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 5: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

The ArticleThe Authors

Authors

Todd Millstein

Assistant Professor at University of California, Los Angeles

Programming Languages for Sensor Networks

Sriram K. Rajamani

Senior Researcher at Microsoft Research India

Leader of the Rigorous Software Engineering Research Group

Developer of SLAM

5/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 6: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

The ArticleThe Authors

Outline

1 C2bp

2 Bebop

3 Tests and Results

4 Conclusion

6/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 7: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

SLAM

Three Phases

Abstraction using C2BP

Model checking using the BEBOP model checker

Refinement using the NEWTON predicate discoverer

7/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 8: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

SLAM

Features

Fully automated

No spurious error paths

Automatic refinement

May not converge

May terminate with “don’t know”

Rarely does

8/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 9: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

C2BP

General

Translation from C program into Boolean program

Predicate abstraction

Only boolean variables with added constructs

9/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 10: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

C2BP

Boolean language

Same control-flow structure

One boolean variable for each predicate

Boolean expressions over variables in the program

Represent truth values at statements

10/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 11: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

typedef struct cell {int val;struct cell∗ next;

} ∗list;

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;curr = ∗l;prev = NULL;newl = NULL;while (curr != NULL) {

nextCurr = curr−>next;if (curr−>val > v) {

if (prev != NULL) {prev−>next = nextCurr;

}

if (curr == ∗l) {∗l = nextCurr;

}curr−>next = newl;newl = curr;

} else {prev = curr;

}curr = nextCurr;

}return newl;

}

11/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 12: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};{curr==NULL} = unknown();{curr−>val>v} = unknown();{prev==NULL} = true;{prev−>val>v} = unknown();skip;while(∗) {

assume(!{curr==NULL});skip;if (∗) {

assume({curr−>val>v});if (∗) {

assume(!{prev==NULL});skip;

}

if (∗) {skip;

}skip;skip;

} else {assume(!{curr−>val>v});{prev==NULL} = {curr==NULL};{prev−>val>v} = {curr−>val>v};

}{curr==NULL} = unknown();{curr−>val>v} = unknown();

}assume({curr==NULL});

}

12/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 13: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;

curr = ∗l;

prev = NULL;

newl = NULL;

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};

{curr==NULL} = unknown();{curr−>val>v} = unknown();

{prev==NULL} = true;{prev−>val>v} = unknown();

skip;

13/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 14: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;

curr = ∗l;

prev = NULL;

newl = NULL;

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};

{curr==NULL} = unknown();{curr−>val>v} = unknown();

{prev==NULL} = true;{prev−>val>v} = unknown();

skip;

13/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 15: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;

curr = ∗l;

prev = NULL;

newl = NULL;

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};

{curr==NULL} = unknown();{curr−>val>v} = unknown();

{prev==NULL} = true;{prev−>val>v} = unknown();

skip;

13/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 16: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;

curr = ∗l;

prev = NULL;

newl = NULL;

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};

{curr==NULL} = unknown();{curr−>val>v} = unknown();

{prev==NULL} = true;{prev−>val>v} = unknown();

skip;

13/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 17: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

list partition(list ∗l, int v) {list curr, prev, newl, nextCurr;

curr = ∗l;

prev = NULL;

newl = NULL;

void partition() {bool {curr==NULL}, {prev==NULL};bool {curr−>val>v}, {prev−>val>v};

{curr==NULL} = unknown();{curr−>val>v} = unknown();

{prev==NULL} = true;{prev−>val>v} = unknown();

skip;

13/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 18: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

bool unknown() {if(∗) {

return true;}else {

return false;}

}

(*) = Non-deterministic choice

14/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 19: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

while (curr != NULL) {nextCurr = curr−>next;

while (∗) {assume(!{curr==NULL});skip;

15/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 20: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

while (curr != NULL) {nextCurr = curr−>next;

while (∗) {assume(!{curr==NULL});skip;

15/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 21: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

SLAMGeneralExample

while (curr != NULL) {nextCurr = curr−>next;

while (∗) {assume(!{curr==NULL});skip;

15/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 22: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

GeneralExample

BEBOP

General

Set of reachable states for each statement s

State: Truth values of variables in scope at s

Set of states: Boolean function over variables in scope at s

16/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 23: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

GeneralExample

...while (curr != null){

...if(curr−>val > v){

if(prev != NULL)prev−>next = nextCurr

...newl = curr;

} else prev = curr;curr = nextCurr;

}...

(curr 6= NULL)V

(curr → val > v)V

((prev → val ≤ v)W

(prev = NULL))

17/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 24: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

GeneralExample

Automatic deduction

From this

(curr 6= NULL)∧

(curr → val > v)∧

((prev → val ≤ v)∨

(prev = NULL))

BEBOP deducts

(prev 6= curr)

18/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 25: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

OverviewNT Driver CheckingArray Bound Checking and Heap Invariants

Overview

Two settings

Tested Windows NT drivers using SLAM

Checking array bounds and heap invariants

19/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 26: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

OverviewNT Driver CheckingArray Bound Checking and Heap Invariants

NT Drivers

Overview

One internally developed driver

Four drivers from Windows 2000 DDK

One error in internal driver

BEBOP finished in under 10 seconds

20/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 27: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

OverviewNT Driver CheckingArray Bound Checking and Heap Invariants

Results

21/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 28: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

OverviewNT Driver CheckingArray Bound Checking and Heap Invariants

Overview

Five tests

Knuth-Morris-Pratt string matcher

Array implementation of quick sort

List partitioning

List search

Reverse a list twice

22/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 29: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

OverviewNT Driver CheckingArray Bound Checking and Heap Invariants

Results

23/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 30: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

IntroductionC2bp

BebopTests and Results

Conclusion

Automatic Predicate Abstraction

Advantages

Used on industrial strength language

Adaptable to (e.g.) Java

Fully automatic

Disadvantages

Limited predicate logic

Exponential running time

24/25 Ball, Majumdar, Millstein, Rajamani Automatic Predicate Abstraction of C Programs

Page 31: Automatic Predicate Abstraction of C Programspeople.cs.aau.dk/~srba/courses/FS-07/petur-2.pdf · Sriram K. Rajamani Senior Researcher at Microsoft Research India Leader of the Rigorous

Questions?