与 LDR 相比,LDTR 等 ARM 非特权加载存储指令的应用是什么?

Cir*_*lli 2 arm armv8

我今天第一次遇到 LDTR ARMv8 指令。

我在ARMv8 DB手册第C3.2.5节“非特权加载/存储”中阅读了它的描述,据我了解,它基本上允许EL1在EL0限制下进行内存访问。

该功能的应用是什么?

这是否意味着使用内核错误使内核将数据写入错误地址的攻击变得更加困难?

考虑到通常有多个进程同时运行,LDTR 如何知道要使用哪个页表转换?或者这些限制是否涉及与页表上指定的权限无关的其他类型的权限?

小智 5

此链接为您提供了用例示例:https ://developer.arm.com/documentation/102376/0100/Permissions-attributes

[...] 虚拟机管理程序可以查看分配给虚拟机的所有资源。这是因为在较高的异常级别上执行意味着特权级别也较高。

然而,这并不总是可取的。恶意应用程序可能会尝试欺骗操作系统代表应用程序访问数据,而应用程序不应该看到这些数据。这需要操作系统检查系统调用中的指针。

Arm 架构提供了多种控件来简化此操作。首先,有 PSTATE.PAN(从不特权访问)位。当该位置位时,从 EL1(或 EL2,当 E2H==1 时)加载和存储到非特权区域将生成异常(权限错误)[...]

有时,操作系统确实需要访问非特权区域,例如,写入应用程序拥有的缓冲区。为了支持这一点,指令集提供了 LDTR 和 STTR 指令。

LDTR 和 STTR 是非特权加载和存储。即使它们由 EL1 或 EL2 上的操作系统执行,也会根据 EL0 权限检查进行检查。因为这些是明确的非特权访问,所以它们不会被 PAN [...]

这允许操作系统区分旨在访问特权数据的访问和预期访问非特权数据的访问。这也允许硬件使用该信息来检查访问。