当前位置: 首页 > article >正文

SMMU软件指南之使用案例(Stage 2使用场景)

安全之安全(security²)博客目录导读

目录

一、第二阶段用例Stage 2 use cases

1、虚拟机设备分配

2、带客户操作系统 SMMU 功能的虚拟机设备分配

3、媒体保护

4、主机隔离


本博客描述以下使用场景:

  • 二级转换使用场景Stage 2 use cases

本节中的 Linux 描述基于版本 6.4。某些使用场景尚未在此版本中实现,可能在后续版本中实现或仍在开发中。相关信息在每个使用场景中注明。

一、第二阶段用例Stage 2 use cases

本节描述了第二阶段翻译的应用场景。

1、虚拟机设备分配

虚拟机管理程序可以将设备分配给不可信的虚拟机,并配置 SMMU 以保护系统其他部分免受该虚拟机控制设备的影响。

PE 的第二阶段转换将设备 MMIO 寄存器映射到 IPA 空间,就好像客户操作系统在物理机器上运行一样。SMMU 中的第二阶段转换将虚拟机的客户物理内存映射到设备用于 DMA。客户操作系统似乎在物理机器上运行,且设备是直接连接的。客户通过 IPA 编程设备,无需第一阶段转换。设备分配允许设备像物理机器上的直接连接设备一样访问任何客户内存。

PE 第二阶段转换表可以直接与 SMMU 共享,或者 SMMU 使用的单独转换表与 PE 表保持同步。SMMU 和 PE 使用相同的 IPA 地址空间。

有些设备可能不容忍 DMA 页面错误,包括被分配到虚拟机的设备。许多虚拟机管理程序通过在有设备分配给客户时将虚拟机的所有内存固定来避免 DMA 上的页面错误。

在 Linux 中,通过主机内核的 VFIO 子系统,用户空间虚拟机管理器 (VMM)(如 QEMU)可以独占管理设备。在有设备分配的虚拟机中,虚拟机应能够像在主机中一样看到完全相同的设备。将设备分配给客户,可以在客户中获得与主机中几乎相同的性能。

对于此用例,Linux 中的 SMMU 使用单独的翻译表。然而,IPA 到 PA 的映射与虚拟机的第二阶段翻译表相同。SMMU 默认使用第一阶段转换,尽管逻辑上是第二阶段转换。VMM(如 QEMU)可以选择使用第二阶段转换,但通常使用第一阶段转换,因为 IPA 到 PA 的映射相同。

2、带客户操作系统 SMMU 功能的虚拟机设备分配

如果虚拟机管理程序将设备分配给虚拟机,也可以为客户分配一个 SMMU 接口,以便虚拟机和被分配的设备也能享受第一阶段的功能。为此,将一个软件模拟的虚拟 SMMU(简称 vSMMU)分配给虚拟机。虚拟机管理程序将 vSMMU 的操作翻译为实际 SMMU 的操作。

客户操作系统可以使用任何第一阶段用例,配置和翻译表在其分配的 SMMU 接口中编程。虚拟机管理程序维护的第二阶段翻译表嵌套在虚拟机维护的第一阶段翻译表之下。例如,如果客户操作系统使用用户空间设备驱动程序,第一阶段翻译表保护客户用户空间进程的 IPA 空间,虚拟机管理程序的第二阶段翻译表则保护主机的物理地址空间免受客户控制的 DMA 的影响。

这种情况也可以通过仅一个实际的转换阶段和软件影子翻译表支持。虚拟机管理程序监控客户在 vSMMU 接口中编程的配置和翻译表指针,将客户的第一阶段翻译表与管理程序的第二阶段表合并为单一的影子翻译表。客户发送给 vSMMU 的失效命令会触发影子表的重新更新。

在 Linux 中,目前不支持嵌套的第一阶段和第二阶段转换。然而,与虚拟机设备分配相似,仍需要在虚拟机启动前将所有客户内存固定,以填充第二阶段表。当前支持影子翻译表,但在虚拟机中不使用 vSMMU,而是使用半虚拟化的 IOMMU 或 virtio-iommu。virtio-iommu 允许客户通过映射/解除映射(map/unmap)接口将 IOVA 到 IPA 的映射传递给主机,主机代表客户在 SMMU 中安装 IOVA 到 PA 的映射。Linux 和多个 VMM(如 QEMU、cloud-hypervisor 和 crosvm)实现了 virtio-iommu,其主要应用是客户中的用户空间设备驱动程序。

3、媒体保护

