Linux内核社区经历了一场惊心动魄的危机,版本6.13的内核因微软贡献的一段代码出现问题而差点翻车。幸运的是,得益于Intel和AMD的及时介入与协作,这一危机得以化解。
据了解,微软此次提交的代码与ARCH_HAS_EXECMEM_ROX内核配置紧密相关,该配置旨在优化x86_64/AMD64架构的性能,通过允许使用只读执行(ROX)权限缓存可执行内存(EXECMEM),进一步提升系统效能。然而,这段关键代码在未经x86内核维护者正式确认的情况下被推送至Linux内核主线,进而引发了一系列连锁反应。
问题的核心在于,这段代码破坏了控制流完整性(CFI)机制,这是一项至关重要的安全功能。CFI通过实施影子堆栈和间接分支目标(IBT)策略,有效防御返回导向编程(ROP)和调用/跳转导向编程(COP/JOP)等高级攻击手段。影子堆栈机制通过比对硬件存储的副本与实际的返回地址,确保程序执行流程不被恶意篡改,从而保护系统免受攻击。
随着问题的暴露,Intel的资深内核开发者Peter Zijlstra迅速行动,提交了一项紧急修复补丁,旨在恢复与EXECMEM_ROX支持相关的更改,并修复由此引发的一系列错误。Zijlstra指出,微软的代码在alternative.c文件中造成了严重的混乱,且存在明显的缺陷,部分CFI变体甚至会导致系统崩溃,对系统的稳定性和安全性构成了严重威胁。
AMD的Borislav Petkov同样对这一事件表达了强烈的不满。他批评指出,如此重要的代码改动竟未经任何x86维护者的审核与确认便被合并,这种做法严重违反了Linux内核开发的常规流程,给整个社区带来了不必要的麻烦和风险。
此次事件再次凸显了开源社区中代码审查流程的重要性。尽管微软的贡献旨在提升系统性能,但缺乏必要的审核环节却险些酿成大祸。得益于Intel和AMD的迅速响应与高效协作,Linux内核6.13的危机得以化解,也为未来内核开发提供了宝贵的教训和启示。
评论