
Linux 内核近日修复了编号为 CVE-2025-68260 的漏洞——这是主线内核中首个正式分配给 Rust 代码的 CVE。Greg Kroah-Hartman 报告了该问题,该漏洞影响用 Rust 重写的 Android Binder 驱动,最坏情况下可能导致系统崩溃。
漏洞根源分析
该漏洞的核心在于 Rust 版 Binder 实现中的一项不安全操作:当某个元素从链表中移除时,另一个线程可能同时操作相同的 prev/next 指针。设计时假设 NodeDeath 对象永远不会出现在"外部"链表中,但实际运行中出现了同一元素可能被多个上下文同时处理的情况。
竞态条件导致内存损坏
问题源于 Node::release 的逻辑:获取锁后将所有元素移至基于栈的临时链表,释放锁后再遍历本地链表。若此时另一线程对原始链表执行不安全移除操作,就会产生竞态条件,破坏 prev/next 指针,最终导致内存损坏和内核崩溃。一个典型故障表现为 rust_binder 模块出现"无法处理内核分页请求"错误。
修复方案与影响范围
修复方案重写了 Node::release,直接从原始链表中提取元素,彻底消除了基于栈的中间链表。根据 Linux 内核 CVE 团队披露,该漏洞引入于 Linux 6.18(提交 eafedbc7c050c44744fbdf80bdf3315e860b7513),已在 6.18.1(3428831264096d32f830a7fcfc7885dd263e511a)和 6.19-rc1(3e0ae02ba831da2b707905f4e602e43f8507b8cc)中修复,受影响文件为 drivers/android/binder/node.rs。
升级建议
作为缓解措施,Linux 内核 CVE 团队强烈建议升级至最新稳定内核版本:单个变更不会进行独立测试,官方也不支持选择性应用补丁。若无法升级,可通过参考稳定分支仓库中的相关提交获取必要修复。
参考来源:
Rust’s First Breach: CVE-2025-68260 Marks the First Rust Vulnerability in the Linux Kernel
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



