checking for deadlock, double free, and other abuses in the linux kernel source code tree (cssse...

Post on 10-Jun-2015

95 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slides of the talk for my paper "Checking for Deadlock, Double Free, and Other Abuses in the Linux Kernel Source Code Tree" at CSSSE in Reading, UK, May 2006. The preprint of the paper is available at http://www.academia.edu/4154291/Checking_for_Deadlock_Double_Free_and_Other_Abuses_in_the_Linux_Kernel_Source_Code_Tree_CSSSE_06_ . The volume in which it is published is Springer LNCS 3994, pages 765--772.

TRANSCRIPT

Checking for Deadlock, Double Free, and Other Abuses in the Linux Kernel

Source Code Tree

Peter T. Breuer & Simon PickinUniversidad Carlos III de Madrid

Goal•

ApplyMathematical Methods

to the source code of theLinux kernel

Must be

post-hoc

capable of application by non-experts

able to handle 6.5 millions of lines of rapidly changing C

Analysis Example -Sleep under Spinlock Hunt (SluSH)

Output from SluSH run

What is sleep under spinlock?

• Sleep - thread scheduled out of CPU

• Spinlock - busy wait for lock release

• 2+2 = 1 2 CPUs + 2 threads busy waiting

= 1 dead machine

Example of bad code

• snd_sb_csp_load() in sb16_csp.c

Another piece of guilty code

• Kernel 2.6.12 sound/oss/sequencer.c midi_outc()

Cox owns up

Output summarises liklihoods

Other classes of problems detected

• Access (read/write) to kfreed memory

• Overflow 4096B of stack

• Spinlock under spinlock

• Call to function that expects non-NULL parameters with possibly NULL argument

• ...– Logic is configured, so new tests can be invented

Example of kfree/access

• drivers/scsi/aix7xxx_old.c in kernel 2.6.3

Basic technique

The abstract view

Symbolic Approximation

• Description of statements as logic transformers– p x=x+1 p[n-1/n]

• Approximation of programs in this domain– More approximate, weaker logic relation

• Perspectives of single symbolic approximation– Trigger/action system for raising alarms!

• Compositional logic NRBG– Adjusting logic adjusts approximation

Statement Logic - NRB

• Single code statement

– maintains condition P normally

– empty statement cannot return (F)

– empty statement cannot break (F)

Sequence logic -NRB• normal exit: traverse A then B

• return exit: return from A OR traverse A then return from B

• break exit: break from AOR traverse A then break from B

Loop logic -NRB

• break from body is only normal exit from while(1)

• relax p until it is invariant

Programmable trigger/action engine

• Three rules handle propagation of call graph and other housekeeping.

– a sleep call while the objective function is positive causes output:

Using the analyser

• Call with the same arguments as given to the gcc compiler

Limitations

• Predicates are restricted to unions of n-cubes

• State is not followed well enough:– x = 1; if (x) A else B;

● treated correctly - only A is evaluated

– if (x) A else B; if (x) C else D;● over-abstracted - A;C | A;D | B;C | B;D

– solution is to push branch hypotheses down((x!=0);A | (x==0);B) ; ((x!=0);C | (x==0);D)

● but we can't follow more detailed expressions well

Implication of predicates is decidable

• Basic evaluation is C U Ci of cubes

– i.e. U Ci covers C

Summary

• A step towards analyses of 100MLoC.– No expertise needed

– Fast

– Copes with massive amounts of code

– Soundly based

• Negatives– Not good tracking program state; model

checking?● Solution - symbolic approximation

– Not yet easy to extend to new problem classes

top related