今天早些时候,外媒报道了快乐而满足的 Linus Torvalds,他主动提出要为一位幸运的 Linux 开发人员制作一个吉他踏板,因为他对这个假期的情况和 Linux 内核 6.13 版本的进展感到满意。
对托瓦尔兹来说,不幸的是,微软的一次修改差点毁了它,好在英特尔和 AMD 及时介入,才挽回了局面。
这次修改与 ARCH_HAS_EXECMEM_ROX 内核配置有关,它允许缓存具有只读执行(ROX)权限的可执行内存(EXECMEM)。在 Linux 6.13 的 x86_64/ AMD64(即 64 位 AMD 和英特尔 CPU)版本中,该配置被添加为一项性能改进功能。
不幸的是,该功能在推出时没有得到 x86 内核维护者的确认(Ack),而且还破坏了此类 CPU 上的 CFI 或控制流完整性。
今天,英特尔的 Peter Zijlstra 发送了这封邮件,要求紧急恢复与 EXECMEM_ROX 支持相关的更改,因为在准备推送之前还有大量工作要做。他写道:
x86: 禁用 EXECMEM_ROX 支持
整个 module_writable_address() 无稽之谈把 alternative.c 搞得一团糟,更不用说它还包含错误 -- 一些 CFI 变体崩溃和烧毁就更不用说了。
Mike 一直在打补丁来清理这一切,但从目前的情况来看,这些东西还没准备好。
暂时禁用,下个周期再试。
AMD 公司的 Borislav Petkov 也在信中表达了对此事的不满:
我就喜欢这样,一个 x86 维护人员都没有,就把它放进去了 啊呀,它破坏了很多东西,却没有被还原,反而还在那里。请不要再这样做了。
-- Regards/Gruss, Boris.
控制流强制执行技术(CET)是一项重要的安全功能,它引入了影子堆栈(Shadow Stack)和间接分支定位(IBT)技术。前者可帮助系统抵御面向返回编程(ROP)的攻击,后者可抵御面向调用或跳转编程(COP/JOP)的攻击。
CET 通过检查正常程序堆栈与硬件存储的副本(影子堆栈)来确保返回地址的完整性。简单地说,影子堆栈能阻止恶意软件接管合法软件的进程步骤,因为它能标记出可能被攻击的软件,阻止其执行。