与arm构架授权和生态伙伴一起,arm持续演进其构架,开发新功能以满足现有和新市场的要求。
这篇blog探讨了A-profile构架在2022年加入的关键新功能。
完整的指令集和系统寄存器信息会于10月早期在我们的开发者网站公开。完整的arm构架参考手册(Arm ARM),2022扩展和更早功能,计划在2023年早期发布。‘学习构架’网页的更新将在2022至2023年间出现。
之前的A-profile构架更新细节可以在这里找到 2014, 2015,2016, 2017, 2018, 2019, 2020,2021.
2022扩展包括一些对VMSA(Virtual Memory System Architecture)的更新。
Permission Indirection and overlays (间接和重叠权限)
2022扩展引入了控制内存访问权限的新方式。与直接将访问权限编码到页表项(Translation Table Entry,TTE)中不同,TTE中的位域用来检索存放在一个寄存器里的访问权限数组。这种间接方式提供更大的自由度,更高的编码密度和支持新的访问权限的表达。
每个TTE可以选择两个值,基础权限 (base permission)和重叠权限(overlay)。基础权限表示这个block(块)和 Page (页)最大的权限集合,overlay可以用来进一步限制权限。
可以用下面的图表表示:
基础权限允许被缓存(cache), 这意味着block和page的实际权限可以被高效地动态修改。
对于操作系统,构架提供了独立的EL1和EL0 overly寄存器。这使操作系统可以为应用分配的page设置最大权限,然后允许应用在这些约束下进一步管理权限。例如,JIT可以使用Overlay控制一个page是否可写或是可执行。这有助于减少系统调用和TLB Invalidate操作。
间接权限也有利于同一页表被多个实体共享的场景。比如,同一套页表可能同时被Arm处理器和Arm SMMU使用。 设置给软件访问的权限可能和给SMMU后面的加速器的权限不同。通过间接权限,处理器和SMMU可以使用同一套页表,但是以不同的方式解释这个权限。
Translation hardening (转换加固)
隔离模型使用的页表对攻击者来说是具有高价值的目标。2022扩展引入一系列功能,通过减少可用的工具接口来加固MMU table walk过程。这些功能包括:
- 新的stage 1属性 – Protected
- 新的stage 2 权限 – Mostly read-only
- 新的指令,RCW (Read-Compare-Write), 用来更新页表项
Protected属性控制TTE里面的那些位域允许被修改。但使用这条新指令修改TTE时,它会自动检查Protected属性,如果这个属性被设置了,它仅更新允许的位域。
新的Stage 2 ‘Most Read-only’ (MRO)权限让软件可以限制什么可以写到一个Page. 一个标识为MRO允许硬件更新Access Flag和Dirty,也允许RCW指令更新它们。但是其他形式的写,比如STR指令,都会失败并导致permission fault。
Stage 1 Protected 属性和stage 2 MRO权限一起提供了很多类型攻击的健壮保护。MRO属性阻止除RCW指令以外的其他类型写操作修改映射。Protected属性和RCM指令限制了TTE中的哪些位域可以被修改。
此功能也引入了一个stage 2属性,AssuredOnly, 它可以用于保证只有Protected表才能指向某些page。这用来帮助抵御aliasing攻击。
128-bit页表
作为2022扩展的一部分,arm正增加一种新的页表格式到armv9. 此页表格式和现有的格式使用同样的原则,但是将每个表项的大小增大为128bit。新格式支持更大的输出地址和更大的新属性位域范围。
SME2
2021年,arm宣布了armv9 Scaleable Matrix Extension (SME)。SME提高了高效处理矩阵的能力,SME包括矩阵tile存储和outer-product (外积)操作。
2022年,arm在SME的基础上引入了SME2.
SME提供了outer-product指令来加速矩阵操作。SME2利用multi-vector (多向量)操作,multi-vector predicates, range prefetches和2b/4b weight compression这些指令显著扩展了这些能力。
这些新指令使SME2可以比原先SME加速更多的工作负载。包括GEMV,Non-Linear Solvers, Small and Sparse 矩阵,和特征提取或追踪。
Guarded Control Stack (GCS)
2022扩展中,arm也在armv9中加入了Guarded Control Stack (GCS)的支持。GCS提供了缓解一些形式ROP攻击的方法。GCS也提供了一个高效的方式,使profiling工具不需要unwind main stack就可获得当前调用栈(call stack)的拷贝。
GCS是由软件分配的受保护的虚拟地址区域。 当处理器执行Branch with Link指令,如BL指令时,返回地址被压入GCS栈中,它也被写入Link Register(LR)中。过程返回(函数返回)时,最近存入的返回地址从GCS弹出。寄存器可以对这个弹出值和LR里面的值进行比较,或是直接使用这个弹出值。这个过程演示:
有时间软件需要手动修改这个control stack, 例如处理一些长跳转,为此,构架提供了一些特殊指令用来维护GCS;GCSPUSHx和GCSPOPx。
为避免不经意或是故意的GCS修改,引入了一个新的stage 1权限。这个权限允许软件的读,但是限制写操作,只允许GCSPUSH指令或是执行BL指令带来的写。
Confidential Computing (机密计算)
2021年,arm宣布了Ream Management Extension (RME), 作为arm机密计算构架的一部分。2022扩展在两方面加强了RME:
- Memory Encryption Contexts (内存加密上下文) – 此扩展引入了在Realm物理地址空间中多个内存加密上下文(Memory Encryption Contexts)的支持。它可以用于实现为每个Realm使用一个唯一key进行内存加密,它为Realm提供的安全带来更具纵深的防御。
- Device Assignment – 此扩展加强了RME系统构架和SMMUv3,以支持安全分配设备给一个Realm。每个Realm可以独立选择是否允许非处理器资源,比如加速器,可以访问这个Realm地址空间的区域。
其他功能
2022扩展引入的其他功能包括:
- 在SVE2中(Armv9-A)支持Hybrid Vector Length Agnostic (HVLA).
- Memory Tagging Extension(MTE) 更新,包括Tag访问的stage 2 trap和store-only的check模式
- Performance Monitor(PMU)快照支持和fixed-function指令计数器
- 额外的RAS能力,包括新的异常类型,用来报告structure上的错误,而不是内存上的错误
总结
这篇blog提供了Armv8.9-A和Armv9.4-A构架引入功能的简要介绍。
原作者:马丁魏德曼