今天上午,英特尔在Linux 6.8-RC6内核之前通过“x86/紧急”拉请求发送了一组补丁程序,以确保使用VERW指令清除CPU缓冲区的操作发生在返回用户空间代码路径的最新可能位置。这样做是为了更好地防止微体系结构数据采样(MDS)等CPU错误。
在过去的几个月里,英特尔Linux工程师的工作是将清除微体系结构CPU缓冲区的VERW推迟到CPU返回到用户空间代码路径的后面。英特尔工程师帕万·古普塔在补片:
传统指令VERW被一些处理器超载,以清除微体系结构的CPU缓冲区,以缓解CPU错误。本系列将VERW的执行转移到退出到用户路径的后面一点。这是必需的,因为在某些情况下,可能会在ARCH_EXIT_TO_USER_MODE()中的VERW之后访问内核数据。这类访问可能会将数据放入受MDS影响的CPU缓冲区,例如:
1.由VERW和返回给用户之间的NMI访问的内核数据可以保留在CPU缓冲区中(因为返回到内核的NMI不执行VERW来清除CPU缓冲区)。
2.Alyssa报告在VERW执行后,CONFIG_GCC_PLUGIN_STACKLEAK=y擦除系统调用使用的堆栈。堆栈清理期间的内存访问可能会将内核堆栈内容移入CPU缓冲区。
3.当从执行VERW的函数返回后恢复调用者保存的寄存器时,内核堆栈访问可以保留在CPU缓冲区中(因为它们发生在VERW之后)。虽然这些情况不太实际,但将VERW移近环过渡可以减少攻击面。
由于VERW清算的延迟,这可能会对性能产生一些微小的变化。带有“CPU错误”的补丁系列的主要焦点似乎是围绕几年前披露的微体系结构数据采样(MDS)侧通道攻击。
补丁通过 X86/紧急拉入请求 are now awaiting action by Linus Torvalds later today prior to releasing the Linux 6.8-rc6 test kernel.