Hasty Briefsbeta

双语

An almost catastrophic OpenZFS bug and the humans that made it

10 months ago
  • #Software Bugs
  • #OpenZFS
  • #Rust
  • 在OpenZFS的`vdev_raidz_asize_to_psize`函数中发现一个严重错误,该函数错误地返回了输入参数`asize`而非计算值`psize`。
  • 该漏洞可能导致数据损坏,因其会写入超出已分配磁盘空间的范围,这种静默故障极其危险。
  • 漏洞是在使用激进分配器碎片设置进行测试时发现的,这凸显了全面测试的重要性。
  • C语言的静态分析工具本可检测到未使用的变量`psize`,但由于成本和误报问题,这类工具尚未被日常开发广泛采用。
  • Rust的类型系统可通过区分`PhysicalSize`和`AllocatedSize`类型来预防此类错误,使意外替换变为编译时错误。
  • 讨论反思了人工错误检测的局限性,强调应通过工具辅助捕捉这类疏漏,而非单纯依赖程序员能力。
  • 该案例挑战了'优秀程序员不需要工具'的观念,证明即便是资深开发者也可能忽略隐蔽缺陷。
  • 作者对Rust持辩证态度:既肯定其安全特性,也承认其学习曲线及与某些场景的适配挑战。