中文

rCanary:检测 Rust 中半自动化内存管理边界的内存泄漏

软件工程 2024-08-02 v2

摘要

Rust 是一种高效的系统编程语言,通过编译期验证保证内存安全。它采用一种新颖的基于所有权的资源管理模型以促进自动释放。该模型预期可消除内存泄漏。然而,我们观察到用户干预将其驱动为半自动化内存管理,并使其易于出错而导致泄漏。与受 unsafe 关键字限制的内存安全保证违例不同,泄漏内存的边界是隐式的,编译器不会向开发者发出任何警告。本文中,我们提出 rCanary,一种静态、非侵入式且完全自动化的模型检测器,用于检测跨半自动化边界的泄漏。我们设计了一个编码器来抽象具有堆分配的数据,并基于布尔可满足性形式化了一个精炼的无泄漏内存模型。它可为 Rust MIR 生成 SMT-Lib2 格式约束,并作为 Cargo 组件实现。我们通过使用从开源 Rust 项目拉取请求中收集的缺陷包基准评估 rCanary。结果表明,以可接受的假阳性召回所有这些缺陷是可能的。我们进一步将工具应用于来自 crates.io 与 GitHub 的超过 1,200 个真实 crate,识别出 19 个存在内存泄漏的 crate。我们的分析器也很高效,每个包耗时 8.4 秒。

关键词

引用

@article{arxiv.2308.04787,
  title  = {rCanary: Detecting Memory Leaks Across Semi-automated Memory Management Boundary in Rust},
  author = {Mohan Cui and Hui Xu and Hongliang Tian and Yangfan Zhou},
  journal= {arXiv preprint arXiv:2308.04787},
  year   = {2024}
}