又说骚话 - Linus 再次严辞拒绝Intel CPU漏洞补丁

发布时间:2020-06-09 09:15:07

         2020 Windows 10 更新五月版(2004版本)现已面向探索者开放,包括了对WDDM 2.7的支持,但尚未启用硬件加速GPU调度的选项。

        硬件加速GPU调度是WDDM 2.7的主要功能,它允许集成/专用图形显卡直接管理自己的视频内存,从而为你提供更好的性能,减少延迟,提高平均帧率或最小帧率,并提升了视频播放性能。

无论你使用何种图形显卡(Intel,Nvidia或AMD),最新的驱动程序均不包括硬件加速的GPU调度选项。

Intel和AMD驱动程序均包含对WDDM 2.7(Windows Display Driver Model)的支持,但要注意的是Windows设置中还没有硬件加速的GPU调度选项。

        近日,Linux 内核项目负责人 Linus Torvalds 拒绝了 AWS 工程师提交的一个补丁,该补丁的目的是减轻 Intel CPU 遭遇一种新型窥探攻击而导致数据泄露的风险。这种新型攻击名为“探听辅助 L1 数据采样攻击”,简称 Snoop (CVE-2020-0550)。

今年 3 月,来自 AWS 的软件工程师 Pawel Wieczorkiewicz 率先发现了 Intel 处理器的这一漏洞,它可能会泄露 CPU 内部存储器或缓存中的数据,涉及 CPU 包括 Intel 旗下流行的 Xeon 和 Core 系列处理器。Pawel 迅速向 Intel 报告了此问题,随后该漏洞被 Intel 定位为中等严重性漏洞。

新的 Snoop 攻击利用了 Intel CPU 多级缓存、缓存一致性和总线监听等特性,通过位于 CPU 内核中的一级数据缓存(L1D),通过“总线监听”(bus snooping)功能 —— 在 L1D 中修改数据时发生的缓存更新操作,将数据从 CPU 中泄漏出来。

以近代 CPU 的视角来说,计算机通常会采用三级缓存的设计来提高 CPU 的运行效率。三级缓存包括 L1 一级缓存、L2 二级缓存、L3 三级缓存,这些缓存都集成在 CPU 内,它们的作用是作为 CPU 与主内存之间的高速数据缓冲区。其中 L1 最靠近 CPU 核心;L2其次;L3再次。运行速度方面:L1最快、L2次快、L3最慢;容量大小方面:L1最小、L2较大、L3最大。在执行一项任务时,CPU 会先在最快的 L1 中寻找需要的数据,找不到再去找次快的 L2,还找不到再去找 L3,L3 都没有才去内存找。

而一级缓存其实还分为一级数据缓存(Data Cache,D-Cache,L1D)和一级指令缓存(Instruction Cache,I-Cache,L1I),分别用于存放数据及执行数据的指令解码,两者可同时被CPU 访问,减少了 CPU 多核心、多线程争用缓存造成的冲突,提高了处理器的性能。一般CPU 的 L1I 和 L1D 具备相同的容量,例如 I7-8700K 的 L1 即为 32KB+32KB。Snoop 攻击就是一种窃取 L1D 缓存中数据的攻击手段。

不过 Intel 的用户也不用惊慌,据 Intel 官方解释说,这种新攻击“很难实施”,并且不会泄露大量数据,毕竟 L1D 缓存中的数据非常有限,并且只有在任务运行时调用数据的短暂时间内才会存在。“我们不认为 Snoop 攻击在可信赖的操作系统环境下是一种实用的攻击方法,因为要利用这一漏洞需要同时满足很多苛刻的条件,比如攻击的时间要正好与用户打开程序的时间吻合,且程序调用的数据正好是攻击者想要窃取的数据。”

该漏洞披露之后,另一位来自 AWS 的软件工程师 Balbir Singh 为 Linux 内核提交了一个补丁,该补丁使 Linux 的应用程序能够选择在任务切换时自动刷新 L1D 的缓存,以降低 Linux 系统遭遇 Snoop 攻击的风险。

