Greg Kroah-Hartman 负责维护内核的稳定分支和测试分支。 Linux 作为 16 个内核子系统的维护者,他在 Rust Week 2026 大会上发表了演讲,概述了 Rust 语言如何帮助防止因 C 开发人员在处理内存、锁、错误处理和处理不受信任的数据时常犯的错误而导致的内核漏洞。Rust 的主要优势在于能够在构建时检测此类错误,而无需人工代码审查。然而,Rust 并非万能灵药,无法消除所有问题,也没有人计划用 Rust 重写内核。人们期望 Rust 能通过在新驱动程序和子系统中的应用而逐步普及。
使用 Rust 可以避免的内核 bug 的例子包括:蓝牙子系统中一个存在了 15 年之久的 bug,以及 Xen 虚拟机管理程序中的一个问题。在第一个例子中,开发者在未进行检查的情况下解引用了一个指针;在第二个例子中,他忘记在错误处理代码中释放锁。
据 Greg 所说,大多数内核漏洞都是由这类小问题引起的,这些问题会随着时间的推移而累积,最终演变成安全漏洞。在 Rust 中,编译器可以避免很多这类问题。例如,Rust 内核中的锁抽象机制只允许在获取到相应的锁之后才能访问内部结构指针,并且该锁会自动释放。如果没有获取到锁,在 Rust 中访问结构指针是不可能的。
Greg认为Rust的特性可以避免内核中60%的bug,编译器的检查机制也能节省维护人员与作者讨论错误处理正确性和锁机制合理性的时间。此外,Rust支持的引入已经对内核中的C代码产生了积极影响,它简化了C代码和接口,并借鉴了一些开发技巧(例如,实现作用域有限的锁)。
由于 Rust 的类型系统确保代码遵循既定规则,并且持续集成系统在构建时检查代码,因此在审查 Rust 代码变更时,维护者可以专注于验证底层逻辑,而无需监控资源操作。使用 Rust 还可以更谨慎地处理来自硬件或外部系统的数据。这是通过在类型系统层面明确区分可信数据和不可信数据来实现的:开发人员只需在从不可信状态过渡到可信状态时进行分析。
最近,内核安全团队平均每天发布约 13 份漏洞报告,与之前的漏洞发现趋势相比,这简直令人难以置信(例如,昨天就发布了 277 份内核漏洞报告)。Greg 认为,使用 Rust 是减少因传统错误处理和资源管理疏忽而导致的内核漏洞的有效途径之一。内核对 Rust 的支持已经超越了实验阶段,并在去年底被采纳为一项标准功能。

来源: opennet.ru
