目前 Linux 解决漏洞的方案是重新设计页表(KAISER 技术)。之前普通程序和内核程序共用页表,靠 CPU 来阻止普通程序的越权访问。补丁的方案是让内核使用另外一个页表,而普通程序的页表中只保留一些必要的内核信息(例如调用内核的地址)。这个方案会导致每次普通程序和内核程序之间的切换(例如系统内核调用或者硬件中断)都需要切换页表,引起 CPU 的 TLB 缓存刷新。TLB 缓存刷新相对正常指令来说是非常耗时的,因此会降低系统的效率。
KAISER 技术对系统性能的影响一般是 5%,最高可达 30%。一些高级的芯片功能(例如 PCID)可以支持其他的修补方式,从而减少性能影响。Linux 已经在 4.14 版本的开发过程中添加了对 PCID 的支持。
在 Linux 系统中,KAISER 只有在受到影响的 CPU 型号上才会启用,因此 AMD 芯片不受影响,且用户可以通过手动修改补丁开关的方式关闭 KAISER。
修复进展
Linux 社区的开发者们因此修改了 Linux 的虚拟内存系统,但是代码注释被缩减,以隐藏漏洞的详细信息。
Windows 预计在本周四发布相关补丁,且补丁已经在去年十一月、十二月的 Windows Insider 版本中发布给了测试用户。