中文

PinChecker:识别 Rust 固定 API 的不安全抽象

软件工程 2025-06-23 v2

摘要

Rust 语言的固定 API 保证了在按固定 API 约定使用时,自引用和异步结构体的内存位置稳定性。Rust 确保在常规安全代码中不可能违反此类约定,但在 unsafe 代码中则可能使用 unsafe 固定 API。库作者可以将任意 unsafe 代码封装在常规库函数中。这些函数可以在更高层级代码中自由调用,而无需显式警告。因此,分析库函数以排除固定 API 约定违反行为至关重要。不幸的是,这种测试依赖于库作者的手动分析,这种方法效率低下。我们的目标是开发一种方法论,给定库后,尝试构建程序以链式调用库函数,从而故意破坏固定 API 约定,以验证其安全性。我们引入了 RPIL,这是一种新型中间表示,模型化了与固定 API 相关的函数关键行为。我们实现了 PinChecker,这是一种由 RPIL 驱动的合成驱动违反检测工具,能够自动合成能揭露 bug 的程序。我们对 crates.io 上 13 个流行 Rust 库进行实验,发现了 2 个已确认的 bug。

关键词

引用

@article{arxiv.2504.14500,
  title  = {PinChecker: Identifying Unsound Safe Abstractions of Rust Pinning APIs},
  author = {Yuxuan Dai and Yang Feng},
  journal= {arXiv preprint arXiv:2504.14500},
  year   = {2025}
}