ACM Home Page
Please provide us with feedback. Feedback
CMC: a pragmatic approach to model checking real code
Full text PdfPdf (1.55 MB)
Source ACM SIGOPS Operating Systems Review archive
Volume 36 ,  Issue SI  (Winter 2002) table of contents
OSDI '02: Proceedings of the 5th symposium on Operating systems design and implementation
SPECIAL ISSUE: Robustness table of contents
Pages: 75 - 88  
Year of Publication: 2002
ISSN:0163-5980
Authors
Madanlal Musuvathi  Stanford University, Stanford, CA
David Y. W. Park  Stanford University, Stanford, CA
Andy Chou  Stanford University, Stanford, CA
Dawson R. Engler  Stanford University, Stanford, CA
David L. Dill  Stanford University, Stanford, CA
Publisher
ACM  New York, NY, USA
Bibliometrics
Downloads (6 Weeks): 13,   Downloads (12 Months): 58,   Citation Count: 4
Additional Information:

abstract   references   cited by   index terms   collaborative colleagues  

Tools and Actions: Review this Article  
DOI Bookmark: Use this link to bookmark this Article: http://doi.acm.org/10.1145/844128.844136
What is a DOI?

ABSTRACT

Many system errors do not emerge unless some intricate sequence of events occurs. In practice, this means that most systems have errors that only trigger after days or weeks of execution. Model checking [4] is an effective way to find such subtle errors. It takes a simplified description of the code and exhaustively tests it on all inputs, using techniques to explore vast state spaces efficiently. Unfortunately, while model checking systems code would be wonderful, it is almost never done in practice: building models is just too hard. It can take significantly more time to write a model than it did to write the code. Furthermore, by checking an abstraction of the code rather than the code itself, it is easy to miss errors.The paper's first contribution is a new model checker, CMC, which checks C and C++ implementations directly, eliminating the need for a separate abstract description of the system behavior. This has two major advantages: it reduces the effort to use model checking, and it reduces missed errors as well as time-wasting false error reports resulting from inconsistencies between the abstract description and the actual implementation. In addition, changes in the implementation can be checked immediately without updating a high-level description.The paper's second contribution is demonstrating that CMC works well on real code by applying it to three implementations of the Ad-hoc On-demand Distance Vector (AODV) networking protocol [7]. We found 34 distinct errors (roughly one bug per 328 lines of code), including a bug in the AODV specification itself. Given our experience building systems, it appears that the approach will work well in other contexts, and especially well for other networking protocols.


REFERENCES

Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.

1
 
2
K. Bhargavan, D. Obradovic, and C. Gunter. Formal verification of standards for distance vector routing protocols, 1999.
 
3
 
4
5
 
6
Crispan Cowan, Calton Pu, Dave Maier, Jonathan Walpole, Peat Bakke, Steve Beattie, Aaron Grier, Perry Wagle, Qian Zhang, and Heather Hinton. Stack Guard:Automatic adaptive detection and prevention of buffer-overflow attacks. In Proc. 7th USENIX Security Conference, pages 63--78, San Antonio, Texas, jan 1998.
 
7
C.Perkins, E. Royer, and S. Das. Ad Hoc On Demand Distance Vector (AODV) Routing.IETF Draft, http://www.ietf.org/internet-drafts/draft-ietf-manet-aodv-10.txt, January 2002.
8
 
9
David L. Detlefs, K. Rustan M. Leino, Greg Nelson, and James B. Saxe. Extended static checking, 1998.
 
10
 
11
D.R. Engler, B. Chelf, A. Chou, and S. Hallem. Checking system rules using system-specific, programmer-written compiler extensions. In Proceedings of the Fourth Symposium on Operating Systems Design and Implementation, October 2000.
 
12
Erik Nordstrom et al. Ad hoc protocol evaluation testbed. http://apetestbed.sourceforge.net/.
 
13
Erik Nordstrom et al. AODV-UU Implementation. http://user.it.uu.se/henrikl/aodv/.
14
15
 
16
J. Hajek. Automatically verified data transfer protocols. In Proceedings of the 4th ICCC, pages 749--756, 1978.
17
 
18
 
19
 
20
Luke Klein-Berndt and et.al. Kernel AODV Implementation. http://w3.antd.nist.gov/wctg/aodv_kernel/.
 
21
F. Lilieblad and et.al. Mad-hoc AODV Implementation. http://mad-hoc.flyinglinux.net/.
 
22
S. McCanne and S. Floyd. UCB/LBNL/VINTnetwork simulator - ns (version 2), April 1999. http://www.isi.edu/nsnam/ns/.
 
23
K.L. McMillan and J. Schwalbe. Formal verification of the gigamax cache consistency protocol. In Proceedings of the International Symposium on Shared Memory Multiprocessing, pages 242--51. Tokyo, Japan Inf. Process. Soc., 1991.
 
24
G. Nelson. Techniques for program verification. Available as Xerox PARC Research Report CSL-81-10, June, 1981, Stanford University, 1981.
 
25
 
26
Charles E. Perkins, Elizabeth M. Royer, and Samir R.Das. Private Email Communication.
 
27
Rational Software. Purify: Advanced runtime error checking for C/C++ developers. http://www.rational.com/products/purify_unix/.
 
28
 
29
 
30
C.H. West. General technique for communications protocol validation. IBM Journal of Research and Development, 22(4), 1978.


Collaborative Colleagues:
Madanlal Musuvathi: colleagues
David Y. W. Park: colleagues
Andy Chou: colleagues
Dawson R. Engler: colleagues
David L. Dill: colleagues