为什么某些只读处理器寄存器在 EL0 中无法访问?

问题描述 投票:0回答:1

使在 EL0 上运行的代码无法访问只读系统寄存器(如处理器功能寄存器 1指令集属性寄存器 1)可以提供什么安全性?

如果代码运行在 EL0 上,如果没有查询这些东西的能力,它如何知道哪些指令是合法的?

arm arm64 armv8
1个回答
0
投票

如果代码运行在 EL0 上,如果没有查询这些东西的能力,它如何知道哪些指令是合法的?

操作系统(在 EL1 或更高版本上运行)应该定义某种机制来通知 EL0 代码有关 CPU 功能的信息。 例如,Linux 通过 hwcap 标志公开这些位。

这样,操作系统就可以完全控制非特权代码对硬件的了解。

我同意,对于其中一些标志,让 EL0 知道它们的值似乎没有任何特别的危险。 但其中一些,EL0 也不需要知道(例如,对于 EL0 无论如何都不可用的功能)。 在某些情况下,您可能确实想要对 EL0 代码进行沙箱处理,并且不想泄露有关硬件的任何信息。

另请注意,某些 CPU 功能(即使存在于硬件中)也可以在 EL0 处禁用,例如如果内核中不存在必要的软件支持。 (例如,只有当操作系统具有在上下文切换时保存和恢复 SVE 寄存器的代码时,SVE 才能安全使用。)因此,允许 EL0 直接查询硬件支持并不是真正有用,因为它无论如何都必须询问操作系统如果确实启用了该支持。

同样,一些标志看起来仍然无害。 但 ARM 可能发现采用“EL0 不可用,让操作系统处理它”的一揽子政策更简单、更安全。

© www.soinside.com 2019 - 2024. All rights reserved.