Singh 在 4 月份曾解释说:“这个补丁可以防止他们的数据在任务结束后被监听或通过旁道泄露。”他原本打算该补丁可以随 Linux 内核的 5.8 版一起发布。“如果硬件支持,该特性将允许基于可选加入的应用程序调用 prctl() 功能来刷新任务关闭后残留在 CPU 中的 L1D 缓存。”

但是,知名技术测试网站 Phoronix 指出,在任务结束后刷新 L1D 缓存会导致 CPU 的性能降低。Linux 内核项目负责人 Linus Torvalds 认为,这将导致使用该补丁的所有 Linux 用户(无论是否采用 Intel CPU)的 CPU 性能降低,严正拒绝了该补丁,同时还一如既往地说起了骚话。

Torvalds 在回复该提交的邮件列表中写道:“因为在我看来,这基本上是将缓存刷新指令导出到用户空间,并为进程提供了一种方式,可以说让与这事情无关的其他人也慢了下来。”

“换言之,据我所知,这就是疯狂的 Intel 发布了有缺陷的 CPU,它给虚拟化代码带来了问题(我对此并不太在意),但现在要因为它的问题影响到本来就没有这些问题的 Linux 用户,这是完全没有意义的。”

(Linus 在邮件列表中的原文)

“我不想某个应用程序跑起来就像在说 ‘哦,我是一个特别的,漂亮的,如此娇嫩的花,我想刷新 L1D 上的每一个任务缓存,无论我在什么 CPU 上,无论它是否有漏洞’。因为这个应用程序不仅会降低自身速度,还会降低其他应用程序的速度。”

在一番非常 Linus 式的回复下,Linus 对虚拟化的引用其实也是针对 AWS 的,AWS 和其他云服务提供商一样,销售的虚拟 cpu 通常启用了同步多线程(simultaneous multithreading,SMT)功能。Linus 接着指出,“在启用 SMT 的情况下,任务调度是分布式进行的,所以说,在任务结束与新任务开始之间刷新 L1D 缓存是非常愚蠢的。”

值得一提的是,AWS 的首席工程师 Benjamin Herrenschmidt 在与 Red Hat Linux 内核贡献者 Ingo Molnar 的讨论中也为该补丁的争论添加了一些背景。Herrenschmidt 承认这个补丁对 SMT 来说毫无意义,但他敦促 Linux 内核开发人员不要“把婴儿和洗澡水一起扔掉”,并反驳了这个补丁是因为 AWS 想把超线程作为虚拟 cpu 出售的说法。Herrenschmidt 说,“这些补丁并不是要解决运行 SMT 的客户 VM 内部出现的问题,也不是要保护 VM 免受同一系统上其他 VM 的攻击。”

事实上,Linus 已经不是第一次严辞拒绝与 Intel CPU 有关的补丁。2018 年初,为了修补 Spectre 漏洞,Intel 工程师提供了一个间接分支限制推测(indirect branch restricted speculation, IBRS)功能的补丁。Linus 当时就在邮件列表中公开指出 IBRS 会造成系统性能大幅降低,直言该补丁“就是彻彻底底的垃圾”,“Intel 真的要做这个 X 一样的东西?” 一顿口吐芬芳。

Nvidia表示已启用对Windows 10五月版更新的支持,但最新的Game Ready 446.14 WHQL驱动程序似乎并不基于WDDM 2.7,后者已包含在Windows 10五月版更新中,这显然也缺少硬件加速的GPU调度选项。

       尽管英特尔尚未传达有关硬件加速GPU调度功能的任何信息,但AMD和Nvidia最近确认,将在未来版本中将引入该支持。

      AMD代表证实,他们的GPU显卡将支持硬件加速的GPU调度,但目前尚不清楚该功能何时会在稳定版的显卡驱动程序中推出。

       上个月发布的Nvidia Developer驱动程序版本450.99包括了对WDDM 2.7的支持,并且还添加了一个开关以在Windows设置程序中启用“硬件加速的GPU调度”,但是该功能仍未正式支持。

      根据Nvidia的说法,你将能够启用硬件加速的GPU调度,并且显示驱动程序也将接受该请求,但是GPU调度在“ NVIDIA display driver 450.99尚未正式支持”,并且可能无法正常工作。

一位代表说:“官方支持将随即将发布的Game Ready Driver更新一起提供。”