事件概述:首个Rust内核CVE诞生
近期,Linux内核为其引入的Rust代码分配了首个CVE编号(CVE-2025-68260),这标志着一个重要的里程碑。该漏洞存在于Android Binder驱动的Rust重写版本中。
- 漏洞性质:一个竞争条件(Race Condition)漏洞。
- 根本原因:涉及被标记为
unsafe(不安全)的Rust代码段。具体逻辑在处理链表指针时存在缺陷,可能导致内存损坏。
- 实际影响:目前评估主要可能导致系统崩溃(DoS)。虽然涉及内存损坏,但尚未证实可引发远程代码执行(RCE)。
- 背景对比:相较于同期Linux内核C代码中发现的数百个漏洞,这是Rust代码被引入内核数年来正式记录在案的第一例。
技术细节:unsafe块内的逻辑缺陷
漏洞的核心出在“侵入式双向链表”这一系统底层开发中常见的数据结构上。在Rust中安全地抽象此类结构颇具挑战。
- 触发逻辑:
- 在
Node::release 函数尝试遍历链表时。
NodeDeath::set_cleared 函数同时尝试将自身从同一链表中移除。
- 由于锁机制与
unsafe块内的假设不一致,引发了数据竞争。
- 关于
Unsafe的讨论:社区指出,漏洞准确地发生在unsafe块及其抽象层中。这并未违背Rust的安全承诺,反而印证了其设计哲学——将潜在的内存安全问题约束在显式声明的unsafe范围内,而非像C语言那样遍布整个代码库。
- 修复方式:修复实际上修改了“安全”代码部分(移除了
core::mem::take),因为这部分安全代码破坏了unsafe块所依赖的不变性。
社区观点:一次意料之中的“压力测试”
对于首个CVE的出现,Rust社区反应理性。
- 并非意外:开发者普遍认为这是预料之中的。Rust无法消除所有逻辑错误,尤其是在必须使用
unsafe与底层内核交互时。
- 有效的隔离:漏洞被隔离在特定的
unsafe模块中,这使得审查和修复比处理C语言中全局性的指针问题更为集中。
- 复杂性挑战:部分讨论聚焦于“在Rust中编写内核级链表确实困难”,因为Rust的所有权模型与内核高度依赖共享可变状态的设计存在固有冲突。
- CVE分配背景:也有人指出,由于Linux内核团队近期开始系统性为内核Bug分配CVE编号,因此“首个Rust CVE”更多是流程上的结果,而非Rust代码质量下滑。
总结:这是Linux内核融入Rust进程中的一个正常节点。它证明Rust不是“银弹”,无法自动修复开发者在unsafe块中引入的逻辑错误,但也证实了Rust能有效将内存安全问题收敛至可控范围。此CVE主要是一个源于链表操作封装不够健全的健全性漏洞。
深度解读:Rust GCC后端的价值与实现
知名开发者Guillaume Gomez撰文深入探讨了Rust的GCC后端(rustc_codegen_gcc)项目。
1. 为何需要GCC后端?
Rust默认使用LLVM作为编译器后端。GCC后端的主要价值在于硬件支持:GCC支持大量LLVM未覆盖的老旧或特殊处理器架构(如某些嵌入式平台),是Rust登陆这些平台的唯一途径。
2. 项目辨析:gccrs vs rustc_codegen_gcc
- gccrs:一个用C++编写的、完整的独立Rust前端,需要重新实现所有语言特性。
- rustc_codegen_gcc(本文主角):作为官方
rustc编译器的一个插件,它复用Rust成熟的前端(解析、类型检查等),仅将代码生成工作委托给GCC。
3. 技术实现核心
其实现依赖于libgccjit库(支持AOT编译)。rustc_codegen_gcc实现了rustc规定的后端接口,通过libgccjit API调用GCC的代码生成能力。此外,它还能将Rust的语义信息(如“引用不为空”)传递给GCC,以生成更优化的代码。
总结:GCC后端通过复用rustc前端保证了语言一致性,同时极大拓展了Rust的硬件生态位。
阅读原文:Rust GCC backend: Why and how
献给Rust文档团队的礼物:现代化语法高亮方案
博主Amos (fasterthanli.me) 发布了一个名为Arborium的项目,旨在彻底解决Rust官方文档(docs.rs)中非Rust代码块语法高亮质量低下问题。
1. 核心痛点
当前docs.rs对内嵌的SQL、HTML、JavaScript等代码的高亮支持薄弱。集成诸如tree-sitter这类现代高亮引擎又面临构建复杂、跨平台(WASM)等工程挑战。
2. 解决方案:Arborium
Arborium是一个“开箱即用”的解决方案,它打包并修复了96种编程语言的tree-sitter语法解析器,提供统一的API,并支持编译为WASM和本地代码。
3. 三种集成路径
Amos为Rust文档团队提出了三种实施方案:
- 方案一(前端注入):通过注入JS/WASM在浏览器端动态高亮。优点是可快速部署,缺点是需下载较大文件且存在潜在的供应链安全风险。
- 方案二(集成进
rustdoc):直接修改官方工具。优点是生成静态HTML,缺点是会显著增大rustdoc二进制体积。
- 方案三(后端后处理,推荐):在
docs.rs服务器构建文档后,使用独立工具对HTML进行后处理。此方案兼顾了速度、安全性和客户端体验,是作者最推荐的方案。
这项繁重的工程化为Rust文档生态带来了接近现代IDE级别的代码高亮能力。
阅读原文:My gift to the Rust docs team
社区动态速览
- SQLx作者演讲:SQLx的作者在Svix SF Rust Meetup上分享了该库的历史、当前挑战与未来计划。
iced_plot:GPU加速的绘图库:一个为iced GUI框架构建的高性能、保留模式绘图组件。它利用WGPU实现GPU加速,可高效处理数百万数据点,并保留GPU缓冲区以实现快速交互。
|