ARMv8 secure 和 Non-secure模式切换的两种方法:SMC和SCR.NS

文章目录

  • SMC 指令
  • SCR.NS
  • AArch64
    • SMC(Secure Monitor Call)指令
    • HCR_EL2.TSC :Traps to EL2 of EL1 execution of SMC instructions
    • SCR_EL3.SMD : Disabling EL3, EL2, and EL1 execution of SMC instructions
    • SCR_EL3 寄存器
  • AArch32
    • SMC 指令
      • AArch32 PE modes
      • Monitor mode
    • SCR Secure Configuration Register 寄存器
      • NS, bit [0]

在切换secure和non-secure模式的时候,通常有两种方法:

  • 使用SMC指令
  • 写SCR寄存器的NS比特位
    下面谈谈这两种方法的区别:

SMC 指令

SMC指令将会产生一个进入EL3的异常,而EL3绝对不会在Non-secure的状态下实现。所以自然而然地可以使系统进入Secure 模式。并且会无视 SCR.NS 位,即不管NS为多少,都可以进入Secure状态。

SMC #0  ; set secure mode
SMC #1   ; set non-secure mode

SCR.NS

Non-secure 下访问不了SCR寄存器,所以只能在secure状态下将NS位写1,进入Non-secure状态。而不能在Non-secure状态下访问SCR,将NS位写0,进入Secure状态。

总的来说,使用SMC指令可以随意在secure和non-secure状态下切换,而通过读写SCR.NS的方式只能将Secure切换成Non-secure。

AArch64

SMC(Secure Monitor Call)指令

SMC指令将会产生一个进入EL3的异常,但是只可以在EL1以及其更高的异常等级时执行,当在EL0时执行SMC指令时,其行为是UNDEFINED。如果 HCR_EL2.TSC 和SCR_EL3.SMD都为0,在EL1以及其更高的异常等级时执行,将会产生一个Secure Monitor Call 异常,
在这里插入图片描述

  1. EL0 Applications.
  2. EL1 OS kernel and associated functions that are typically described as privileged.
  3. EL2 Hypervisor.
  4. EL3 Secure monitor
    在这里插入图片描述

HCR_EL2.TSC :Traps to EL2 of EL1 execution of SMC instructions

捕获SMC 指令,如果在当前的security state下,EL2被使能,可以将EL1执行的SMC 指令捕获至EL2。

  • 如果在AArch 64下执行,这个捕获将会被记录在 EC value 0x17。
  • 如果在AArch 32下执行,这个捕获将会被记录在 EC value 0x13。
    HCR_EL2.TSC = 0b0
    This control does not cause any instructions to be trapped.
    HCR_EL2.TSC = 0b1
    If EL3 is implemented, then any attempt to execute an SMC instruction at EL1 is trapped to EL2, when EL2 is enabled in the current Security state, regardless of the value of SCR_EL3.SMD.
    If EL3 is not implemented, FEAT_NV is implemented, and HCR_EL2.NV is 1, then any attempt to execute an SMC instruction at EL1 using AArch64 is trapped to EL2, when EL2 is enabled in the current Security state.
    If EL3 is not implemented, and either FEAT_NV is not implemented or HCR_EL2.NV is 0, then it is IMPLEMENTATION DEFINED whether:
    • Any attempt to execute an SMC instruction at EL1 is trapped to EL2, when EL2 is enabled in the current Security state.
    • Any attempt to execute an SMC instruction is UNDEFINED.
    In AArch32 state, the Armv8-A architecture permits, but does not require, this trap to apply to conditional SMC instructions that fail their condition code check, in the same way as with traps on other conditional instructions.

SCR_EL3.SMD : Disabling EL3, EL2, and EL1 execution of SMC instructions

SCR_EL3寄存器的SMD位可以disable 在EL1以及更高的异常等级上SMC指令的执行, from both Security states and both Execution states, reported using an ESR_ELx.EC value of 0x00.

  • SCR_EL3.SMD = 0b0:SMC instructions are enabled at EL3, EL2 and EL1.
  • SCR_EL3.SMD = 0b1:SMC instructions are UNDEFINED.

SCR_EL3 寄存器

AArch32

SMC 指令

AArch32 PE modes

