Search papers, labs, and topics across Lattice.
This paper critiques the traditional siloed evaluation of memory-safety mechanisms for C, revealing that such approaches obscure the true costs and compatibility issues when layering defenses. By benchmarking natively memory-safe languages like Rust and Go against compounded C retrofits through standardized cross-language tasks, the authors highlight significant performance penalties and architectural incompatibilities inherent in layered C defenses. The findings underscore the need for a paradigm shift in memory-safety research towards holistic evaluations that clarify the trade-offs between retrofitting legacy systems and adopting safer programming languages.
Layered memory-safety defenses in C can incur hidden performance penalties and compatibility issues that native languages like Rust and Go avoid entirely.
While decades of research have produced numerous retrofitted memory-safety protections for C, these mechanisms are almost exclusively evaluated in isolation, targeting specific vulnerability classes. This siloed evaluation paradigm leaves practitioners without a clear understanding of the cumulative performance costs, interoperability conflicts, and protection gaps that arise when layering defenses to achieve comprehensive safety. This paper presents a new evaluation paradigm that benchmarks natively memory-safe languages like Rust and Go against compounded C retrofits. Using standardized cross-language tasks, we evaluate the performance and protection tradeoffs of state-of-the-art mechanisms when deployed in combination. Our results demonstrate that layered C defenses incur compounding and workload-dependent performance penalties, can suffer from fundamental architectural incompatibilities, and fall short of the protection scope provided by native memory-safe languages. These findings expose a critical engineering decision gap where the true cost of backporting safety to C remains hidden from practitioners. We argue for a fundamental shift in memory-safety research: moving away from isolated evaluation toward holistic, comparative frameworks that inform the high-stakes choice between retrofitting legacy codebases and migrating to modern, safe languages.