野外的一个 rustc 可靠性漏洞

主要观点:作者在开发用于 Web 优化问题的建模语言 rooc 时,引入 minilp 库作为求解器,遇到了在浏览器中运行时的 panic 问题,经过一系列调试和研究,最终确定是 rustc 编译器的一个未定义 mir 优化导致的 bug,并成功修复该问题使 rooc 能在浏览器中运行。
关键信息:

  • 开发 rooc 语言,目标是在浏览器中运行,求解器需编译为 WebAssembly,找到 minilp 库但其已归档。
  • 将 minilp 库添加为 rooc 的求解器,在浏览器中测试时出现 panic,通过 wasm2map 尝试获取更好的栈跟踪。
  • 深入调试 minilp 库的代码,发现问题只在发布模式下出现,且无 unsafe 代码、Miri 无问题、无依赖导致问题,最终创建最小化复现并向 rustc 仓库提交 bug 报告。
  • 几天后 bug 被最小化到特定代码,是 rustc 编译器的问题,优先级为P-critical,几天后修复并一周后发布。
    重要细节:
  • 在调试过程中不断添加打印语句、使用断点等方法来追踪问题。
  • 尝试在不同模式下运行代码以确定问题范围。
  • 对 minilp 库的各个函数和依赖进行详细分析。
  • 最终成功修复问题并发布 rooc 库的新版本,还fork了 minilp 库进行修复和添加新功能。
阅读 13
0 条评论