Finding Bugs in Open Source Systems Code Using Coccinelle

Finding Bugs in Open Source Systems Code Using Coccinelle

Finding Bugs in Open Source Systems Code using Coccinelle Julia Lawall (University of Copenhagen/INRIA-Regal) Joint work with Gilles Muller, René Rydhof Hansen, Jesper Andersen, Nicolas Palix DIKU-AU-INRIA February 7, 2010 1 Bugs: They’re everywhere! 2 Our focus Bugs in the Linux kernel I Linux is critical software. – Used in embedded systems, desktops, servers, etc. I Linux is very large. – Almost 14 000 .c files – Over 8 million lines of code – Increase of almost 50% since 2006. I Linux has both more and less experienced developers. – Maintainers, contributers, developers of proprietary drivers 3 Bug: !x&y Author: Al Viro <[email protected]> wmi: (!x & y) strikes again diff --git a/drivers/acpi/wmi.c b/drivers/acpi/wmi.c @@ -247,7 +247,7@@ block = &wblock->gblock; handle = wblock->handle; - if (!block->flags & ACPI_WMI_METHOD) + if (!(block->flags & ACPI_WMI_METHOD)) return AE_BAD_DATA; if (block->instance_count < instance) 4 Lifetime of !x&y bugs Defects 5 linux-2.6.13linux-2.6.14linux-2.6.15linux-2.6.16linux-2.6.17linux-2.6.18linux-2.6.19linux-2.6.20linux-2.6.21linux-2.6.22linux-2.6.23linux-2.6.24linux-2.6.25linux-2.6.26linux-2.6.27linux-2.6.28linux-2.6.29linux-2.6.30next Linux file absent Graph generated by Herodotos: bug present http://www.diku.dk/~npalix/herodotos Goal: Find and fix bugs in C code Approach: Coccinelle: http://coccinelle.lip6.fr/ I Static analysis to find patterns in C source code. I Automatic transformation to fix bugs. I User configurable, based on patch notation (semantic patches). 6 Finding and fixing !x&y bugs using Coccinelle @@ expression E; constant C; @@ - !E & C + !(E & C) I E is an arbitrary expression. I C is an arbitrary constant. 7 Example Original code: if (!state->card-> ac97_status & CENTER_LFE_ON) val &= ~DSP_BIND_CENTER_LFE; Semantic patch: @@ expression E; constant C;@@ - !E & C + !(E & C) Generated code: if (!(state->card->ac97_status & CENTER_LFE_ON)) val &= ~DSP_BIND_CENTER_LFE; 8 Results 96 instances in Linux from 2.6.13 (August 2005) to I v2.6.28 (December 2008) 58 in 2.6.20 (February 2007) I 2 in Linux-next (October 10, 2009) I 9 Defects linux-2.6.13linux-2.6.14linux-2.6.15linux-2.6.16linux-2.6.17linux-2.6.18linux-2.6.19linux-2.6.20linux-2.6.21linux-2.6.22linux-2.6.23linux-2.6.24linux-2.6.25linux-2.6.26linux-2.6.27linux-2.6.28linux-2.6.29linux-2.6.30next Linux Bug: dereference of a possibly NULL value Author: Mariusz Kozlowski <[email protected]> tun/tap: Fix crashes if open() /dev/net/tun and then poll() it. diff --git a/drivers/net/tun.c b/drivers/net/tun.c @@ -486,12 +486,14@@ - struct sock *sk = tun->sk; + struct sock *sk; unsigned int mask = 0; if (!tun) return POLLERR; + sk = tun->sk; 10 A NULL pointer dereference semantic patch Bug pattern: Dereference before a NULL test: @@ expression x; identifier fld; @@ * x->fld ... * x == NULL I Isomorphisms cause x == NULL to also match eg !x. Lots of false positives: bridge = bridge->bus->self; if (!bridge || prev_bridge == bridge) ... 11 A NULL pointer dereference semantic patch Bug pattern: Dereference before a NULL test: @@ expression x; identifier fld; @@ * x->fld ... * x == NULL I Isomorphisms cause x == NULL to also match eg !x. Lots of false positives: bridge = bridge->bus->self; if (!bridge || prev_bridge == bridge) ... 12 A more constrained rule @@ type T; identifier i,fld; expression E; statement S; @@ - T i = E->fld; + T i; ... when != E when != i if (E == NULL) S + i = E->fld; 13 Results for the more constrained rule Defects 14 linux-2.6.13linux-2.6.14linux-2.6.15linux-2.6.16linux-2.6.17linux-2.6.18linux-2.6.19linux-2.6.20linux-2.6.21linux-2.6.22linux-2.6.23linux-2.6.24linux-2.6.25linux-2.6.26linux-2.6.27linux-2.6.28linux-2.6.29linux-2.6.30next Linux Conclusion A patch-like program matching and transformation language Over 450 patches created using Coccinelle accepted into Linux Starting to be used by other Linux developers Probable bugs found in gcc, postgresql, vim, amsn, pidgin, mplayer, openssl, vlc, wine http://coccinelle.lip6.fr/ 15 http://coccinelle.lip6.fr/ 16.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    16 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us