Linux 6.13惊险一幕:微软代码改动引发混乱,英特尔和AMD紧急修复

B站影视 2025-01-15 17:35 2

摘要:最近这两天,Linux 开发团队透露已经成功完成了 Linux 内核 6.13 rc7 版本的开发工作,因此最终的稳定版本在不出意外的情况下,将于下周正式对外发布。

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

最近这两天,Linux 开发团队透露已经成功完成了 Linux 内核 6.13 rc7 版本的开发工作,因此最终的稳定版本在不出意外的情况下,将于下周正式对外发布。

作为 Linux 的核心人物,Linus Torvalds 也在每周发布的 Linux 内核开发状态公告中写道:

本周开始时看起来有些平静,但随后进展加快,经过两个安静的假期周后,我们的节奏已经完全恢复了。

这个 rc7 比平常略大一些,但考虑到时间点,这基本符合我的预期,并没有什么特别突出的地方。从修改统计来看一切正常,附加的简短日志内容也没有异常。

因此,除非下周出现什么意外,我预计会按照正常的计划在下周发布最终的 6.13 版本。

同时,心情愉快的 Linus 还透露,闲暇时他喜欢动手搭建乐高积木,并组装吉他效果器套件。他打趣道,自己正好想找个借口继续动手制作,所以想看看有没有“倒霉”的内核开发者愿意要一个,他会亲手制作并送给这位幸运儿。

所谓「不能半场开香槟」,殊不知这边在 Linus 庆祝工作告一段落之际,另一边的微软开发者在做代码贡献时捅了娄子,如果不是英特尔和 AMD 工程师在最后一刻发现并制止,那么这些代码极有可能会破坏某些系统上的 Linux 6.13。

代码修改不当险酿大祸

此次微软工程师对代码的改动主要涉及一个名为 ARCH_HAS_EXECMEM_ROX 的内核配置,该配置允许以只读执行(ROX)权限缓存可执行内存(EXECMEM)。

这一功能作为性能提升的改进,计划在 Linux 6.13 的 x86_64/AMD64 架构上引入,即针对 64 位 AMD 和 Intel 处理器。

然而,这项改动在未获得 x86 内核维护者的正式确认(Ack)情况下被推送上线,结果导致这些 CPU 上的控制流完整性(CFI, Control Flow Integrity)功能被破坏。

好在英特尔、AMD 工程师及时发现

对此,英特尔工程师 Peter Zijlstra 在发现之后,紧急提交了一项请求,要求撤回与 EXECMEM_ROX 支持相关的改动,因为该功能尚未准备好被推送上线。他在提交中写道:

“x86: 禁用 EXECMEM_ROX 支持

整个 module_writable_address 的实现完全搞砸了 alternative.c 文件,而且还带来了不少问题——尤其是某些控制流完整性(CFI)功能直接崩溃报错。

虽然 Mike 一直在努力修补这些问题,但就目前的情况来看,这部分功能显然还没准备好上线。

先暂时禁用,我们下一周期再重新尝试。”

对于不熟悉的读者来说,控制流增强技术(CET, Control-flow Enforcement Technology) 是一项重要的安全特性,它引入了影子堆栈(Shadow Stack)和间接分支目标(IBT, Indirect Branch Targeting)。

影子堆栈(Shadow Stack) 通过将正常程序堆栈与硬件存储的副本进行对比,确保返回地址的完整性,从而防御返回导向编程(ROP, Return Oriented Programming)攻击。

间接分支目标(IBT) 则用于防护调用导向编程(COP, Call Oriented Programming)或跳转导向编程(JOP, Jump Oriented Programming)攻击。

简单来说,影子堆栈可以阻止恶意软件劫持合法软件的执行流程,并通过标记可能被破坏的软件,防止其运行。

微软工程师的这次更改可能会导致某些启用 CFI 的设置出现问题。有报告显示,搭载英特尔 Alder Lake 处理器的设备在从休眠中恢复时出现故障。

当前,有问题的代码仍然存在,但不会包含在即将推出的稳定内核版本中。

来自 AMD 工程师 Borislav Petkov 也对此表示了不满,他讽刺道:“我真是太喜欢这样的操作了,未经任何 x86 维护者的确认(Ack),这项改动就被提交,结果弄坏了一堆东西,但却没有被撤回。希望以后不要再这样了。”

这也让很多人好奇,为什么修改后的代码能在维护者未审核的状态下上线的?对此,有网友认为,「Linux 在应对复杂的 x86_64 硬件生态系统时面临挑战。熟悉早期英特尔 CPU 的开发者正在逐渐退休,而 Linux 开发者通常使用的是最新的硬件,因此他们可能不会将研究旧款英特尔 CPU 作为优先事项。所以,当某人添加了一些改动导致 Linux 在旧系统上出现问题时,这并不令人意外。这种情况也加重了 Linux 开发者和发行版维护团队的工作负担。」

来源:

https://lore.kernel.org/lkml/20250113115151.GDZ4T-VwIq_6ZafRE4@fat_crate.local/

来源:CSDN

相关推荐