interrupt driven software
play

Interrupt-driven Software 2 3 Interrupt 1 Interrupt 2 Interrupt - PowerPoint PPT Presentation

Interrupt-driven Software 2 3 Interrupt 1 Interrupt 2 Interrupt ?? Interrupt 3 4 5 6 7 T1() { T2() { a = 1; a = 2; x = a; }; }; T1() { T2() { a = 1; a = 2; x = a; }; }; 8 9 10 Interrupt-driven Abstract Interpretation


  1. Interrupt-driven Software 2

  2. 3

  3. Interrupt 1 Interrupt 2 Interrupt ?? Interrupt 3 4

  4. 5

  5. 6

  6. 7

  7. T1() { T2() { a = 1; a = 2; x = a; }; }; T1() { T2() { a = 1; a = 2; x = a; }; }; 8

  8. 9

  9. 10

  10. Interrupt-driven Abstract Interpretation Invariants programs with inter-interrupt propagation Query CFG Checking the feasibility LLVM Front-end of Dataflow between interrupts Interrupt behavior modeling 11

  11. Abstract Interpretation with inter-interrupt propagation L1-S1 L2-S2 L2-S2 L4-S4 L3-S3 L4-S4 12

  12. Priority: L < H Irq_L() { Irq_H() { x = 1; x = 0; }; assert(x == 0); }; 13

  13. Priority: L < H Irq_L() { Irq_H() { x = 1; x = 0; }; assert(x == 0); }; Thread behavior: The assertion can be violated! 13

  14. Priority: L < H Irq_L() { Irq_H() { x = 1; x = 0; }; assert(x == 0); }; Interrupt behavior: The assertion holds! 13

  15. Priority: L < H Irq_L() { Irq_H() { x = 1; assert(x == 0); }; }; 14

  16. Priority: L < H Irq_L() { Irq_H() { x = 1; assert(x == 0); }; }; Thread behavior: The assertion can be violated! 14

  17. Priority: L < H Irq_L() { Irq_H() { x = 1; assert(x == 0); }; }; Thread behavior: The assertion can be violated! Interrupt behavior: The assertion can be violated as well! 14

  18. Priority: L < H Irq_L() { Irq_H() { if (…) assert(x == 0); }; x = 1; x = 0; }; 15

  19. Priority: L < H Irq_L() { Irq_H() { if (…) assert(x == 0); }; x = 1; x = 0; }; Thread behavior: The assertion can be violated! 15

  20. Priority: L < H Irq_L() { Irq_H() { if (…) assert(x == 0); Post-dominate }; x = 1; x = 0; }; Interrupt behavior: The assertion holds! 15

  21. Thread behavior Interrupt behavior (Existing) (Our approach) Example1 Warning Proof Example2 Warning Warning Example3 Warning Proof 16

  22. Interrupt-driven Abstract Interpretation Invariants programs with inter-interrupt propagation Query Datalog CFG Facts Feasibility Checking LLVM Front-end (Z3 fixed-point) Datalog Rules Interrupt behavior modeling 17

  23. Interrupt-driven Abstract Interpretation Invariants programs with inter-interrupt propagation Query Datalog CFG Facts Feasibility Checking LLVM Front-end (Z3 fixed-point) Datalog Rules Interrupt behavior modeling 17

  24. [Whaley & Lam, 2004] [Livshits & Lam, 2005] Interrupt-driven software  Datalog facts Datalog Engine Datalog rules Data-flow Feasibility between interrupts 18

  25. Declarative language for deductive databases [Ullman 1989] Facts parent (bill, mary) parent (mary, john) Rules ancestor (X, Y) ← parent (X, Y) ancestor (X, Y) ← parent (X, Z), ancestor (Z, Y) New relationship: ancestor (bill, john) 19

  26. Irq_L() { Irq_H() { NoPreempt x = 1; x = 0; }; assert(x == 0); }; NoPreempt (s1, s2) <- Pri(s1, p1) & Pri(s2, p2) & (p2 ≥ p1) NoPreempt (x=1, x==0) <- Pri(x=1, L) & Pri (x==0, H) & (H ≥ L) 20

  27. Irq_L() { Irq_H() { x = 1; x = 0; Dominate }; assert(x == 0); }; CoveredLoad CoverdLoad(l) <- Load(l, v) & Store (s, v) & Dom (s, l) CoveredLoad(x==0) <- Load(x==0) & Store(x=0) & Dom(x=0, x==0) 20

  28. Irq_L() { Irq_H() { NoPreempt x = 1; x = 0; }; assert(x == 0); MustNotReadFrom }; CoveredLoad MustNotReadFrom(l, s) <- CoveredLoad(l) & NoPreempt (s, l) for the same variable MustNotReadFrom(x==0, x=1) <- CoveredLoad(x==0) & NoPreempt (x=1, x==0) for x 20

  29. Irq_L() { Irq_H() { if (…) NoPreempt assert(x == 0); }; x = 1; x = 0; }; NoPreempt (s1, s2) <- Pri(s1, p1) & Pri(s2, p2) & (p2 ≥ p1) NoPreempt (x==0, x=1) <- Pri(x==0, L) & Pri (x=1, H) & (H ≥ L) 21

  30. Irq_L() { Irq_H() { if (…) assert(x == 0); Post-dominate }; x = 1; InterceptedStore x = 0; }; InterceptedStore(s1) <- Store(s1, v) & Store(s2, v) & PostDom(s1, s2) InterceptedStore(x=1) <- Store(x=1) & Store(x=0) & PostDom(x=0, x=1) 21

  31. Irq_L() { Irq_H() { NoPreempt if (…) assert(x == 0); }; x = 1; InterceptedStore MustNotReadFrom x = 0; }; MustNotReadFrom(l, s) <- InterceptedStore(s) & NoPreempt(l, s) for the same variable MustNotReadFrom(x==0, x=1) <- InterceptedStore(x=1) & NoPreempt(x==0, x=1) for x 21

  32. Interrupt-driven Abstract Interpretation Invariants programs with inter-interrupt propagation Query Datalog CFG Facts Feasibility Checking LLVM Front-end (Z3 fixed-point) Datalog Rules Interrupt behavior modeling 22

  33. Abstract Interpretation with inter-interrupt propagation L1-S1 L2-S2 L2-S2 L3-S3 L4-S4 L4-S4 MustNotReadFrom(L1, S1) MustNotReadFrom(L3, S3) 23

  34. Summary Num. of Benchmarks 35 Total LOC 22,541 lines Total number of pairs 5,116 69% Number of filtered pairs 3,560 64.21 s Analysis time 24

  35. 25

  36. 300 200 100 0 violation proofs warnings proofs warnings proofs BMC base Thread behavior Interrupt behavior BMC IntAbs Modular [DATE 15] (Our method) [VMCAI 14] Number of warnings & proofs w.r.t each method 26

  37. 300 200 Unsound 100 0 violation proofs warnings proofs warnings proofs BMC base Thread behavior Interrupt behavior BMC IntAbs Modular [DATE 15] (Our method) [VMCAI 14] Number of warnings & proofs w.r.t each method 26

  38. 300 200 100 0 violation proofs warnings proofs warnings proofs BMC base Thread behavior Interrupt behavior BMC IntAbs Modular [DATE 15] (Our method) [VMCAI 14] Number of warnings & proofs w.r.t each method 26

  39. • Proposed the first modular static analysis method for sound verification of interrupt- driven software • Precisely identified infeasible data flows between interrupts with a declarative interrupt model • Showed significant precision and performance improvements 27

  40. Thank you! https://github.com/chunghasung/intabs

Recommend


More recommend