一些受保护的媒体解决方案使用 SMMU 来保护特定的媒体缓冲区,这些缓冲区可以是固定内存或由不可信操作系统提供。通过让设备(如加密引擎和视频解码器)共享不可信操作系统的 IPA 内存视图,但使受保护的媒体缓冲区对不可信操作系统不可见或不可访问,从而实现媒体保护。这通过对不可信操作系统使用更严格的第二阶段权限,而对设备使用更宽松的权限实现。这种用例实际上不需要转换,即第二阶段可以是身份映射。缓冲区的配置在固件(受保护媒体管理器)和不可信操作系统的合作下完成。

固件负责创建不可信操作系统和设备的第二阶段翻译表,并确保系统配置始终符合预定义的策略。该策略指定了一组约束条件,包括系统中某个设备是否应被允许访问特定内存位置。不可信操作系统和设备使用不同的第二阶段翻译表。SMMU 的第二阶段翻译表映射预先安排的受保护媒体缓冲区页面,允许设备访问。然而,不可信操作系统的 IPA 空间可能不会映射这些页面,或者映射时权限较低,以限制不可信操作系统对这些缓冲区的访问。

4、主机隔离

pKVM 虚拟机管理程序在 KVM 的主机和虚拟机管理程序部分之间提供权限隔离,使虚拟机管理程序受客户信任,但主机不受信任。主机在启动时最初是可信的,但在 KVM 初始化后其权限减少,因此如果攻击者后来获得主机的大量攻击面,也无法访问客户数据。

在当前的 pKVM 中,主机仍然可以指示 GPU 等 DMA 能力的设备访问客户和虚拟机管理程序内存,这破坏了这种隔离。阻止 DMA 攻击需要由虚拟机管理程序拥有的 SMMU。

实现主机隔离的最简单方法是共享将 IPA 转换为 PA 的第二阶段页表。主机在 CPU 上可以访问的内容也可以通过 DMA 访问。主机无法访问的内存(因为交付给了虚拟机管理程序或客户)同样不能被 DMA 设备访问。

这种机制有一些限制。pKVM 通常以惰性方式填充主机的第二阶段页表,即在主机首次访问时才填充。这依赖于 CPU 的页面错误机制。然而,DMA 通常无法触发页面错误,因为 Linux 当前不支持第二阶段 SVA。因此必须在启动时填充所有第二阶段页表。由于 IPA 到 PA 的映射是平坦的,所以这是容易的。

当将一些页面交付给客户时,这会涉及从主机的第二阶段页表中移除这些页面。为了节省内存并有效利用 TLB,第二阶段转换使用块映射(如 1GB 或 2MB 块),而不是单独的 4KB 单元。在从该范围中捐赠页面时,虚拟机管理程序必须移除块映射,并将其替换为不包含捐赠页面的表。因为设备可能同时在该范围内的其他页面上执行 DMA,这种替换操作必须是原子的。否则,在映射无效的短时间内,DMA 可能会到达 SMMU 并导致致命中止。CPU/SMMU 架构仅在支持 FEAT_BBM 时支持块映射的原子替换。有关 FEAT_BBM 的详细信息,请参阅 Arm A-profile 架构参考手册。

一种灵活的替代方法是在 SMMU 中使用与 CPU 页表完全分离的私有页表。通过此方法,SMMU 可以实现一组精简的功能,甚至仅实现一个转换阶段。这还为主机提供了虚拟的 I/O 地址空间,能够更高效地分配大缓冲区内存,适用于地址能力有限的设备。


http://www.kler.cn/a/469146.html

相关文章:

  • web实操9——session
  • FreeSWITCH dialplan/default.xml 之释疑
  • 服务器Ubuntu22.04系统下 ollama的详细部署安装和搭配open_webui使用
  • 学习threejs,导入AWD格式的模型
  • 2. 模型和算法
  • pytest测试用例管理框架特点及常见语法和用法分享
  • MySQL第四弹----数据库约束和数据库设计
  • 【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing
  • STM32拓展 低功耗案例1:睡眠模式 (register)
  • JavaScript系列(8)-- Array高级操作
  • javaEE-网络编程-3 UDP
  • LabVIEW 实现自动对焦的开发
  • 编译与汇编
  • kubelet状态错误报错
  • linux 逻辑卷挂盘
  • F.interpolate函数
  • [Linux]redis5.0.x升级至7.x完整操作流程
  • 使用MySQL APT源在Linux上安装MySQL
  • spring mvc源码学习笔记之五
  • 【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
  • Linux系统常用命令详解
  • 怎么找回电脑所有连接过的WiFi密码
  • 【论文阅读笔记】LTX-Video: Realtime Video Latent Diffusion
  • 如何让编码更加高效专注?——程序员编程选明基 RD280U显示器
  • Django Swagger文档库drf-spectacular
  • 【Rust 知识点杂记】