英特尔未来CPU中修复Spectre漏洞的一些努力
来自英特尔的 Dave Hansen 发布了一个补丁,并表示:“英特尔正在考虑向 IA32_ARCH_CAPABILITIES MSR (特定型号寄存器) 添加一个新位,以说明何时可能发生 RSB (返回堆栈缓冲区) 下溢。 在规范最终确定之前,非常感谢大家对此提出反馈。” 他解释说,RSB
...是一个微架构结构,旨在帮助预测 RET 指令的分支目标。 它以堆栈的形式实现,在 CALL 时压入,在 RET 时弹出。 作为一个堆栈,它可能会变空。 在某些处理器上,空状态会导致使用其他间接分支预测器,而这些预测器已成为 Spectre 变体 2(分支目标注入)漏洞利用的目标。
Dave 解释说,新的 MSR 位会告诉 CPU,如果 RSB 已经为空,则不要依赖来自 RSB 的数据。
Linus Torvalds 回复道
是的,请。 如果没有“此型号”之类的检查,那就太好了。
当然,您的补丁仍然不允许“由于各种其他独立原因,我们声称是 skylake,但 RSB 问题已修复”。
因此,使用_两个_位可能会更好:“明确需要 RSB 填充”和“明确已修复并且_不需要_ RSB 填充”。
然后,如果两个位都未设置,我们将回退到隐式的“我们知道 Skylake 需要它”。
如果两个位都设置了,我们只会显示一条“CPU 疯狂且精神分裂”的消息,并假设它需要 RSB 填充,因为它显然已损坏。
但经过进一步思考,Linus 撤回了他对 Dave 补丁的最初批评,即出于非 RSB 原因声称是 skylake。 在随后的电子邮件中,Linus 说,“也许从来没有人有理由这样做?” 他接着说
虚拟化人员可能只是希望用户指定模型,但随后使 Spectre 决策基于实际硬件功能(无论是“当前”还是“某个最低基础”)。 两位可以实现这一点。 一位意味着“如果您声称您正在运行 skylake,我们将始终需要填充,无论您_是否真的_是”。
Arjan van de Ven 同意,除非是为了利用 RSB 问题,否则极不可能有人会声称是 skylake。
这就是讨论的全部内容,但是英特尔正在就这些硬件决策与内核人员协商,这非常酷。 这表明了良好的透明度,并试图避免做出糟糕的技术决策,从而引起内核开发人员进一步愤怒的后果。
注意:如果您在上面被提及,并且想在评论部分上方发布回复,请将带有您的回复文本的消息发送到 ljeditor@linuxjournal.com。