- Processor modes
- Registers
ARMv6 之前的 Processor 有 6 种 privilege mode:FIQ,IRQ,Supervisor(SVC),Abort(ABT),Undefined(UND),System(SYS),以及一种 non-privilege mode:User(USR)。引入 Trustzone 之后,CPU core 被虚拟出 secure state 和 non-secure state,那么很自然就需要一个能够切换两种 state 的开关,由此在 7 种 CPU mode 之外,新增了 monitor(MON)mode,如下图所示: 也就是说 secure world 和 normal world 的切换需要CPU 先进入 monitor mode。与 userspace 通过 svc 指令可以从 USR mode 切换到 SVC mode 类似,ARM 也提供了一条可以进入 monitor mode 的软中断指令: smc。需要说明的是 monitor mode 也是一种 secure state,下图是通过 monitor mode 切换 secure 和 normal world 的示意图: 以 userspace application 进程需要访问某安全资源举例,简要说明一下切换流程:
- App 通过 syscall svc 指令进入Kernel space OS(SVC mode);
- Kernel space OS 通过 smc 指令进入 monitor mode;
- 运行在 Monitor mode 的代码首先保存 Non-secure 状态下的 CPU contexts,如 lr,sp,spsr 等等,然后将 CPU NS bit 置为 0,表示进入 secure state,通过 rfe 指令(return from exception)进入 secure OS;
- secure OS 叫起 secure application 处理完相应的安全资源访问请求之后,发送 smc 指令,再次回到 monitor mode;
- 运行在 Monitor mode 的代码同样首先保存 secure 状态下的 CPU contexts,如 lr,sp,spsr 等等,然后将 CPU NS bit 置为 1,表示进入 non-secure state,然后恢复 Non-secure state下的 CPU contexts,通过 rfe 指令(reture from exception)重新回到 non-secure OS;
tips:由于 monitor mode 也是一种 secure state,所以 monitor mode 部分的代码一般会跟 secure OS 和 App 的 binary 打包在一起,很少会有独立的 binary。
除了 smc 指令触发的software exception 会进入 monitor mode,也可以配置某些硬件中断触发进入 monitor mode,如 FIQ,IRQ,external data abort,external prefetch abort。都可以通过配置 system register 来决定哪些 hardware exception 可以触发 cpu 陷入 monitor mode。这部分会留在 exception handling 和 GIC 的章节介绍,接下来先介绍一下 security extension 相关的寄存器。
Registers首先介绍一下 banked registers 的概念。我们最熟悉的 32位 CPU 寄存器就是通用寄存器 R0 - R15。其中 R13 - R15 有特殊含义,分别表示 sp,lr 和 pc。在不同的 CPU mode 下,sp,lr 的值是不同的,在切换 cpu mode 前后必须保存和恢复 sp 和 lr 的信息,才能保证代码的正常运行,所有这些名字相同但根据cpu mode 不同值不同的寄存器就是 banked register,也可以理解为常说的 cpu contexts。常用的 banked registers 如下: HYP mode 是 ARM 为虚拟化扩展引入的 Hypervisor mode,与 Trustzone 无关,不再细说。
另外还有一类寄存器为 CP15 协处理器,主要用于系统配置,例如配置异常向量表,开关MMU 等等,一般 OS 初始化的代码都会首先配置这些寄存器。CP15 寄存器的读写有特定指令,在 32位 OS 中一般使用 mrc 指令读,mcr指令写,根据读写不同的寄存器有规定读写语句格式如下:
MRC p15, Op1, Rt, CRn, CRm, Op2 ; //read a CP15 register into an ARM register MCR p15, Op1, Rt, CRn, CRm, Op2 ; //write a CP15 register from an ARM register
下面简单介绍一下与 security extension 相关两个重要的寄存器: 以上寄存器只能在 secure state 下才能修改。
tips: SCR 的 ns bit 虽然 secure OS 也能修改,但一般只会在 CPU 处于 monitor mode 才会修改。这是因为一旦 ns bit 置为 1,系统就会立马切换到 non-secure,此时 pipeline 中缓存的 secure state 下运行的指令,以及 data register 中保存的 secure data 会变成 non-secure 可见,会影响安全性。所以硬件虽然支持 secure OS 修改 ns bit,但软件上通常并不会在 secure OS 中直接操作 ns bit!
1.《ARM系列之ARM Trustzone 技术浅析——— ARMv7-A Processor modes & registers 的安全扩展》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《ARM系列之ARM Trustzone 技术浅析——— ARMv7-A Processor modes & registers 的安全扩展》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/2372277.html