Verification of the Tree-Based Hierarchical Read-Copy Update in the Linux Kernel
This work addresses the critical need for stringent validation of RCU in the Linux kernel to prevent rare bugs that could affect millions of systems, representing an incremental step towards integrating formal verification into kernel testing.
The paper tackled the problem of verifying the complex Tree-Based Hierarchical Read-Copy Update (RCU) mechanism in the Linux kernel, which is prone to rare but critical bugs, by constructing a model directly from the C source code and using the CBMC model checker to verify safety and liveness properties, achieving the first verification of a significant part of RCU's source code.
Read-Copy Update (RCU) is a scalable, high-performance Linux-kernel synchronization mechanism that runs low-overhead readers concurrently with updaters. Production-quality RCU implementations for multi-core systems are decidedly non-trivial. Giving the ubiquity of Linux, a rare "million-year" bug can occur several times per day across the installed base. Stringent validation of RCU's complex behaviors is thus critically important. Exhaustive testing is infeasible due to the exponential number of possible executions, which suggests use of formal verification. Previous verification efforts on RCU either focus on simple implementations or use modeling languages, the latter requiring error-prone manual translation that must be repeated frequently due to regular changes in the Linux kernel's RCU implementation. In this paper, we first describe the implementation of Tree RCU in the Linux kernel. We then discuss how to construct a model directly from Tree RCU's source code in C, and use the CBMC model checker to verify its safety and liveness properties. To our best knowledge, this is the first verification of a significant part of RCU's source code, and is an important step towards integration of formal verification into the Linux kernel's regression test suite.