用 Rust 为 Linux 内核编写安全驱动程序的框架

Josh Triplett,在英特尔工作,也是监督 Crates.io 开发的委员会成员,在开源技术峰会上发表讲话 提交 一个工作组,旨在使 Rust 语言在系统编程领域与 C 语言平起平坐。

在正在创建的工作组中,Rust 开发人员将与英特尔的工程师一起准备规范,定义需要在 Rust 中实现的系统编程功能。 系统编程通常需要低级操作,例如执行特权处理器指令和获取有关处理器状态的详细信息。 在已经为 Rust 开发的类似功能中,值得注意的是对未命名结构、联合、汇编语言插入(“asm!”宏)和 BFLOAT16 浮点数格式的支持。

Josh 认为系统编程的未来属于 Rust,而现代现实中的 C 语言正在夺取过去几年被汇编占据的位置。 锈
不仅使开发人员摆脱了 C 语言中由于低级内存工作而产生的固有问题,而且还提供了在现代编程范例开发中使用它的机会。

讨论 演出
Josh 提出了用 Rust 语言在 Linux 内核中添加开发驱动程序的能力的想法,这将使得能够以最小的努力创建更安全、更好的驱动程序,并且不会出现释放后内存访问、null 等问题。指针解引用和缓冲区溢出。

负责维护 Linux 内核稳定分支的 Greg Kroah-Hartman 表示,如果 Rust 语言比 C 语言具有真正的优势,他愿意将用于开发驱动程序的框架添加到内核中,例如,它将提供安全的支持。通过内核 API 进行绑定。 此外,Greg 认为该框架仅作为一个选项,默认情况下不处于活动状态,以免将 Rust 包含为对内核的构建依赖项。

事实证明,已有多个团队在朝这个方向努力。 例如,“Fish in a Barrel”公司的开发人员 подготовили 一个用 Rust 语言为 Linux 内核编写可加载模块的工具包,在接口和内核结构上使用一组抽象层来提高安全性。 使用该实用程序根据现有内核头文件自动生成层 宾根。 Clang 用于构建层。 除了中间层之外,组装的模块还使用 staticlib 包。

平行 发展 另一个项目专注于为嵌入式系统和物联网设备开发驱动程序,该项目也使用bindgen根据内核头文件生成层。 该框架允许您在不更改内核的情况下提高驱动程序安全性 - 建议使用更安全的 Rust 语言在编译阶段阻止问题,而不是在内核中为驱动程序创建额外的隔离级别。 假设设备制造商可能需要这样的方法,即在没有进行适当审核的情况下匆忙开发专有驱动程序。

尚未实现所有预期功能,但该框架已经非常适合工作,并用于为 Raspberry Pi 9512 板上提供的 LAN3 USB 以太网控制器编写工作驱动程序。现有的 smsc95xx 驱动程序由C语言。 值得注意的是,在 Rust 中开发驱动程序时,模块大小和运行时组件的开销是微不足道的,这使得该框架可以用于资源有限的设备。

来源: opennet.ru

添加评论