## uutils 审计:从生产环境中的 Rust 经验教训 对 uutils 的一次审计,即 Ubuntu 中 GNU coreutils 的 Rust 重实现,发现了 44 个 CVE – 这对 Rust 系统程序员来说是一个宝贵的学习机会。 尽管拥有一支技术娴熟的团队和 Rust 的安全特性(借用检查器、clippy),这些错误仍然出现,突显了 Rust 安全性的*边界*。 核心问题源于“检查时到使用时” (TOCTOU) 问题,即先检查路径,然后对其进行操作,允许攻击者在两者之间将其替换为符号链接。 Rust 标准库 API 虽然方便,但通常会在每次调用时重新解析路径,从而产生此漏洞。 **审计的关键收获:** * **锚定文件描述符:** 在后续操作中使用文件描述符而不是路径。 * **在创建时设置权限:** 利用 `OpenOptions::mode()` 预先建立权限,避免竞争条件。 * **逐一匹配的 Bug:** 优先匹配 GNU coreutils 的行为,即使存在一些怪癖,也要避免破坏现有的脚本。 * **正确处理错误:** 避免使用 `.ok()` 或 `unwrap()` 丢弃 `Result` 值; 暴露错误而不是 panic。 * **注意字节与字符串:** 对于原始字节数据(如文件名),使用 `OsStr` 和 `&[u8]`,而不是依赖于 UTF-8 转换。 这些漏洞并非传统的内存安全问题,而是系统边界处的逻辑缺陷。 这次审计表明,虽然 Rust 消除了许多常见的 C/C++ 错误,但勤奋的防御性编程对于安全的系统代码仍然至关重要。
## 自动架构锦标赛:AI驱动的硬件优化
该项目探索了一个自主研究循环——一个提出、实施、测量和迭代改进的系统——是否能成功优化其专业领域之外的领域:CPU架构。使用SystemVerilog中的5级RV32IM核心,AI代理的任务是提高性能,以CoreMark/MHz为衡量标准。
在超过9.5小时的时间里,该代理生成了73个假设,并采纳了10项改进。这些优化范围从分支预测到ALU设计,最终将性能提升至**2.91 CoreMark/MHz (+92% 相对于基线)** 和 **577次迭代/秒**,甚至超过了人工调优的设计。
然而,关键的收获并非循环本身——后者正变得日益普及——而是**一个强大的*验证器*的关键作用**。 **73个假设中有63个存在缺陷**,凸显了严格检查(形式化验证、协同仿真、FPGA测试、CRC验证)的必要性,以防止回归并确保正确性。
作者认为,未来在于构建这些验证器——定义特定领域内“正确性”的明确规则——而不是仅仅关注改进AI循环。优先考虑强大验证的公司将释放显著的生产力收益,因为循环可以可靠地针对明确定义的约束进行优化。未来的工作包括基于种群的搜索以及使用Embench等不同工作负载进行测试。