Abstract
Transient faults are single-shot hardware errors caused by high energy particles from space, manufacturing defects, overheating, and other sources. Such faults can be devastating for security- and safety-critical systems. In order to mitigate these problems, software developers can add redundancy in various ways to their software systems. However, such redundancy is hard to reason about and corner cases are easy to miss, leaving these systems vulnerable. To solve this problem, we have developed a logic, based on Separation Logic, for reasoning about faults as resources. We show how to use this logic as a language of assertions and incorporate it into a Hoare Logic for verifying imperative programs. This Hoare Logic is parameterized by a formal fault model and it can be used to prove imperative programs correct with respect to that model. In addition to developing this basic verification platform, we have designed a modal operator that abstracts away the effects of individual faults, enabling modularization of proofs and greatly simplifying the reasoning involved. The logic is proved sound and studied through a number of examples, including a simplified version of the RSA Sign/Verify algorithm.
Chapter PDF
Similar content being viewed by others
Keywords
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.
References
Boneh, D., DeMillo, R., Lipton, R.: On the importance of checking cryptographic protocols for faults. Journal of Cryptology 14(2), 101–119 (2001)
Govindavajhala, S., Appel, A.: Using memory errors to attack a virtual machine. In: Proceedings of the 2003 Symposium on Security and Privacy, May 2003, pp. 153–165 (2003)
Bar-El, H., Choukri, H., Naccache, D., Tunstall, M., Whelan, C.: The sorcerer’s apprentice guide to fault attacks. Proceedings of the IEEE 94(2), 370–382 (2006)
Hegde, R., Shanbhag, N.R.: Energy-efficient signal processing via algorithmic noise-tolerance. In: ISLPED 1999: Proceedings of the 1999 international symposium on Low power electronics and design, pp. 30–35. ACM, New York (1999)
Chang, J., Reis, G.A., August, D.I.: Automatic instruction-level software-only recovery methods. In: Proceedings of the 2006 International Conference on Dependendable Systems and Networks (June 2006)
Shirvani, P.P., Saxena, N., McCluskey, E.J.: Software-implemented EDAC protection against SEUs. IEEE Transactions on Reliability 49, 273–284 (2000)
Winskel, G.: The Formal Semantics of Programming Languages. MIT Press, Cambridge (1996)
Ishtiaq, S., O’Hearn, P.: Bi as an assertion language for mutable data structures. In: Proceedings of the 28th ACM Symposium on Principles of Programming Languages, London, United Kingdom, January 2001, pp. 14–26 (2001)
Reynolds, J.C.: Separation logic: A logic for shared mutable data structures. In: Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science, pp. 55–74. IEEE Computer Society, Los Alamitos (2002)
Borin, E., Wang, C., Wu, Y., Araujo, G.: Software-based transparent and comprehensive control-flow error detection. In: CGO 2006: Proceedings of the International Symposium on Code Generation and Optimization, Washington, DC, USA, pp. 333–345. IEEE Computer Society, Los Alamitos (2006)
Oh, N., Shirvani, P.P., McCluskey, E.J.: Control-flow checking by software signatures 51(2), 111–122 (2002)
Reis, G.A., Chang, J., Vachharajani, N., Rangan, R., August, D.I.: SWIFT: Software implemented fault tolerance. In: Proceedings of the 3rd International Symposium on Code Generation and Optimization (March 2005)
Reis, G.A., Chang, J., Vachharajani, N., Rangan, R., August, D.I., Mukherjee, S.S.: Design and evaluation of hybrid fault-detection systems. In: Proceedings of the 32nd Annual International Symposium on Computer Architecture, June 2005, pp. 148–159 (2005)
Pattabiraman, K., Nakka, N., Kalbarczyk, Z., Iyer, R.: Symplfied: Symbolic program-level fault injection and error detection framework. In: International Conference on Dependable Systems and Networks (2008)
Walker, D., Mackey, L., Ligatti, J., Reis, G., August, D.I.: Static typing for a faulty lambda calculus. In: ACM International Conference on Functional Programming, Portland, Oregon (September 2006)
Elsman, M.: Fault-tolerant voting in a simply-typed lambda calculus. Technical Report ITU-TR-2007-99, IT University of Copenhagen, Rued Langgaards Vej 7, DK-2300 Copenhagen S, Denmark (June 2007)
Perry, F., Mackey, L., Reis, G.A., Ligatti, J., August, D.I., Walker, D.: Fault-tolerant typed assembly language. In: International Symposium on Programming Language Design and Implementation, PLDI (June 2007)
Perry, F., Walker, D.: Reasoning about control flow in the presence of transient faults. In: International Static Analysis Symposium (July 2008)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2010 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Meola, M.L., Walker, D. (2010). Faulty Logic: Reasoning about Fault Tolerant Programs. In: Gordon, A.D. (eds) Programming Languages and Systems. ESOP 2010. Lecture Notes in Computer Science, vol 6012. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-11957-6_25
Download citation
DOI: https://doi.org/10.1007/978-3-642-11957-6_25
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-11956-9
Online ISBN: 978-3-642-11957-6
eBook Packages: Computer ScienceComputer Science (R0)