注意:以下报价所用的文档版本为 20211203,日期为 2023 年 10 月 2 日。
RISCV特权规范第9.5节中有以下声明:
The vsstatus field MXR, which makes execute-only pages readable, only overrides VS-stage page protection. Setting MXR at VS-level does not override guest-physical page protections. Setting MXR at HS-level, however, overrides both VS-stage and G-stage execute-only permissions.
如果以下情况为真:
当 HGATP 模式为裸时,HS 级别 MXR 是否仍然覆盖 VS 级别执行页面为可读?
谢谢你。
如果严格遵循规范,则 HS 级别 MXR 确实会使“仅执行”页面独立于 hgatp.mode 可读。看起来很奇怪的是 hgatp.MODE=BARE(这似乎是当 V=1 时禁用两阶段分页的唯一方法)将允许 VS 阶段执行权限被覆盖。
HS 级别 MXR 是否仍会覆盖 VS 级别执行页面 HGATP 模式为裸时可读吗?
不,不会。由于平移阶段已禁用,因此 G 阶段平移将忽略
sstatus.MXR
。规格说:
当基于页面的虚拟内存未生效时,MXR 不起作用。
另外,根据规范部分:虚拟地址转换过程,我们可以看到,当核心遍历表并匹配权限时,在转换的最后阶段使用 MXR。规格说:
发现一片叶子PTE。给定当前特权模式以及 mstatus 寄存器的 SUM 和 MXR 字段的值,确定 pte.r、pte.w、pte.x 和 pte.u 位是否允许请求的内存访问。如果不是,则停止并引发与原始访问类型相对应的页面错误异常。
由于 BARE 模式,给定核心将简单地忽略 G 阶段翻译,因此
sstatus.MXR
也将被忽略,只有 VS 阶段翻译和 vsstatus.MXR
才会生效。