Skip to main content

Building Certified Libraries for PCC: Dynamic Storage Allocation

Part of the Lecture Notes in Computer Science book series (LNCS,volume 2618)

Abstract

Proof-Carrying Code (PCC) allows a code producer to provide to a host a program along with its formal safety proof. The proof attests a certain safety policy enforced by the code, and can be mechanically checked by the host. While this language-based approach to code certification is very general in principle, existing PCC systems have only focused on programs whose safety proofs can be automatically generated. As a result, many low-level system libraries (e.g., memory management) have not yet been handled. In this paper, we explore a complementary approach in which general properties and program correctness are semiautomatically certified. In particular, we introduce a low-level language CAP for building certified programs and present a certified library for dynamic storage allocation.

Keywords

  • Inference Rule
  • Code Block
  • Memory Block
  • User Program
  • Assembly Language

These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

This research is based on work supported in part by DARPA OASIS grant F30602-99- 1-0519, NSF grant CCR-9901011, and NSF ITR grant CCR-0081590. Any opinions, findings, and conclusions contained in this document are those of the authors and do not reflect the views of these agencies.

References

  1. A. W. Appel. Foundational proof-carrying code. In Proc. 16th Annual IEEE Symposium on Logic in Computer Science, pages 247–258, June 2001.

    Google Scholar 

  2. C. Colby, P. Lee, G. Necula, F. Blau, M. Plesko, and K. Cline. A certifying compiler for Java. In Proc. 2000 ACM Conf. on Prog. Lang. Design and Impl., pages 95–107, New York, 2000. ACM Press.

    Google Scholar 

  3. T. Coquand and G. Huet. The calculus of constructions. Information and Computation, 76:95–120, 1988.

    CrossRef  MathSciNet  MATH  Google Scholar 

  4. J.-C. Filliâtre. Verification of non-functional programs using interpretations in type theory. Journal of Functional Programming (to appear), 2001.

    Google Scholar 

  5. J.-C. Filliâtre. The WHY certification tool, tutorial and reference manual. http://why.lri.fr/, July 2002.

  6. C. A. R. Hoare. An axiomatic basis for computer programming. Communications of the ACM, Oct. 1969.

    Google Scholar 

  7. C. A. R. Hoare. Proof of a program: FIND. Communications of the ACM, Jan. 1971.

    Google Scholar 

  8. W. A. Howard. The formulae-as-types notion of constructions. In To H.B.Curry: Essays on Computational Logic, Lambda Calculus and Formalism. Academic Press, 1980.

    Google Scholar 

  9. B. W. Kernighan and D. M. Ritchie. The C Programming Language (Second Edition). Prentice Hall, 1988.

    Google Scholar 

  10. D. E. Knuth. The Art of Computer Programming (Second Edition), volume 1. Addison-Wesley, 1973.

    Google Scholar 

  11. G. Morrisett, D. Walker, K. Crary, and N. Glew. From System F to typed assembly language. In Proc. 25th ACM Symp. on Principles of Prog. Lang., pages 85–97. ACM Press, Jan. 1998.

    Google Scholar 

  12. G. Necula. Proof-carrying code. In Proc. 24th ACM Symp. on Principles of Prog. Lang., pages 106–119, New York, Jan. 1997. ACM Press.

    Google Scholar 

  13. G. Necula and P. Lee. Safe kernel extensions without run-time checking. In Proc. 2nd USENIX Symp. on Operating System Design and Impl., pages 229–243, 1996.

    Google Scholar 

  14. G. Necula and P. Lee. The design and implementation of a certifying compiler. In Proc. 1998 ACM Conf. on Prog. Lang. Design and Impl., pages 333–344, New York, 1998.

    Google Scholar 

  15. C. Paulin-Mohring. Inductive definitions in the system Coq-rules and properties. In M. Bezem and J. Groote, editors, Proc. TLCA, volume 664 of LNCS. Springer-Verlag, 1993.

    Google Scholar 

  16. J. C. Reynolds. Lectures on reasoning about shared mutable data structure. IFIP Working Group 2.3 School/Seminar on State-of-the-Art Program Design Using Logic, Tandil, Argentina, September 6-13, 2000.

    Google Scholar 

  17. J. C. Reynolds. Separation logic: A logic for shared mutable data structures. In Proceedings Seventeenth Annual IEEE Symposium on Logic in Computer Science, Los Alamitos, California, 2002. IEEE Computer Society.

    Google Scholar 

  18. The Coq Development Team. The Coq proof assistant reference manual. The Coq release v7.1, Oct. 2001.

    Google Scholar 

  19. The FLINT Project. Coq implementation for certified dynamic storage allocation. http://flint.cs.yale.edu/flint/publications/cdsa.html, Oct. 2002.

  20. P. R. Wilson, M. S. Johnstone, M. Neely, and D. Boles. Dynamic storage allocation: A survey and critical review. In Proc. Int. Workshop on Memory Management, Kinross Scotland (UK), 1995.

    Google Scholar 

  21. A. K. Wright and M. Felleisen. A syntactic approach to type soundness. Information and Computation, 115(1):38–94, 1994.

    MATH  CrossRef  MathSciNet  Google Scholar 

  22. D. Yu, N. A. Hamid, and Z. Shao. Building certified libraries for PCC: Dynamic storage allocation. Technical Report YALEU/DCS/TR-1247, Dept. of Computer Science, Yale Univeristy, New Haven, CT, Jan. 2003. http://flint.cs.yale.edu/.

Download references

Author information

Affiliations

Authors

Rights and permissions

Reprints and Permissions

Copyright information

© 2003 Springer-Verlag Berlin Heidelberg

About this paper

Cite this paper

Yu, D., Hamid, N.A., Shao, Z. (2003). Building Certified Libraries for PCC: Dynamic Storage Allocation. In: Degano, P. (eds) Programming Languages and Systems. ESOP 2003. Lecture Notes in Computer Science, vol 2618. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-36575-3_25

Download citation

  • DOI: https://doi.org/10.1007/3-540-36575-3_25

  • Published:

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-00886-6

  • Online ISBN: 978-3-540-36575-4

  • eBook Packages: Springer Book Archive