/proc/cpuinfo 的“错误”部分实际显示了什么?

hur*_*ert 30 linux cpu proc

在具有当前内核和已安装微代码的 Debian Stretch 和测试/Buster 系统上,我仍然看到在/proc/cpuinfo.

然而,运行spectre-meltdown-checker显示并不脆弱。

所以我想知道什么/proc/cpuinfo显示。这些只是该 CPU 的漏洞吗?尽管系统已打补丁,但这些漏洞是否总是会被列出?

Ste*_*itt 28

“bugs”字段的意图/proc/cpuinfo引入它的提交消息中描述:

x86/cpufeature: 添加错误标志到 /proc/cpuinfo

以与功能标志类似的方式,转储表示我们已检测到和/或已将错误解决方法应用于我们正在执行的 CPU 的标志。

优点是这些不会像 CPU 功能那样随着时间的推移而累积。

以前,内核检测到的硬件错误被列为单独的功能例如臭名昭著的 F00F 错误,它在 32 位 x86 系统上有自己的f00f_bug入口/proc/cpuinfo)。引入了“bugs”条目以将它们保存在单个功能中,与x86 CPU flags风格相同。

就这些条目在实践中的含义而言,正如您在消息中所看到的,可以保证的是内核检测到了硬件错误。您需要查看其他地方(引导消息,或特定/proc条目或/sys条目,例如 中的文件/sys/devices/system/cpu/vulnerabilities/)以确定问题是否得到处理。

“错误”条目的用处有两个方面的限制。第一个是真否定与未知无法区分:如果该字段未指定“cpu_meltdown”,则您无法知道(仅从该字段中)这是否意味着内核不知道 Meltdown,或者您的 CPU 不受 Meltdown 的影响。二是检测可能过于简单;出于谨慎的考虑,它会出错,因此它可能会报告您的 CPU 存在漏洞,而实际上并非如此。因为“检测”是表驱动的,它的准确性取决于您运行的内核版本。

在 Meltdown 和 Spectre 错误的情况下,在 x86 上提供值的检测过程/proc/cpuinfo 如下所示

  • 如果 CPU不执行任何推测(486 级、某些奔腾级、某些 Atom),则不会将其标记为受 Meltdown 或 Spectre 影响;
  • 所有剩余的 CPU 都被标记为受 Spectre 变体 1 和 2 的影响(无论微码修订版等如何);
  • 如果 CPU没有被列为不受推测性存储旁路影响,如果它的微代码没有声称减轻 SSB,并且如果 CPU 没有声称减轻 SSB,那么它被标记为受 SSB 影响;
  • 如果 CPU没有被列为不易受 Meltdown (AMD) 影响,并且它的微代码没有声称可以缓解 Meltdown,那么它就会被标记为受 Meltdown 影响。

  • 在幽灵和崩溃的情况下,它们甚至没有被检测到,而只是*假设*。我有一个不受任何影响的有序 x86,但内核只是报告说它无论如何是因为硬编码规则基本上说“任何比 X 更旧的英特尔 cpu 没有应用微码补丁都容易崩溃”。 (3认同)
  • @R .. 您的 CPU 是否包含在内核的有序表中?(寻找“cpu_no_speculation”[这里](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/cpu/common.c)查看最新表格。)这确实是“错误”条目wrt的问题之一。Meltdown、Spectre 和 co.,它的准确性实际上取决于您的内核有多新,因为它们的“检测”是表驱动的。 (2认同)

Rui*_*iro 12

Meltdown/Spectre 漏洞存在于 CPU 芯片组设计/架构上,如果没有购买新的未来硬件,这些补丁是长期安全的一个很好的假象。随着时间的推移,可能会出现能够绕过当前补丁的利用漏洞的新方法。

简而言之,当前的软件补丁/微代码减轻了针对已知的 Spectre/Meltdown 系列漏洞利用方法的问题,但并没有解决允许它们首先出现的底层 CPU 设计问题。从长远来看,受影响的(几代)CPU 并没有停止受到攻击(而且很可能永远不会)。

但是,正如@Gilles 正确指出的那样,出现该警告并不意味着当前已知的利用 Spectre/Meltdown 方法会起作用;如果安装了补丁,它们将无法工作。

在问题中提到的情况下,内核仅检查已知受 Spectre/Meltdown 影响的 CPU 模型(如果我们只讨论 x86,则目前为所有 x86 CPU),因此cpu-insecure仍在错误部分中列出/线在/proc/cpuinfo

去检查你的/proc/cpuinfo. 如果您的内核有 KPTI 补丁,它将包含 cpu_insecure

我发现 KPTI 补丁有这段代码:

   /* Assume for now that ALL x86 CPUs are insecure */
   setup_force_cpu_bug(X86_BUG_CPU_INSECURE);
Run Code Online (Sandbox Code Playgroud)

内核更新后,您将获得:

bugs      : cpu_insecure
Run Code Online (Sandbox Code Playgroud)

附注。利用 Spectre/Meltdown “漏洞”的新方法已经有了一轮更新。这可能不会是最后一次。

  • 例如,如果您可以暂时不购买硬件,请等待新一代 CPU。我的水晶球告诉我,从中期来看,我们将有很多出售花生的二手服务器。 (2认同)