VFIO 调试、性能、故障与安全加固

VFIO 调试、性能、故障与安全加固

1. 基线

1
2
3
4
5
lspci -nnk
find /sys/kernel/iommu_groups -type l
ls -l /dev/vfio
cat /proc/iomem
dmesg | grep -Ei 'vfio|iommu|fault|reset'

2. Group not viable

检查同组:

  • multifunction siblings;
  • upstream bridge;
    -音频 function;
    -原 host driver;
    -driver_override;
    -未绑定 device。

不要用 ACS override补丁假装硬件隔离,除非接受其安全风险。

3. MAP_DMA失败

常见:

  • memlock不足;
  • IOVA overlap;
  • page alignment;
    -超出 aperture;
    -reserved region;
    -pin user page失败;
    -domain未 attach;
    -权限 flags错误。

4. IOMMU fault

记录 requester、IOVA、direction和时间。对照 QEMU memory listener mappings和 guest DMA。Fault后设备可能持续发 DMA,先隔离/停止再调试。

5. Reset失败

表现:

-第二次启动 VM失败;
-guest driver timeout;
-MSI残留;
-BAR状态异常;
-host reboot才能恢复。

检查 FLR/PM/bus reset和同 bus影响。

6. 性能

影响因素:

  • IOMMU page size;
  • IOTLB miss;
  • vCPU/IRQ affinity;
  • hugepages;
  • eventfd/irq bypass;
  • NUMA;
  • DMA map批量;
    -dirty logging;
    -host power management。

RK3588通常 UMA,但 CPU cluster和 IRQ affinity仍影响延迟。

7. 安全加固

-关闭 no-IOMMU;
-最小 /dev/vfio/N ACL;
-仅绑定必要设备;
-模块签名;
-限制 memlock;
-禁用无用 vendor/mdev driver;
-QEMU sandbox/SELinux;
-验证 firmware和 option ROM;
-监控 IOMMU fault;
-定期测试 reset和 teardown。

8. Debug开关

可使用 dynamic debug:

1
echo 'file drivers/vfio/* +p' > /sys/kernel/debug/dynamic_debug/control

通配支持依 shell和 dynamic debug parser;也可逐文件开启。生产环境避免长期高日志。

9. 威胁模型

IOMMU主要限制 DMA,不会自动防止:

-设备 firmware漏洞;
-PCIe peer-to-peer;
-共享 reset/sideband;
-CPU MMIO误用;
-中断 DoS;
-host VFIO/kernel漏洞;
-恶意 migration stream。

设备直通扩大攻击面,应只给可信 VM/进程。

文章互动

阅读 --

留言

0 条留言

正在加载留言…