一个(几乎)灾难性的 OpenZFS 漏洞以及制造它的人(Rust 也在这里)

主要观点:作者在 OpenZFS 中修复了一个严重的vdev_raidz_asize_to_psize函数的 bug,该 bug 会导致在特定条件下写入超出分配空间的数据而损坏磁盘数据。作者通过测试新功能时发现此问题,花费两天才追踪到。在 C 语言中难以直接捕捉此类问题,而在 Rust 语言中可通过明确区分不同大小类型避免。同时思考了 C 程序员对工具或语言特性的态度,认为不能仅靠努力提升,应利用工具提升软件质量,且对 Rust 向 C 程序员推销时的“盲点”有所感悟,对这类可能导致数据丢失的 bug 仍感到担忧。
关键信息

  • 详细展示了vdev_raidz_asize_to_psize函数的代码及修复前后的差异。
  • 提及 C 语言中静态分析工具不易发现该 bug,而 Rust 可通过明确类型避免。
  • 阐述了作者对 C 程序员对待工具态度的看法及自身经历。
    重要细节
  • OpenZFS 中数据有“逻辑”“物理”“已分配”三种大小概念,各虚拟设备驱动有转换函数。
  • 该 bug 在主开发分支存在数月但未在实际发布中出现。
  • 作者对 Rust 语言有一定思考和感悟,虽喜欢但使用不多。
阅读 39
0 条评论