skip to main content
10.1145/2001420.2001459acmconferencesArticle/Chapter ViewAbstractPublication PagesisstaConference Proceedingsconference-collections
research-article

Generating analyses for detecting faults in path segments

Published:17 July 2011Publication History

ABSTRACT

Although static bug detectors are extensively applied, there is a cost in using them. One challenge is that static analysis often reports a large number of false positives but little diagnostic information. Also, individual bug detectors need to be built in response to new types of faults, and tuning a static tool for precision and scalability is time-consuming. This paper presents a novel frame-work that automatically generates scalable, interprocedural, path-sensitive analyses to detect user-specified faults. The framework consists of a specification technique that expresses faults and information needed for their detection, a scalable, path-sensitive algorithm, and a generator that unifies the two. The analysis produced identifies not only faults but also the path segments where the root causes of a fault are located. The generality of the framework is accomplished for both data- and control-centric faults. We implemented our framework and generated fault detectors for identifying buffer overflows, integer violations, null-pointer dereferences and memory leaks. We experimentally demonstrate that the generated analyses scales to large deployed software, and its detection capability is comparable to tools that target a specific type of fault. In our experiments, we identify a total of 146 faults of the four types. While the length of path segments for the majority of faults is 1--4 procedures, we are able to detect faults deeply embedded in the code across 35 procedures.

References

  1. D. Babic and A. J. Hu. Calysto: scalable and precise extended static checking. In Proceedings of the 30th international conference on Software engineering, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. R. Bodik, R. Gupta, and M. L. Soffa. Interprocedural conditional branch elimination. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation, 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. D. Brumley, T. cker Chiueh, R. Johnson, H. Lin, and D. Song. Rich: Automatically protecting against integer-based vulnerabilities. In In Symposium on Network and Distributed Systems Security, 2007.Google ScholarGoogle Scholar
  4. W. R. Bush, J. D. Pincus, and D. J. Sielaff. A static analyzer for finding dynamic programming errors. Software Practice and Experience, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. H. Chen and D. Wagner. Mops: an infrastructure for examining security properties of software. In Proceedings of the 9th ACM Conference on Computer and Communications Security, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. S. Cherem, L. Princehouse, and R. Rugina. Practical memory leak detection using guarded value-flow analysis. In Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. J. Clause and A. Orso. Leakpoint: pinpointing the causes of memory leaks. In Proceedings of the 32nd International Conference on Software Engineering, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. M. Das, S. Lerner, and M. Seigle. ESP: path-sensitive program verification in polynomial time. In Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. R. J. David and D. Wagner. Finding user/kernel pointer bugs with type inference. In In Usenix Security Symposium, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. E. Duesterwald, R. Gupta, and M. L. Soffa. A practical framework for demand-driven interprocedural data flow analysis. ACM Transactions on Programming Languages and Systems, 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. D. Evans. Static detection of dynamic memory errors. In Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, 1996. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. FindBugs. http://findbugs.sourceforge.net/.Google ScholarGoogle Scholar
  13. B. Hackett, M. Das, D. Wang, and Z. Yang. Modular checking for buffer overflows in the large. In Proceeding of the International Conference on Software Engineering, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. S. Hallem, B. Chelf, Y. Xie, and D. Engler. A system and language for building system-specific, static analyses. In In Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Y. Hamadi. Disolver: A Distributed Constraint Solver. Technical Report MSR-TR-2003-91, Microsoft Research.Google ScholarGoogle Scholar
  16. N. Heintze and O. Tardieu. Demand-driven pointer analysis. In Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation, 2001. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. W. Le and M. L. Soffa. Marple: a demand-driven path-sensitive buffer overflow detector. In Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. W. Le and M. L. Soffa. Path-based fault correlation. In Proceedings of the 18th ACM SIGSOFT International Symposium on Foundations of software engineering, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. V. B. Livshits and M. S. Lam. Tracking pointers with path and context sensitivity for bug detection in c programs. In Proceedings of 11th ACM SIGSOFT International Symposium on Foundations of Software Engineering, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. S. Lu, Z. Li, F. Qin, L. Tan, P. Zhou, and Y. Zhou. Bugbench: Benchmarks for evaluating bug detection tools. In Proceedings of Workshop on the Evaluation of Software Defect Detection Tools, 2005.Google ScholarGoogle Scholar
  21. G. C. Necula, S. McPeak, and W. Weimer. Ccured: type-safe retrofitting of legacy code. In POPL '02: Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages 128--139, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. M. Orlovich and R. Rugina. Memory leak analysis by contradiction. In Static Analysis, 13th International Symposium, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Phoenix. http://research.microsoft.com/phoenix/.Google ScholarGoogle Scholar
  24. W. Visser, K. Havelund, G. Brat, and S. Park. Model checking programs. In Proceedings of the IEEE international conference on Automated software engineering, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. M. Weiser. Program slicing. In ICSE 81: Proceedings of the 5th international conference on Software engineering, 1981. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Y. Xie and A. Aiken. Saturn: A scalable framework for error detection using boolean satisfiability. ACM Trans. Program. Lang. Syst., 29(3), 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Y. Xie, A. Chou, and D. Engler. ARCHER: Using symbolic, path-sensitive analysis to detect memory access errors. In Proceedings of 11th ACM SIGSOFT International Symposium on Foundations of Software Engineering, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. M. Zitser, R. Lippmann, and T. Leek. Testing static analysis tools using exploitable buffer overflows from open source code. In Proceedings of the International Symposium on Foundations of Software Engineering, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Generating analyses for detecting faults in path segments

            Recommendations

            Comments

            Login options

            Check if you have access through your login credentials or your institution to get full access on this article.

            Sign in
            • Published in

              cover image ACM Conferences
              ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis
              July 2011
              394 pages
              ISBN:9781450305624
              DOI:10.1145/2001420

              Copyright © 2011 ACM

              Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

              Publisher

              Association for Computing Machinery

              New York, NY, United States

              Publication History

              • Published: 17 July 2011

              Permissions

              Request permissions about this article.

              Request Permissions

              Check for updates

              Qualifiers

              • research-article

              Acceptance Rates

              Overall Acceptance Rate58of213submissions,27%

              Upcoming Conference

              ISSTA '24

            PDF Format

            View or Download as a PDF file.

            PDF

            eReader

            View online with eReader.

            eReader