AArch32的mode有:

  • Monitor mode:总是在secure EL3上执行。
  • Hyp mode: 总是在Non-secure EL2上执行。
  • System, Supervisor, Abort, Undefined, IRQ, and FIQ modes, 这些模式执行的Exception level取决于当前的安全状态。
  • User mode,总是在EL0上执行。
    在AArch64中不支持这些mode, Mode的概念只特定于AArch32,同时上述mode可以在指定的异常等级下执行,此时的异常等级必须支持AArch32状态。
    在这里插入图片描述
    Monitor mode只会实现在Secure state下,并且仅当 EL3 使用 AArch32 时。
    Hyp mode只会实现在Non-secure状态下,并且仅当EL2使用AArch32时。
    System, FIQ, IRQ, Supervisor, Abort, and Undefined modes,由安全状态决定:
    In Secure state If either:
    • EL3 is using AArch32.
    • EL3 is using AArch64 and EL1 is using AArch32.
    In Non-secure state If EL1 is using AArch32:
    • User mode is implemented if EL0 is using AArch32
    在这里插入图片描述
    在这里插入图片描述

Monitor mode

AArch32的monitor mode是Secure的EL3 模式,这意味着它总是处于Secure state下,并且会无视 SCR.NS bit。 使用SMC指令可以进入Secure Monitor Call 异常,从而进入Monitor 模式,在Non-secure的EL1或者Secure EL3模式下,执行SMC指令将会产生Secure Monitor Call 异常。
当EL3使用AArch32时,在Monitor 模式下执行的软件:

  • 可以访问Secure和Non-secure的寄存器。
  • 异常处理结束后可以返回secure 或者Non-secure模式。
    这意味着,Monitor mode提供提供了在secure 或者Non-secure状态之间切换的唯一推荐方法。
    在这里插入图片描述

SCR Secure Configuration Register 寄存器

SCR 是一个32-bit 寄存器,访问SCR寄存器,需要满足两个条件:当前使用AArch32 状态,并且EL3被实现,该寄存器定义了当前安全状态的配置,特别是:

  • 安全状态:secure和non-secure
  • 当IRQ,FIQ或者External abort发生时,当前处理器会跳转到什么mode。
  • 当SCR.NS=1,即non-secure模式下,是否能改变PSTATE.F or PSTATE.A状态位。
    在这里插入图片描述

NS, bit [0]

Non-secure bit. 处理器必须处于Monitor mode下,可以决定当前的安全状态:

  • 0b0 PE is in Secure state.
  • 0b1 PE is in Non-secure state.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一次完整的OCR实践记录

一、任务介绍 这次的任务是对两百余张图片里面特定的编号进行识别,涉及保密的原因,这里就不能粘贴出具体的图片了,下面粘贴出一张类似需要识别的图片。 假如说我的数据源如上图所示,那么我需要做的工作就是将上面图片里面标红的数…

Spring----整合Mybatis

