Enforcing Murphy's law for advance identification of run-time failures
Zach Miller, Todd Tannenbaum, Ben Liblit · 2012
Applications do not typically view the kernel as a source of bad input. However, the kernel can behave in unusual (yet permissible) ways for which applications are badly unprepared. We present Murphy, a language-agnostic tool that helps developers discover and isolate run-time fail-ures in their programs by simulating difficult-to-reproduce but completely-legitimate interactions between the appli-cation and the kernel. Murphy makes it easy to enable or disable sets of kernel interactions, called gremlins, so developers can focus on the failure scenarios that are im-portant to them. Gremlins are implemented using the ptrace interface, intercepting and potentially modify-ing an application’s system call invocation while requiring no invasive changes to the host machine. We show how to use Murphy in a variety of modes to find different classes of errors, present examples of the kernel interactions that are tested, and explain how to ap-ply delta debugging techniques to isolate the code causing the failure. While our primary goal was the development of a tool to assist in new software development, we suc-cessfully demonstrate that Murphy also has the capability to find bugs in hardened, widely-deployed software.