近日,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团队强烈建议用户升级至最新的稳定内核版本。需要注意的是,单个安全补丁通常不会进行独立的集成测试,官方也不支持选择性应用补丁。如果因故无法立即进行完整的版本升级,可以参考稳定分支仓库中相关的提交记录来获取必要的修复代码。
|