项目结构具体如下: 准备一个数据库: 架构是spring_db,表名为user_tb 结构如下: 第一步:配置pom文件(导入相应的坐标,注意spring-mybatis与mybatis的版本需要相对应,可以去官网查找…

Python(黄金时代)——多线程、多进程、协程

基本使用 基本概念 进程 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程 进程是处于运行过程中的程序,并且具有一定的独立功能 进程是系统进行资源分配调度的一个独立单位 线程 线程&…

基于springboot物资管理系统(程序+数据库)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

迅镭激光带您沉浸式直击展会现场!线上直播、云端互动,精彩持续!

2023 ITES深圳工业展 迅镭展位10-B06 深圳国际会展中心-宝安新馆 今天(3月29日),2023 ITES深圳工业展在深圳国际会展中心(宝安新馆)盛大开幕!迅镭激光以“行业高端典范、引领智造未来”为主题,携多款旗舰产品展示领先技术,展会首日便收获了超…

为了开放互联,明道云做了十件事

本文来自明道云资深研发经理孙伟,在明道云2022年秋季伙伴大会活动演讲,经校对编辑后整理为演讲精华。 一、开放没有选择 很多客户选择我们的一个重要原因,是明道云所能提供的产品开放能力。开放其实是没有选择的,坦白来讲&#…

SpringBoot接参注解与校验失败后的三种异常

文章目录一、SpringBoot中的参数传递注解1、PathVariable2、RequestParam3、RequestBody4、不用注解或者ModelAttribute二、参数类型校验失败后的三种异常一、SpringBoot中的参数传递注解 先看看非json下参数的接收和传递: 1、PathVariable PathVariable注解用于…

软件框架-实现使用@Component@Data@Configuration@Bean(配置类控制类实体类)等方法实现将配置文件从8080端口显示在网页上

一、前言 1.该程序代码是使用idea2021.12版本编写的,若使用其他软件请对照好配置; 2.这个程序具体的内容我忘了,只知道使用ComponentConfigurationPropertiesData ConfigurationBeanRestControllerAutowiredGetMapping等方法写的&#xff0…

chatGPT学英语,真香!!!

文章目录学习目标学习内容目标方式过程学习时间学习产出学习目标 能够在三个月的练习后,和真人外教比较流畅的沟通! 最近chatGPT实在是太火了,各种事情都能干,能改论文、写代码和翻译。 看到B站很多教程教我们直接用chatGPT进行…

【数据库管理】②实例管理及数据库启动关闭

1. 实例和参数文件 1.1 instance 用于管理和访问 database. instance 在启动阶段读取初始化参数文件(init parameter files). 1.2 init parameter files [rootoracle-db-19c ~]# su - oracle [oracleoracle-db-19c ~]$ [oracleoracle-db-19c ~]$ cd $ORACLE_HOME/dbs [oracl…

Docker 翻脸,不再开源,期待后续

前几日,Docker Hub出了一件大事!但凡创建了“organisation”的用户都收到了一封含有简短PDF链接的邮件。邮件的内容“金钱味”十足:如果不按照要求升级付费,用户就将失去对数据的访问权限。此举不仅会破坏开源项目的自动化构建&am…

GPT-4发布,这类人才告急,大厂月薪10W+疯抢

ChatGPT最近彻底火出圈,各行各业都在争相报道,甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完,平地一声雷,GPT-4又重磅发布! 很多小伙伴瑟瑟发抖:“AI会不会跟自己抢饭碗啊?” 关于“如何…

C++ 16 vector容器

目录 一、vector容器 1.1 简介 1.2 构造函数 1.3 赋值操作 1.4 容量和大小 1.5 插入删除 1.6 数据存取 1.7 互换容器 1.8 预留空间 一、vector容器 1.1 简介 ① vector数据结构和数组非常相似,也称为单端数组。 ② vector与普通数组区别:不同…

6.链路层和局域网

链路层链路层的主体是网络适配器,也称为网络接口卡2. 变换局域网链路层交换机的任务是在主机和路由器之间承载数据报没有两个适配器有相同的MAC地址适配器到哪里,MAC地址都不会改变主机移动时,主机的IP地址需要随之改变,以改变连接…

Vue+springboot 高校图书馆座位预约选座系统java毕业设计项目推荐

目前现有的图书馆选座管理系统对于用户而言其选座管理流程仍然过于繁琐,对于图书馆选座管理而言其系统安全性并不能保障。同时整套系统所使用的技术相对较为落后,界面不能动态化展示。相比较于其它同类型网站而言不能体现技术先进性。 1.2 项目目标 图书…

Python视频软件解析教程【源码可送】

人生苦短,我用python 快放假了… 有的人出去玩~ 有的人在家里呆着看电视~ 这次就来康康怎么做一个好玩的小软件~ (嘘~自己用) 瓜子花生小零食准备好了吗? 效果展示 我们先看看效果 这是本次要写的界面 主流视频都可以看&…

JDK20正式发布了GA版本,短期维护支持,以及JDK21预览

最近,Oracle发布了JDK20,相比对于Java开发者来说,JDK的发版是比较收关注的事情了,小简也来和大家一起了解了解JDK20发生了什么变化呢? 首先,JDK20是一个短周期版本,有6个月的维护时间&#xff0…

Maven和Gradle的区别

首先谈谈为什么要学习Maven? 依赖管理 大家还记得在学习JavaWeb时需要向web项目中引入少许jar包嘛?还记得引入jar包的繁琐过程嘛?实际项目中可能光基座需要引入的jar包就成千上万,jar包从哪里获取也是一个问题。项目中的jar包不仅…

ChatGPT写作文章-快速使用ChatGPT不用注册方式

如何更好地使用ChatGPT批量生成文章:详细教程 作为一款强大的文本生成器,ChatGPT可以帮助您快速、高效地批量生成文章。但如果您还不知道如何更好地使用ChatGPT,那么这篇详细的列表教程将会指导您如何使用它来生成高质量的文章,提…

“工业转型,大势所趋”:ITES深圳工业展暨阿里巴巴1688工业采购节开幕

2023年以来,中国制造业快速发展、需求深度释放,创造了大量的产业机遇。与此同时,国内外社会经济发展不确定因素众多,制造类企业、专业买家呼唤提升发展确定性;面临时代变局,工业品市场渴望在发展模式、合作…