Static Analysis Tools in Industry: Dispatches from the Front Line

Static Analysis Tools in Industry: Dispatches from the Front Line

Static Analysis Tools in Industry: Dispatches From the Front Line Dr. Andy Chou Chief Scientist and Co-founder Coverity, Inc. Outline • Things I know • A little bit about Coverity • Bug-Finding: Technology + Philosophy + Engineering • Beyond Bug-Finding: Fixing • What I will show you • Demonstration of Coverity Static Analysis • What I think I know • Making Money: Business model + Trials + Data • Socioeconomic aspects of developers and tools • A few specific problems that want to be solved • Pure speculation 2 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Coverity Founders Andy Chou Seth Hallem Ben Chelf Dawson Engler Dave Park 3 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 It Started with Research (1999-2003) Checking System Rules Using System-Specific, Programmer- Written Compiler Extensions, OSDI 2000 Using Meta-level Compilation to Check FLASH Protocol Code, ASPLOS 2000 An Empirical Study of Operating Systems Errors, SOSP 2001 A System and Language for Building System-Specific, Static Analyses, PLDI 2002 ARCHER: Using Symbolic, Path-sensitive Analysis to Detect Memory Access Errors, FSE 2003 ... and more 4 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 About Coverity • Founded in 2003 • Bootstrapped until 2007 • $22m venture funding in 2007 from Foundation and Benchmark Capital As of mid-2011: • 190+ employees • 1100+ customers • 100,000+ users worldwide • Estimated 3-5 billion lines of code actively scanned • Headquartered in San Francisco with offices in Boston, Calgary, Tokyo, and London 5 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Static Analysis Source Code Symbolic CFG Analysis Defects detected char *p; char *p if(x == 0) p = foo(); if (x == 0) else true false p = 0; p = 0 p = foo() Assigning: p=0 if(x != 0) if(x != 0) x!=0 taking true branch s=*p; true false else ... s=*p Dereferencing null pointer p ...; return; return 6 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Defective Sample Code 7 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Defects shown inline with the source code 8 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 First Defect: Memory Leak Allocated “names” Checking for allocation failures for all variables Freeing “selection” instead of “names” “names” leaked 9 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Second Defect: Double Free Freeing “selection” instead of “names” Freeing “selection” again 10 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 C/C++ Defects That Coverity Can Find Part 1 Resource Leaks Memory-corruptions • Memory leaks • Out-of-bounds access • Resource leak in object • String length miscalculations • Incomplete delete • Copying to destination buffers too small • Microsoft COM BSTR memory leak • Overflowed pointer write Uninitialized variables • Negative array index write • Missing return statement • Uninitialized pointer/scalar/array read/write • Allocation size error • Uninitialized data member in class or Memory-illegal access structure • Incorrect delete operator Concurrency Issues • Overflowed pointer read • Deadlocks • Out-of-bounds read • Race conditions • Returning pointer to local variable • Blocking call misuse • Negative array index read Integer handling issues • Improper use of negative value • Use/read pointer after free • Unintended sign extension Control flow issues Improper Use of APIs • Logically dead code • Insecure chroot • Missing break in switch • Using invalid iterator • Structurally dead code • printf() argument mismatch Error handling issues • Unchecked return value • Uncaught exception • Invalid use of negative variables 11 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 C/C++ Defects That Coverity Can Find Part 2 Program hangs Insecure data handling • Infinite loop • Integer overflow • Double lock or missing unlock • Loop bound by untrusted source • Negative loop bound • Write/read array/pointer with • Thread deadlock untrusted value • sleep() while holding a lock • Format string with untrusted source Null pointer differences Performance inefficiencies • Dereference after a null check • Big parameter passed by value • Dereference a null return value • Large stack use • Dereference before a null check Security best practices violations Code maintainability issues • Possible buffer overflow • Multiple return statements • Copy into a fixed size buffer • Unused pointer value • Calling risky function • Use of insecure temporary file • Time of check different than time of use • User pointer dereference 12 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Java/C# Defects That Coverity Can Find Resource Leaks Class hierarchy inconsistencies • Database connection leaks • Failure to call super.clone() or • Resource leaks supler.finalize() • Socket & Stream leaks • Missing call to super class API usage errors • Virtual method in constructor • Using invalid iterator Control flow issues • Unmodifiable collection error • Return inside finally block • Use of freed resources • Missing break in switch Concurrent data access violations Error handling issues • Values not atomically updated • Unchecked return value • Double checked locking Null pointer dereferences • Data race condition • Dereference after null check • Volatile not atomically updated • Dereference before null check Performance inefficiencies • Dereference null return value • Use of inefficient method Code maintainability issues • String concatenation in loop • Calling a deprecated method • Unnecessary synchronization • Explicit garbage collection Program hangs • Static set in non-static method • Thread deadlock 13 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Philosophy + Engineering + Technology • Focus on bug finding • Focus on developer stickiness • Low false positive rate (typically <20% out of the box) • (more on next slide) • Interprocedural analysis with bottom-up function summarization • Ensures bounded memory use: only one function + summaries for callees • Each function only analyzed once; recursive cycles are broken • Context sensitive • Path sensitivity with false path pruning • Multiple independent false path pruners: integer interval solver, string logic, inequality, SAT-based • Staged analysis • Cheaper analyses are run before more expensive ones – false path pruning only run if a candidate defect is found • Parallel, incremental analysis • Android kernel: 700kLOC, 10 minutes with 8-way parallel analysis from scratch 14 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Top reasons for low false positives • Iterative checker design • Start with a defect example or idea • Implement a rough checker that casts a wide net • Run on open source • Sample first N results • Address idioms, refine heuristics, add options • Repeat until the checker has a low FP rate and still finds defects • Or, discard the checker altogether • Evidence-based approach • Only report defects if enough evidence is available that it is likely to be real • This also helps developers understand the results • Evidence orientation is a good way to think about what analyses will be successful • Perception: avoidance of stupid looking false positives is important • A single example of a dumb looking FP can result in loss of credibility • Credibility among a core individual / group is key to adoption 15 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Technologies we don’t use (much) • Pointer alias analysis • Blobs cause FP explosions • Typical tricks for achieving scalability introduce inference steps that don’t make sense to developers – e.g. field insensitivity, flow insensitivity, ... • Checkers, derivers, and FPP do their own intraprocedural alias tracking with full understanding of what they do and don’t care about • No single unified memory model – each checker can pick its own • E.g. No resource leak is detected in this code: 16 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Other technologies we don’t use much • Heap structure analysis • Complex string analysis • Abstract interpretation (*) • ... many more 17 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Beyond Bug-Finding: Fixing 18 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 The importance of workflow • What doesn’t work: Code Analysis Bugs • Why? • Bugs get fixed. False positives don’t. Over time, FP rate approaches 100%. • Unclear what should be fixed; no prioritization • Unclear who should fix what; no ownership • Workflow separates a static analysis engine from a static analysis solution. 19 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Defect management and collaboration • What works better: Code Analysis DB Historical Shared Defect Merging Defect Server (CIM) • Track defects across time, even if the code changes (hashing/ merging) • Share triage information across developers • Prioritize and assign ownership of defects • Detect defect duplication across branches 20 Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2011 Deployment practices • Clean before checkin • Nightly build • Continuous integration • Incremental nightly build + weekend full analysis

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    45 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