是否可以在英特尔SGX飞地内运行设备驱动程序?或者安全区是否无法访问DMA内存并执行内存映射I / O?
我已经有一个已映射所有必要内存的设备驱动程序,但我不知道是否可以创建一个共享这些映射的安全区。对于安卓是否只能 访问他们自己的私有内存,或者他们是否还访问我将映射到它们的任意物理内存,我基本上感到困惑。
文档似乎说安全区无法在任意位置访问代码,但我想知道数据和MMIO的规则。
答案 0 :(得分:1)
Enclaves是静态链接库,因此它们与加载的应用程序共享Process。多个飞地可以加载到一个过程中。
Enclave拥有一个或多个页面表,这些页面经过加密并受到外部访问保护。有关这方面的更好解释:https://software.intel.com/sites/default/files/332680-002.pdf,第28页。
飞地可以从他们运行的进程中访问内存,但是他们的内存只能由他们自己访问。 DMA访问尝试被拒绝/中止,无法映射到安全区的内存,但是,您可以映射到进程的内存并从安全区内访问它。
飞地是根据与外界隔离的概念,他们没有受保护文件系统库的I / O功能。所以,我认为在sgx 中运行驱动程序是不可能的。