CPALockator Thread-Modular Approach with Transition Abstraction for - - PowerPoint PPT Presentation

cpalockator
SMART_READER_LITE
LIVE PREVIEW

CPALockator Thread-Modular Approach with Transition Abstraction for - - PowerPoint PPT Presentation

CPALockator Thread-Modular Approach with Transition Abstraction for Analysis of Multithreaded Software Pavel Andrianov, andrianov@ispras.ru Motivation Linux module drivers/net/irda/w83977af_ir.ko: 10 000 LOC static void


slide-1
SLIDE 1

Thread-Modular Approach with Transition Abstraction for Analysis of Multithreaded Software

Pavel Andrianov, andrianov@ispras.ru

CPALockator

slide-2
SLIDE 2

Motivation

Linux module drivers/net/irda/w83977af_ir.ko: 10 000 LOC

static void w83977af_change_speed(struct w83977af_ir *self , __u32 speed ){ ... self->io.speed = speed; ... }

SMACK: memory limit CBMC: time limit Yogar-CBMC: segmentation fault Mu-Cseq: –, UNKNOWN CPALockator: 15 sec

static void w83977af_hard_xmit(struct sk_buff *skb , struct net_device *dev){ ... speed = irda_get_next_speed(skb); tmp_speed = self->io.speed; assert(self->io.speed == tmp_speed); if ((speed != self->io.speed) && ...) { … } }

slide-3
SLIDE 3

The goals of a new theory

Scaling on a real software Small amount of false alarms Flexible balance between speed and precision

slide-4
SLIDE 4

Thread-Modular Approach

Environment || || || … Thread || , … , Environment Thread || Thread Thread Thread || Thread

slide-5
SLIDE 5

Partial states

a1 b1 c1 Thread1 ... ... a2 b2 c2 Thread2 ... ...

Interleavings

a1 a2 b1 a2 a1 b2 c1 a2 b1 b2 ... ... ... Environment Environment

slide-6
SLIDE 6

Environment actions based on inference objects

Thread1 ... ... Thread2 ... ... ... Environment

slide-7
SLIDE 7

Environment actions based on abstract transitions

Thread1 ... ... Thread2 ... ... ... Environment

slide-8
SLIDE 8

Abstract transitions

Abstract state Operation over the state (abstract edge) x → 2 y = x

slide-9
SLIDE 9

Abstract transitions

x → 2 y = x x → 2 y → 2 [x > 0]

Transfer relation

slide-10
SLIDE 10

Environment computation

Thread1 Thread 1 as environment Thread2 x → 2 Normal transition y = x x → 2 y = 2 Projected transition y → 0 [y > 0] Normal transition y → 0 y = 2 Applied transition

slide-11
SLIDE 11

Extension of the theory

slide-12
SLIDE 12

Transfer Relation of ThreadModularCPA

slide-13
SLIDE 13

Optimized Transfer Relation

slide-14
SLIDE 14

Experiments

ThreadModularCPA ARGCPA CompositeCPA LocationCPA CallstackCPA LockCPA ThreadCPA PredicateCPA

16 tasks x {true, false} = 32 benchmarks Limits: 15 min, 8 Gb

slide-15
SLIDE 15

Results

Approach Theory with inference objects Theory with abstract transitions False verdicts Correct 10 12 Incorrect 2 2 True verdicts 12 11 Unknowns 8 7 Time(s) 10200 9820

slide-16
SLIDE 16

Refinement of environment formula encoding

tmp = 2 g = * [g == 0] tmp < 10 int f() { int tmp = 2; g = 1; if (g != 0) { g++; } if (tmp < 10) { ERROR(); } } Imprecise formula tmp = 2 g = 1 [g == 0] tmp < 10 Precise formula [ tmp == 2 ] [ g != 0 ] Interpolants tmp = 2; g = 1; [ g == 0 ] [ tmp < 10 ] ERROR(); Error Path

slide-17
SLIDE 17

Results

Approach Base refinement Imprecise+Precise combination False verdicts Correct 12 12 Incorrect 2 2 True verdicts 11 11 Unknowns 7 7 Time(s) 9820 9790

slide-18
SLIDE 18

Refinement with iterative proactive effects application

int f() { int tmp = 2; g = 1; if (g != 0) { g++; } if (tmp < 10) { ERROR(); } } tmp = 2 g = 1 [g == 0] tmp < 10 Precise formula [ g != 0 ] Interpolants tmp = 2 g = 1 [g == 0] tmp < 10 Precise formula with effects [ tmp == 2 ] g = * tmp = 2; g = 1; [ g == 0 ] [ tmp < 10 ] ERROR(); Error Path

slide-19
SLIDE 19

Results

Approach Base version Proactive refinement False verdicts Correct 12 15 Incorrect 2 2 True verdicts 11 12 Unknowns 7 3 Time(s) 9820 7780

slide-20
SLIDE 20

Predicate Abstract edge (effect)

Statement g = g + 1 g = g + 1 convert to PathFormula [g6 = g5 + 1] Projected Edge: Origin Edge: Applied Edge:

slide-21
SLIDE 21

Predicate Abstract edge (effect)

Boolean formula Statement g = g + 1 [g3 = g2 + 1] g = g + 1 convert to PathFormula Change SSA indices [g6 = g5 + 1] Projected Edge: Origin Edge: Applied Edge: [g6 = g5 + 1]

slide-22
SLIDE 22

Instantiating of formulas

Boolean formula g = g + 1 [g3 = g2 + 1] Origin edge project g5 = 2 Thread state apply SSA indices update g2 ➝ g5 g3 ➝ g6 g5 = 2 ∧ g6 = g5 + 1 apply

slide-23
SLIDE 23

Results

Approach Base version Formula effects False verdicts Correct 12 13 Incorrect 2 2 True verdicts 11 12 Unknowns 7 5 Time(s) 9820 6600

slide-24
SLIDE 24

Results

Approach Base version Proactive refinement + Formula effects False verdicts Correct 12 16 Incorrect 2 2 True verdicts 11 13 Unknowns 7 2 Time(s) 9820 3950

slide-25
SLIDE 25

Adjustable block encoding

[ p == 0] y2 = p2 [p == 1] y2 = p2 p3 = y2 + 1 [ p == 0] y2 = p2 [p == 1] p3 = y2 + 1 [ y == 0] y2 = p2 g = * ... p3 = * ... [true] ABE SBE