A Study of Undefined Behavior Across Foreign Function Boundaries in Rust Libraries

2024年04月17日
  • 简介
    Rust编程语言限制别名和可变性,以提供静态安全性保证,开发人员依赖这些保证来编写安全和高性能的应用程序。然而,Rust经常用于与其他限制较弱的语言进行交互。这些语言支持与Rust的操作语义模型冲突的循环和自引用设计模式,这可能是未定义行为的一个重要来源,目前没有任何工具能够检测到。我们创建了MiriLLI工具,该工具使用现有的Rust和LLVM解释器共同执行多语言Rust应用程序。我们在一个大规模的研究中使用了我们的工具,研究了调用外部函数的Rust库,我们发现了45个未定义或不良行为的实例。其中包括四个从平均每天下载量超过10,000的库中发现的bug,一个来自GNU编译器集合(GCC)的组件,以及一个由Rust项目维护的库中发现的bug。大多数这些错误是由不兼容的别名和初始化模式、不正确的外部函数绑定和无效的类型转换引起的。大多数别名违规是由Rust中不安全的操作引起的,但它们发生在外部代码中。Rust社区必须投资于开发新的工具来验证多语言程序,以确保开发人员可以轻松地检测和修复这些错误。
  • 图表
  • 解决问题
    检测Rust与其他语言交互时的潜在错误,特别是涉及别名和可变性的问题。
  • 关键思路
    使用MiriLLI工具,结合Rust和LLVM解释器,对Rust库调用外部函数的多语言应用进行联合执行,发现了45个未定义或不良行为的实例。
  • 其它亮点
    MiriLLI工具的创造和使用,大规模研究Rust库调用外部函数的多语言应用,发现了一些常见的错误类型,提出了相应的解决方案。
  • 相关研究
    与Rust多语言交互相关的研究包括:《Safe FFI: Verified, Efficient, and Safe Foreign Function Interface for Rust》、《Towards Safe and Efficient FFI: Verifying Rust Bindings in C-based Applications》等。
PDF
原文
点赞 收藏 评论 分享到Link

沙发等你来抢

去评论