Abstract
Dynamic software updating (DSU) systems allow running programs to be patched on-the-fly to add features or fix bugs. While dynamic updates can be tricky to write, techniques for establishing their correctness have received little attention. In this paper, we present the first methodology for automatically verifying the correctness of dynamic updates. Programmers express the desired properties of an updated execution using client-oriented specifications (CO-specs), which can describe a wide range of client-visible behaviors. We verify CO-specs automatically by using off-the-shelf tools to analyze a merged program, which is a combination of the old and new versions of a program. We formalize the merging transformation and prove it correct. We have implemented a program merger for C, and applied it to updates for the Redis key-value store and several synthetic programs. Using Thor, a verification tool, we could verify many of the synthetic programs; using Otter, a symbolic executor, we could analyze every program, often in less than a minute. Both tools were able to detect faulty patches and incurred only a factor-of-four slowdown, on average, compared to single version programs.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Ajmani, S., Liskov, B., Shrira, L.: Modular Software Upgrades for Distributed Systems. In: Hu, Q. (ed.) ECOOP 2006. LNCS, vol. 4067, pp. 452–476. Springer, Heidelberg (2006)
Armstrong, J., Virding, R., Wikstrom, C., Williams, M.: Concurrent programming in ERLANG, 2nd edn. Prentice Hall International Ltd. (1996)
Bloom, T., Day, M.: Reconfiguration and module replacement in Argus: theory and practice. Software Engineering Journal 8(2), 102–108 (1993)
Bracha, G.: Objects as software services (August 2006), http://bracha.org/objectsAsSoftwareServices.pdf
Cassandra API overview, http://wiki.apache.org/cassandra/API
Charlton, N., Horsfall, B., Reus, B.: Formal reasoning about runtime code update. In: HOTSWUP (2011)
Duggan, D.: Type-based hot swapping of running modules. In: ICFP (2001)
Flanagan, C., Sabry, A., Duba, B.F., Felleisen, M.: The essence of compiling with continuations. In: PLDI (1993)
Gupta, D., Jalote, P., Barua, G.: A formal framework for on-line software version change. IEEE TSE 22(2) (1996)
Hayden, C.M., Hardisty, E.A., Hicks, M., Foster, J.S.: Efficient Systematic Testing for Dynamically Updatable Software. In: HOTSWUP (2009)
Hayden, C.M., Magill, S., Hicks, M., Foster, N., Foster, J.S.: Specifying and verifying the correctness of dynamic software updates (extended version). Technical Report CS-TR-4997, Dept. of Computer Science, University of Maryland (2011)
Hayden, C.M., Smith, E.K., Hardisty, E.A., Hicks, M., Foster, J.S.: Evaluating dynamic software update safety using systematic testing (March 2011)
Hicks, M., Nettles, S.: Dynamic software updating. ACM TOPLAS 27(6) (2005)
The K42 Project, http://www.research.ibm.com/K42/
Kramer, J., Magee, J.: The evolving philosophers problem: Dynamic change management. IEEE TSE 16(11) (1990)
Never reboot Linux for Linux security updates : Ksplice, http://www.ksplice.com
Magill, S., Tsai, M.-H., Lee, P., Tsay, Y.-K.: THOR: A Tool for Reasoning about Shape and Arithmetic. In: Gupta, A., Malik, S. (eds.) CAV 2008. LNCS, vol. 5123, pp. 428–432. Springer, Heidelberg (2008)
Magill, S., Tsai, M.-H., Lee, P., Tsay, Y.-K.: Automatic numeric abstractions for heap-manipulating programs. In: POPL (2010)
Neamtiu, I., Hicks, M., Stoyle, G., Oriol, M.: Practical dynamic software updating for C. In: PLDI (2006)
Qadeer, S., Wu, D.: KISS: Leep it simple and sequential. In: PLDI (2004)
The Redis project, http://code.google.com/p/redis/
Reisner, E., Song, C., Ma, K.-K., Foster, J.S., Porter, A.: Using symbolic evaluation to understand behavior in configurable software systems. In: ICSE (2010)
Stoyle, G., Hicks, M., Bierman, G., Sewell, P., Neamtiu, I.: Mutatis Mutandis: Safe and flexible dynamic software updating. ACM TOPLAS 29(4) (2007)
Subramanian, S., Hicks, M., McKinley, K.S.: Dynamic software updates for Java: A VM-centric approach. In: PLDI (2009)
Walton, C.: Abstract Machines for Dynamic Computation. PhD thesis, University of Edinburgh, ECS-LFCS-01-425 (2001)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2012 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Hayden, C.M., Magill, S., Hicks, M., Foster, N., Foster, J.S. (2012). Specifying and Verifying the Correctness of Dynamic Software Updates. In: Joshi, R., Müller, P., Podelski, A. (eds) Verified Software: Theories, Tools, Experiments. VSTTE 2012. Lecture Notes in Computer Science, vol 7152. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-27705-4_22
Download citation
DOI: https://doi.org/10.1007/978-3-642-27705-4_22
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-27704-7
Online ISBN: 978-3-642-27705-4
eBook Packages: Computer ScienceComputer Science (R0)