知识卡片

VFIO与IOMMU保障用户态驱动的安全边界

专业/工作 · 552.i

内容

把设备驱动搬到用户态最大的顾虑是安全:设备可以直接发起DMA,如果没有约束,一个存在缺陷或恶意的用户态驱动理论上可以通过设备写任意物理内存。VFIO的解法是引入IOMMU重映射设备的I/O地址——设备发起的每一次DMA都要先经过IOMMU转换成被明确授权过的内存物理地址,操作系统统一管理MMU(约束CPU访问内存)和IOMMU(约束设备访问内存),设备就无法绕过或污染未经授权的内存页。相比之下更早的UIO只解决了内存映射和基础中断处理,安全边界弱得多。发散:这说明”把驱动挪到用户态”和”放弃内核对硬件访问的安全约束”并不是一回事——真正的解法是把约束从”软件层的特权检查”下沉为”硬件层的地址翻译门禁”,约束能力甚至比纯软件方案更强。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第4章《存储加速》