权限索引
2022 ARM引入了一种新的控制内存权限方法。 不再是直接在转换表条目 (TTE) 中编码权限,而是使用 TTE 中的字段来索引寄存器中指定的权限数组。这种间接提供了更大的灵活性、编码密度并支持更多新权限。
每个 TTE 可以选择两个值,一个base permission和一个overlay。base permission表示块或页面拥有的最大权限集。overlay用于权限的进一步限制。
如下图所示:
对于操作系统,该架构提供了单独的 EL1 和 EL0 overlay 寄存器。这可以允许操作系统为分配给应用程序的页面设置最大权限,然后允许应用程序在这些约束内进一步管理权限。例如,操作系统为 JIT 分配一个可写或可执行的页面。然后,JIT 可以使用 Overlays 控制页面当前是可写的还是可执行的。这样做的好处是减少了系统调用和 TLB 无效的次数。
权限索引在多个master共享相同的表时也有好处。例如,一组表可能同时被 Arm 处理器和 SMMU使用。我们想要应用于软件访问的权限可能与我们想要应用于 SMMU 的权限不同。通过权限索引,处理器和 SMMU 可以使用相同的表,但对权限的解释可以不同。
翻译强化
2022 扩展引入了一系列功能,通过减少可用的攻击面来强化 MMU 表遍历过程。这些功能包括:
- A new stage 1 attribute – Protected.
- A new stage 2 permission – Mostly read-only.
- A new instruction, RCW (Read-Compare-Write), for updating translation table entries.
Protected 属性控制允许更改 TTE 中的哪些字段。当新指令用于修改 TTE 时,它将自动检查 Protected 属性,如果设置,则仅更新允许的字段。
new stage 2 “最多只读”(MRO) 权限使软件能够限制可以写入页面的内容。标记为 MRO 的页面允许访问标志、脏页的硬件更新、 RCW 指令的更新。其他形式的存储,例如 STR(存储)指令,将因权限错误而失败。
Stage 1 的受保护属性和Stage 2 的 MRO 权限一起提供了针对多种类型攻击的强大保护。MRO 属性防止存储,不允许来自非RCW 指令的存储更改映射。受保护的属性和 RCW 指令限制了 TTE 中可以更新的字段。
该功能还引入了stage 2属性 AssuredOnly,可用于确保只有受保护的表才能指向某个页面。这是为了帮助防止别名攻击。
128 位转换表
作为 2022 扩展的一部分,Arm 正在向 Armv9-A 添加新的转换表格式。翻译格式遵循与现有格式相同的原则,但将每个描述符的大小增加到 128 位。新格式支持更大的输出地址和新属性字段的范围。
总结
ARMv9最新的VMSA有哪些变化或增强?
- 对于每一个page或block,使用新的权限控制方式。以往权限控制是直接编码在页表entry的属性位中的,现在变成索引指向权限控制寄存器的方式。
- 页表的属性位的权限控制,并更改引入新的修改属性位的指令
- 页表entry从原来的64位增值128位