所有 ARM64 更改本周都合并到 Linux 6.15 内核中,以增强对 64 位 ARM 处理器的支持。
ARM64 体系结构端的 Linux 6.15 为运行支持同步多线程的罕见 ARM 处理器的用户添加了 SMT 运行时控制。现在,与 x86_64 和其他架构一样,由于 HiSilicon 的工作,可以在运行时切换 SMT 状态。
通过 Google 工程师的更改,Linux ARM64 现在将假定 AArch64 处理器在默认情况下容易受到 Spectre-BHB(分支历史记录注入)漏洞的影响,前提是它们未知或未标记为对 Spectre-BHB 安全。如之前已合并为 Linux 6.15 的补丁系列中所述:
“检测易受 Spectre BHB 攻击的 CPU 的代码基于已知受影响的 CPU ID 的硬编码列表。不幸的是,该列表大多只包含标准 ARM 内核的 ID。许多内核的 ID 是标准 ARM 内核的次要变体(如许多 Qualcomm Kyro CPU),未列出。这导致代码假设这些变体不受影响。
将代码颠倒过来,列出已知 _not_ 受影响的内核的 CPU ID。现在,CPU 将被视为易受攻击,直到被添加到列表中表明它们是安全的。
截至目前,添加到“未受影响”列表中的 CPU ID 只有 ARM Cortex A35、A53 和 A55。此列表是通过查看 cputype.h 中列出的旧内核创建的,这些内核之前未在“受影响”列表中列出。
不幸的是,虽然这个解决方案比我们以前的解决方案更好,但它仍然是一个不完美的解决方案。具体来说,有两种方法可以缓解 Spectre BHB,其中一种方法是使用 “k” 值进行参数化,表示需要多少个循环来缓解。如果我们有一个未知的 CPU ID,那么我们必须猜测如何缓解它。由于循环似乎缓解了更多内核(并且不太可能为未知内核的固件缓解提供所需的固件代码),因此我们将为未知 CPU 选择循环,并选择最高的“k”值 32。
我们猜测的缺点是,一些 CPU 现在可能会报告为“缓解”,而实际上它们应该需要固件缓解。在这种情况下,每当我们必须进行猜测时,我们都会选择在日志中放置一个 WARN_ON splat,因为猜测正确的缓解措施非常糟糕。希望这将鼓励 CPU 供应商将他们的 CPU ID 添加到列表中。
ARM64 内核的 Spectre-BHB 更改也被标记为向后移植到 6.15 之前的现有 Linux 内核稳定系列。有关该主题的更多背景阅读:一些 Qualcomm CPU 在主线 Linux 上暴露于 Spectre 漏洞。
适用于 Linux 6.15 的 ARM64 代码还增加了 Arm “Rainier” CPU PMU 支持、对 Apple M1 PMU 部分虚拟化的支持、对 uaccess 例程的 MOPS memcpy/memset 支持,以及某些 Qualcomm Kryo 内核的 CPU 类型信息报告。对于对此拉取感兴趣的人,请提供更多详细信息。
转自 Linux Flips Around Its Behavior For Spectre-BHB Handling On ARM64 – Phoronix