2
机密计算
新人贴
CSV3安全虚拟机内存问题若干
2026-03-04 10:14:29
135
默认情况下CSV3虚拟机的内存为加密内存并与主机隔离。 问题一:如何在内核驱动程序里 (调用什么接口) 配置一段内存为共享内存,使得主机或者PCIe设备DMA可访问。 问题二:虚拟机的加密内存在默认情况下,PCIe设备DMA是否可以访问?
K100-ai
千问Qwen3.5-35b-a3b
全部评论(6)
只看楼主
刘
刘子行
1楼
问题一如何在内核驱动程序里 (调用什么接口) 配置一段内存为共享内存,使得主机或者PCIe设备DMA可访问
回答: 如果您调用DMA API,返回的地址已经是解密的。Linux系统在启动时,已经配置DMA bounce buffer解密,供设备使用。
如果您自己在操作系统中分配一块内存,以OpenEuler 6.6 为例,可以调用set_memory_decrypted完成共享内存配置,其他系统类似。

问题二:虚拟机的加密内存在默认情况下,PCIe设备DMA是否可以访问?
回答:如问题一中的解释,PCIe DMA访问的内存为解密内存。用户使用DMA 接口时,该接口会自动将加密内存中复制到解密内存,与设备交互。简单的说,设备无法直接访问加密内存,需要解密后访问。
3/4
K
Kevin Peng
回复 @刘子行
非常感谢您的回复。
还有一些细节想请教下:baoquan:emoji。
1. Linux系统在启动时,已经配置DMA bounce buffer解密
这个是指主机启动时还是虚拟机启动时,这里配置的是否是一个buffer pool
2. 使用DMA接口,例如dma_map_sg, 是否会在系统启动时配置的buffer pool里分配一段buffer,这样同时会有两个buffer,一个是原始的加密buffer,另一个是解密的buffer,PCIe设备只能访问解密的buffer。但是这里存在一个两个buffer同步的问题?
3. Bounce buffer相关的实现是在SWIOTLB吗
3/4
刘
刘子行
回复 @Kevin Peng
1:虚拟机启动时,会做解密buffer pool
2. 您理解正确,这块DMA API会处理。如果是设备读取,API会把原密文复制到解密buffer中,如果是设备写入,API会把设备数据复制到密文buffer中。
3. 对。kernel/dma/swiotlb.c
3/4
K
Kevin Peng
回复 @刘子行
好的 再次感谢。
不好意思 我还有个问题
1. 系统启动时分配的bounce buffer pool的大小是可以配置的吗?怎么配置?
3/4
全部5条回复
没有更多内容了
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据