[go: up one dir, main page]

CN119547074A - Pcie设备直通虚拟机的方法、装置及相关设备 - Google Patents

Pcie设备直通虚拟机的方法、装置及相关设备 Download PDF

Info

Publication number
CN119547074A
CN119547074A CN202480002939.3A CN202480002939A CN119547074A CN 119547074 A CN119547074 A CN 119547074A CN 202480002939 A CN202480002939 A CN 202480002939A CN 119547074 A CN119547074 A CN 119547074A
Authority
CN
China
Prior art keywords
virtual machine
external device
confidential
secure
pcie
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202480002939.3A
Other languages
English (en)
Inventor
许祥益
吴永铮
王辰昱
蔡启申
金意儿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN119547074A publication Critical patent/CN119547074A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/85Protecting input, output or interconnection devices interconnection devices, e.g. bus-connected or in-line devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

一种PCIE设备直通虚拟机的方法、装置及相关设备,可以应用于硬件资源被划分为REE和TEE侧的计算设备,计算设备(300)包括第一PCIE设备,TEE侧包括虚拟机,方法包括如下步骤:计算设备(300)的处理器在REE侧获取第一指令,第一指令指示配置第一PCIE设备直通TEE侧的虚拟机,然后处理器在TEE侧根据第一指令配置第一PCIE设备直通虚拟机。方法能够保护PCIE设备直通虚拟机场景中虚拟机与PCIE设备之间的直通数据安全,以及保护PCIE设备安全,满足用户对直通数据及PCIE设备的安全需求。

Description

PCIE设备直通虚拟机的方法、装置及相关设备
本申请要求于2023年06月28日提交中国国家知识产权局、申请号为202310784740.8的中国专利申请的优先权,发明名称为“PCIE设备直通虚拟机的方法、装置及相关设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及虚拟化技术领域,尤其涉及一种高速串行计算机扩展总线标准(peripheral component interconnect express,PCIE)设备直通虚拟机(virtual machine,VM)的方法、装置及相关设备。
背景技术
设备直通(device passthrough)是一种虚拟化技术,它允许将主机上的PCIE设备(如显卡、网卡、图形处理器(graphics processing unit,GPU)、嵌入式神经网络处理器(neural network processing unit,NPU))直接分配给虚拟机,使虚拟机能够直接访问PCIE设备而无需通过主机操作系统进行虚拟化。
然而,当前计算设备中实现的PCIE设备直通虚拟机,虚拟机由主机操作系统内核中的虚拟机管理器(virtual machine monitor,VMM)管理,一旦主机操作系统内核被攻击者攻破,那么攻击者将能操控运行在主机操作系统内核中的虚拟机管理器管理虚拟机,如窃取虚拟机的内存中存储的虚拟机待发送给直通PCIE设备的数据,或者窃取虚拟机的内存中存储的虚拟机接收的来自直通PCIE设备的数据,又例如通过虚拟机访问直通PCIE设备,对虚拟机和PCIE设备之间的直通数据以及该PCIE设备造成安全性威胁。
发明内容
本申请提供一种PCIE设备直通虚拟机的方法、装置及相关设备,能够保护PCIE设备直通虚拟机场景中虚拟机与PCIE设备之间的直通数据安全,以及保护PCIE设备安全,满足用户对直通数据及PCIE设备的安全需求。
第一方面,提供一种PCIE设备直通虚拟机的方法,应用于计算设备,该计算设备的硬件资源被划分为富执行环境(rich execution environment,REE)侧和可信执行环境(trusted execution environment,TEE)侧,该计算设备包括第一PCIE设备,上述TEE侧包括虚拟机,该方法具体包括如下步骤:计算设备的处理器在REE侧获取第一指令,第一指令指示配置第一PCIE设备直通上述TEE侧的虚拟机,然后处理器在TEE侧根据第一指令配置第一PCIE设备直通上述TEE侧的虚拟机。
上述方案中,计算设备的处理器通过在REE侧获取指示配置第一PCIE设备直通TEE侧的虚拟机的第一指令,在TEE侧根据第一指令进行配置,从而实现第一PCIE设备直通TEE侧的虚拟机。由于与第一PCIE设备直通的虚拟机位于TEE侧,因此虚拟机受TEE的硬件安全特性保护,禁止被REE侧的主机操作系统内核访问,因此即便攻击者攻破了主机操作系统内核,攻击者也不能通过主机操作系统内核中的虚拟机管理器管理上述TEE侧的虚拟机,如无法窃取上述TEE侧的虚拟机的内存中存储的虚拟机待发送给第一PCIE设备的数据,无法窃取虚拟机的内存中存储的虚拟机接收的来自第一PCIE设备的数据,以及无法通过虚拟机访问第一PCIE设备,满足用户对虚拟机与第一PCIE设备之间的直通数据以及对第一PCIE设备的安全需求。
在一种可能的实现方式中,上述处理器具体可以通过如下方式实现在TEE侧配置第一PCIE设备直通虚拟机:处理器在TEE侧配置第一PCIE设备的基地址寄存器(base address register,BAR),之后在TEE侧建立第一映射关系和第二映射关系,其中,第一映射关系为第一内存与第二内存之间的映射关系,第二映射关系为第三内存与第四内存之间的映射关系,第一内存为虚拟机的内存中用于虚拟机访问第一PCIE设备的内存,第二内存为第一PCIE设备的BAR中用于虚拟机访问第一PCIE设备的内存,第三内存为虚拟机的内存中用于第一PCIE设备访问虚拟机的内存,第四内存为第一PCIE设备的BAR中用于第一PCIE设备访问虚拟机的内存。
上述方案中,处理器通过在TEE侧配置第一PCIE设备的BAR,并建立虚拟机的内存和第一PCIE设备的内存之间的映射关系(即上述第一映射关系和第二映射关系),可以使得虚拟机需要访问第一PCIE设 备时,通过访问第一内存,然后根据第一内存和第二内存之间的映射关系(即上述第一映射关系)便可以访问到第二内存,即访问到第一PCIE设备,以及使得第一PCIE设备需要访问虚拟机时,通过访问第四内存,然后根据第四内存与第三内存之间的映射关系(即上述第二映射关系)便可以访问到第三内存,即访问到虚拟机。可以看出,该方案可以实现虚拟机与第一PCIE设备之间的互相访问,即实现二者直通。此外,还可以看出,上述方案可以实现虚拟机和第一PCIE设备像访问自己的内存一样访问对方。
在一种可能的实现方式中,上述计算设备包括根复合体(root complex,RC),上述方法还包括:在处理器在REE侧的情况下,根复合体不允许处理器访问第一PCIE设备。
上述方案中,在处理器在REE侧的情况下,根复合体不允许处理器访问第一PCIE设备,如此,可以避免REE侧的软件(如主机操作系统内核、如主机操作内核中的虚拟机管理器)被攻击者攻破的情况下,攻击者通过操作REE侧的软件访问第一PCIE设备,如配置或者读写第一PCIE设备的BAR,对第一PCIE设备造成安全隐患。
在一种可能的实现方式中,上述方法还包括如下步骤:处理器在REE侧获取第二指令(第二指令指示标记第一PCIE设备为安全设备,第二指令携带第一PCIE设备的标识),然后,处理器向上述根复合体发送第二指令。根复合体在接收到处理器发送的第二指令后,根据第二指令中的第一PCIE设备的标识,标记第一PCIE设备为安全设备。根复合体在标记第一PCIE设备为安全设备之后,当接收到来自第一PCIE设备的与虚拟机相关的第一报文(第一报文携带第一标识,第一标识指示第一PCIE设备为安全设备)时,可以基于第一报文携带的第一标识确定第一PCIE设备为安全设备,然后将第一报文发送至虚拟机。
也就是说,根复合体若确定第一PCIE设备不是安全设备,则拒绝将第一报文发送至虚拟机。
上述方案中,处理器通过向根复合体发送指示标记第一PCIE设备为安全设备的第二指令,使得根复合体标记第一PCIE设备为安全设备。在根复合体标记第一PCIE设备为安全设备后,根复合体便可以在接收到第一PCIE设备发送给虚拟机的报文时,根据报文中携带的第一标识判断第一PCIE设备为安全设备,然后将报文发送给虚拟机,否则,拒绝将报文发送至虚拟机。如此,可以避免虚拟机被未被标记为安全设备的不可信PCIE设备访问,保护虚拟机的安全。
在一种可能的实现方式中,上述第一标识为第一PCIE设备的标识,根复合体根据第二指令中的第一PCIE设备的标识,标识第一PCIE设备为安全设备,包括:根复合体根据第二指令中的第一PCIE设备的标识,在根复合体中标识第一PCIE设备为安全设备。
上述方案中,通过在根复合体中根据第一PCIE设备的标识标记第一PCIE设备为安全设备,可以使得根复合体在接收到来自第一PCIE设备或者其他PCIE设备的与虚拟机相关的报文时,根据报文中携带的第一PCIE设备的标识或者其他PCIE设备的标识确定该PCIE设备是否为安全设备。由于现有报文中原本就携带PCIE设备的标识,无需对报文进行修改,可以使得方案的实施过程比较简单。
为了提高方案的灵活性,在一种可能的实现方式中,根复合体根据第二指令中的第一PCIE设备的标识,标识第一PCIE设备为安全设备,包括:根复合体根据第二指令中的第一PCIE设备的标识,在第一PCIE设备中标记第一PCIE设备为安全设备。
在该方式中,被标记为安全设备的PCIE设备在向虚拟机发送报文时,报文会携带指示该PCIE设备为安全设备的第一标识,未被标记为安全设备的PCIE设备在向虚拟机发送报文时,报文不携带第一标识,或者报文携带第二标识。
例如,具体实现中,PCIE设备在向虚拟机发送报文时,发送出的报文中包括安全标识(security ID)字段,若PCIE设备被标记为安全设备,则报文中的安全标识字段携带第一标识如0,若PCIE设备未被标记为安全设备,则报文中的安全标识字段为空或者为第二标识如1。
在一种可能的实现方式中,上述REE侧部署有虚拟功能输入输出(virtual function input/output,VFIO)驱动,TEE侧部署有用于对上述TEE侧的虚拟机进行管理的虚拟机管理器,上述处理器在REE侧执行的操作由处理器运行该VIFO驱动执行,上述处理器在TEE侧执行的操作由处理器运行该虚拟机管理器执行。
在一种可能的实现方式中,根复合体可以通过上述TEE侧的虚拟机管理器将第一报文发送至虚拟机,上述方法还包括:上述处理器可以运行上述TEE侧的虚拟机管理器将从虚拟机接收的与第一PCIE设备相关的第二报文,发送至第一PCIE设备。
上述方案中,由于是通过TEE侧虚拟机管理器转发第一PCIE设备与虚拟机之间的通信数据,通信数据不经过REE侧,如此,可以避免通信数据在传输过程中被REE侧的软件(如主机操作系统内核)访问,即便REE侧的软件被攻击者攻破,也窃取不到第一PCIE与虚拟机之间的通信数据,从而保证通信数据在传输过程中的安全。
在一种可能的实现方式中,上述处理器在REE侧获取第一指令之前,上述方法还包括如下步骤:处理器在REE侧获取待创建的虚拟机的配置信息,然后在TEE侧基于配置信息创建虚拟机。
实施上述实现方式,可以实现在TEE侧创建虚拟机,便于后续实现第一PCIE设备与TEE侧的虚拟机的直通,从而满足用户对虚拟机与第一PCIE设备之间的直通数据以及对第一PCIE设备的安全需求。
在一种可能的实现方式中,上述第一PCIE设备包括如下任意一种或多种:GPU、NPU、网卡、显卡和声卡。
应理解,上述第一PCIE设备仅仅是作为示例,不应视为对第一PCIE设备的具体限定。
可以理解,在第一PCIE设备包括GPU和/或NPU时,上述方案可以实现安全异构计算。
第二方面,提供一种PCIE设备直通虚拟机的配置装置,应用于计算设备,该计算设备的硬件资源被划分为REE侧和TEE侧,该计算设备包括第一PCIE设备,上述TEE侧包括虚拟机,该装置具体包括获取模块和处理模块;
上述获取模块用于在REE侧获取第一指令,第一指令指示配置第一PCIE设备直通上述TEE侧的虚拟机;
上述处理模块用于根据第一指令配置第一PCIE设备直通上述TEE侧的虚拟机。
在一种可能的实现方式中,上述处理模块用于通过如下方式实现配置第一PCIE设备直通上述TEE侧的虚拟机:处理模块在TEE侧配置第一PCIE设备的BAR,然后建立第一映射关系和第二映射关系,其中,第一映射关系为第一内存与第二内存之间的映射关系,第一内存为虚拟机的内存中用于虚拟机访问第一PCIE设备的内存,第二内存为第一PCIE设备的BAR中用于虚拟机访问第一PCIE设备的内存,第二映射关系为第三内存与第四内存之间的映射关系,第三内存为虚拟机的内存中用于第一PCIE设备访问虚拟机的内存,第四内存为第一PCIE设备的BAR中用于第一PCIE设备访问虚拟机的内存。
在一种可能的实现方式中,上述装置还包括访问控制模块,用于在上述获取模块/处理模块在REE侧的情况下,不允许获取模块/处理模块访问第一PCIE设备。
在一种可能的实现方式中,上述装置还包括发送模块;
上述获取模块还用于在REE侧获取第二指令,第二指令指示标记第一PCIE设备为安全设备,第二指令携带第一PCIE设备的标识;
上述发送模块用于向上述访问控制模块发送第二指令;
上述访问控制模块还用于根据第二指令中的第一PCIE设备的标识,标记第一PCIE设备为安全设备;
上述访问控制模块还用于接收来自第一PCIE设备的与虚拟机相关的第一报文,第一报文携带第一标识,第一标识指示第一PCIE设备为安全设备;
上述访问控制模块还用于基于第一报文携带的第一标识确定第一PCIE设备为安全设备,然后将第一报文发送至虚拟机。
在一种可能的实现方式中,上述第一标识为第一PCIE设备的标识,上述访问控制模块用于根据第二指令中的第一PCIE设备的标识,在计算设备的根复合体中标记第一PCIE设备为安全设备。
在一种可能的实现方式中,上述访问控制模块用于根据第二指令中的第一PCIE设备的标识,在第一PCIE设备中标记第一PCIE设备为安全设备。
在一种可能的实现方式中,上述REE侧部署有VFIO驱动,TEE侧部署有用于对虚拟机进行管理的虚拟机管理器,上述获取模块以及上述发送模块部署于VFIO驱动,上述处理模块部署于该TEE侧的虚拟机管理器,上述访问控制模块部署于计算设备的根复合体。
在一种可能的实现方式中,上述访问控制模块用于通过上述TEE侧的虚拟机管理器将第一报文发送至虚拟机。
在一种可能的实现方式中,上述TEE侧的虚拟机管理器还用于将从虚拟机接收的与第一PCIE设备相关的第二报文,发送至第一PCIE设备。
在一种可能的实现方式中,上述获取模块在用于获取第一指令之前,还用于在REE侧获取待创建的虚拟机的配置信息,上述处理模块还用于在TEE侧根据配置信息创建虚拟机。
在一种可能的实现方式中,上述第一PCIE设备包括如下任意一种或多种:GPU、NPU、网卡、显卡和声卡。应理解,上述第一PCIE设备仅仅是作为示例,不应视为对第一PCIE设备的具体限定。
关于第二方面提供的PCIE设备直通虚拟机的配置装置以及第二方面的任一种实现方式的相关有益效果和描述可以参见前述第一方面以及第一方面的任一种实现方式的相关有益效果和描述,在此不再赘述。
第三方面,提供一种外部设备直通虚拟机的方法,该方法包括如下步骤:
安全虚拟机管理程序接收设备直通请求,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识;
安全虚拟机管理程序根据设备直通请求,配置第一外部设备直通第一机密虚拟机。
上述方案中,安全虚拟机管理程序根据设备直通请求配置实现第一外部设备直通TEE侧的第一机密虚拟机。由于第一机密虚拟机位于安全世界,因此第一机密虚拟机受安全世界的硬件安全特性保护,禁止被非安全世界的主机操作系统内核访问,因此即便攻击者攻破了非安全世界的主机操作系统内核,攻击者也不能通过主机操作系统内核中的普通虚拟机管理程序管理第一机密虚拟机,如无法窃取第一机密虚拟机的内存中存储的待发送给第一外部设备的数据,无法窃取第一机密虚拟机的内存中存储的接收的来自第一外部设备的数据,以及无法通过第一机密虚拟机访问第一外部设备,满足用户对虚拟机与第一外部设备之间的直通数据以及对第一外部设备的安全需求。
在一种可能的实现方式中,安全虚拟机管理程序接收设备直通请求的过程可以为:安全虚拟机管理程序接收设备直通管理模块发送的设备直通请求,设备直通管理模块运行于非安全世界;
在安全虚拟机管理程序配置第一外部设备直通第一机密虚拟机之后,安全虚拟机管理程序可以向设备直通管理模块发送通知消息,通知已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一种可能的实现方式中,安全虚拟机管理程序配置第一外部设备直通第一机密虚拟机,可以包括如下步骤:
安全虚拟机管理程序在MMU中建立第一映射关系以及在IOMMU中建立第二映射关系,其中,第一映射关系为第一机密虚拟机的虚拟地址空间与第一外部设备的MMIO地址空间之间的映射关系,第二映射关系为第一外部设备的IO虚拟地址空间与第一外部设备的DMA地址空间之间的映射关系,MMIO地址空间和DMA地址空间均属于第一机密虚拟机的物理地址空间;
安全虚拟机管理程序向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的报文中添加安全标志,或者,安全虚拟机管理程序向第一外部设备发送安全标记指令,指示第一外部设备在生成的报文中添加安全标志,安全标志指示第一外部设备具有安全内存的访问权限。
实施上述实现方式,安全虚拟机管理程序通过在MMU中建立第一映射关系,可以使得第一机密虚拟机在需要访问第一外部设备(如需要向第一外部设备下发指令或者数据)时,MMU在接收到来自第一机密虚拟机的报文后,通过第一映射关系确定第一机密虚拟机可以访问第一外部设备,之后向第一外部设备转发第一机密虚拟机的报文,从而实现第一机密虚拟机访问第一外部设备。安全虚拟机管理程序通过在IOMMU中建立第二映射关系以及向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的第一报文中添加安全标志,或者,向第一外部设备发送安全标记指令,指示第一外部设备在生成的第一报文中添加安全标志,可以使得第一外部设备在需要访问第一机密虚拟机(如需要向第一机密虚拟机返回数据)时,IOMMU在接收到来自第一外部设备的第一报文后,通过第二映射关系以及第一报文中的安全标志确定第一外部设备可以访问第一机密虚拟机,向第一机密虚拟机转发第一外部设备的报文,从而实现第一外部设备访问第一机密虚拟机。
在一种可能的实现方式中,在第一机密虚拟机所属的计算设备包括RC的情况下,IO硬件模块集成于RC。
在一种可能的实现方式中,第一外部设备的设备标识为BDF号。
在一种可能的实现方式中,安全虚拟机管理程序包括安全IO管理模块,安全虚拟机管理程序执行的操作由安全IO管理模块执行。
在一种可能的实现方式中,第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
在一种可能的实现方式中,上述方法应用于硬件资源被划分为REE侧和TEE侧的计算设备,第一机密虚拟机位于TEE侧。
第四方面,提供一种外部设备直通虚拟机的装置,该装置包括:
接收模块,用于接收设备直通请求,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识;
配置模块,用于根据设备直通请求,配置第一外部设备直通第一机密虚拟机。
在一种可能的实现方式中,上述装置还包括发送模块;
接收模块,用于接收设备直通管理模块发送的设备直通请求,设备直通管理模块运行于非安全世界;
发送模块,用于向设备直通管理模块发送通知消息,通知已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一种可能的实现方式中,上述配置模块,具体用于:
在MMU中建立第一映射关系以及在IOMMU中建立第二映射关系,其中,第一映射关系为第一机密虚拟机的虚拟地址空间与第一外部设备的MMIO地址空间之间的映射关系,第二映射关系为第一外部设备的IO虚拟地址空间与第一外部设备的DMA地址空间之间的映射关系,MMIO地址空间和DMA地址空间均属于第一机密虚拟机的物理地址空间;
向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的报文中添加安全标志,或者,安全虚拟机管理程序向第一外部设备发送安全标记指令,指示第一外部设备在生成的报文中添加安全标志,安全标志指示第一外部设备具有安全内存的访问权限。
在一种可能的实现方式中,在第一机密虚拟机所属的计算设备包括RC的情况下,IO硬件模块集成于RC。
在一种可能的实现方式中,第一外部设备的设备标识为BDF号。
在一种可能的实现方式中,上述装置还包括安全IO管理模块,上述装置用于执行的操作由安全IO管理模块执行。
在一种可能的实现方式中,第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
在一种可能的实现方式中,上述装置应用于硬件资源被划分为REE侧和TEE侧的计算设备,第一机密虚拟机位于TEE侧。
第五方面,提供一种外部设备直通虚拟机的方法,该方法包括如下步骤:
设备直通管理模块向安全虚拟机管理程序发送设备直通请求,设备直通管理模块运行于非安全世界,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识;
设备直通管理模块接收安全虚拟机管理程序发送的通知消息,通知消息指示已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一种可能的实现方式中,第一外部设备的设备标识为BDF号。
在一种可能的实现方式中,第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
在一种可能的实现方式中,上述方法应用于硬件资源被划分为REE侧和TEE侧的计算设备,第一机密虚拟机位于TEE侧。
关于第五方面提供的外部设备直通虚拟机的方法以及第五方面的任一种实现方式的相关有益效果和描述可以参见前述第三方面以及第三方面的任一种实现方式的相关有益效果和描述,在此不再赘述。
第六方面,提供一种外部设备直通虚拟机的装置,该装置包括:
发送模块,用于向安全虚拟机管理程序发送设备直通请求,设备直通管理模块运行于非安全世界,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识;
接收模块,用于接收安全虚拟机管理程序发送的通知消息,通知消息指示已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一种可能的实现方式中,第一外部设备的设备标识为BDF号。
在一种可能的实现方式中,第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
在一种可能的实现方式中,上述装置应用于硬件资源被划分为REE侧和TEE侧的计算设备,第一机密虚拟机位于TEE侧。
第七方面,提供一种计算设备,所述计算设备包括处理器和存储器;所述处理器用于执行所述存储器存储的指令,使得所述计算设备实现如上述第一方面、第三方面、第五方面或者第一方面、第三方面、第五方面的任意可能的实现方式提供的方法。
第八方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有指令,所述指令用于实现如上述第一方面、第三方面、第五方面或者第一方面、第三方面、第五方面的任意可能的实现方式提供的方法。
第九方面,提供一种计算机程序产品,包括计算机程序,当所述计算机程序被计算设备读取并执行时,使得所述计算设备执行如上述第一方面、第三方面、第五方面或者第一方面、第三方面、第五方面的任意可能的实现方式提供的方法。
附图说明
图1为本申请涉及的一种外部设备直通虚拟机场景的示意图;
图2为本申请提供的一种ARM的硬件架构示意图;
图3为本申请提供的一种计算设备的结构示意图;
图4为本申请提供的一种外部设备直通虚拟机的方法流程示意图;
图5为本申请提供的另一种计算设备的结构示意图;
图6为本申请提供的一种计算设备配置外部设备直通虚拟机的流程示意图;
图7A为本申请提供的另一种外部设备直通虚拟机的方法流程示意图;
图7B为本申请提供的一种配置第一外部设备直通第一机密虚拟机的过程示意图;
图8A为本申请提供的另一种计算设备的结构示意图;
图8B为本申请提供的另一种计算设备的结构示意图;
图9A为本申请提供的一种安全虚拟机管理程序指示IO硬件模块进行安全标记的过程示意图;
图9B为本申请提供的一种安全虚拟机管理程序指示第一外部设备进行安全标记的过程示意图;
图10A为本申请示例性示出的一种外部设备直通虚拟机的配置装置的结构示意图;
图10B为本申请示例性示出的另一种外部设备直通虚拟机的配置装置的结构示意图;
图10C为本申请示例性示出的另一种外部设备直通虚拟机的配置装置的结构示意图;
图11为本申请提供的另一种计算设备的结构示意图。
具体实施方式
下面将结合附图,对本申请提供的技术方案进行描述。
为了使本申请提供的技术方案更清晰,首先进行相关术语的解释。
(1)虚拟机:指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在服务器中能够完成的工作在虚拟机中都能够实现。每个虚拟机都有独立的硬盘和操作系统,虚拟机的用户可以像使用服务器一样对虚拟机进行操作。(2)外部设备:也可以称为加速设备或者异构设备,通常指的是用于加速计算、处理数据或执行特定任务的硬件设备,这些设备通常被设计用来加快特定类型的计算(如机密计算)或处理,提高计算效率和处理性能,如GPU、NPU、TPU、网卡、声卡和硬盘等。外部设备中,通过PCIE协议进行通信的设备通常被称为PCIE设备,也可以称为端设备(endpoint),处于PCIE总线系统拓扑结构的末端,一般作为总线操作的发起者或者终结者。PCIE总线架构中可以包含多个PCIE设备。实际场景中,外部设备也可以通过高速串行(compute express link,CXL)、NVLink等协议与主机进行通信,本申请不对外部设备与主机之间的通信协议进行限定。
(3)设备直通是一种虚拟化技术,它允许将主机上的外部设备(如显卡、网卡、GPU、NPU)直接分配给虚拟机,使虚拟机能够直接访问外部设备而无需通过主机操作系统进行虚拟化。
(4)直接内存存取(direct memory access,DMA):是一种外部设备不通过处理器(也可以称为中央处理器(central processing unit,CPU)而直接与系统内存交换数据的接口技术。外部设备可以通过DMA,将数据批量传输到内存,然后再发送一个中断通知处理器取,其传输过程并不经过处理器,减轻了处理器的负担。
(5)系统内存管理单元(system memory management unit,SMMU):也可以称为输入输出内存管理单元(i/o memory management unit,IOMMU),处于外部设备和总线之间,是外部设备与总线之间的地址转换桥。它与内存管理单元(memory management unit,MMU)的功能类似,可以实现地址转换(映射)、内存属性转换、权限检查等功能。其中,地址转换可以为stage1转换(即虚拟地址(virtual address,VA)->物理地址(physical address,PA),或者stage2转换(即中间物理地址(intermediate physical address,IPA)->PA),或者stage1+stage2转换(即VA->IPA->PA)。
SMMU的主要功能是DMA重映射(remapping),使得外部设备通过DMA技术可以访问到主机内存。
(6)VFIO:是林纳克斯(linux)内核针对IOMMU提供的用户态驱动框架,利用IOMMU将I/O设备直通到用户态,支持DMA remapping。
(7)内存映射I/O(memory-mapped I/O,MMIO):是PCI规范的一部分,I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后处理器访问I/O设备像访问内存一样。外部设备被放置的内存空间,通常被称为MMIO地址空间。
(8)BAR:BAR保存PCIE设备使用的地址空间的基地址,该基地址保存的是该PCIE设备在PCIE总线域中的地址(即总线地址)。
(9)根复合体:指的是连接处理器、主机内存以及PCIE总线的设备,用于管理PCIE系统中的所有总线和所有节点(如交换(switch)以及端设备),是PCIE系统中节点与节点之间通信的桥梁。在PCIE系统中,只有根复合体以及节点自身具有权限访问(包括配置和读写)该节点的BAR。
接下来介绍本申请涉及的应用场景。
本申请涉及外部设备直通虚拟机场景,请参见图1,图1为本申请涉及的一种外部设备直通虚拟机场景的示意图。如图1所示,计算设备100(如服务器)包括硬件层和软件层,硬件层为计算设备100的常规配置,其中外部设备可例如为网卡、GPU、NPU、卸载卡等可插置到服务器的插槽上的设备,软件层包括安装并运行在计算设备100上的主机操作系统内核(也可简称为主机内核),主机操作系统内核中设置有虚拟机管理程序(也可以称为虚拟机管理器),虚拟机管理程序的作用是实现虚拟机的计算虚拟化、网络虚拟化以及存储虚拟化,并负责管理虚拟机。
计算虚拟化是指将算设备100的处理器和内存的部分提供给虚拟机,网络虚拟化是指将网卡的部分功能(如带宽)提供给虚拟机,存储虚拟化是指将部分磁盘提供给虚拟机。
虚拟机管理程序还可实现不同虚拟机之间的逻辑隔离并管理虚拟机,例如创建虚拟机、根据硬件层为虚拟机模拟虚拟硬件(硬件模拟功能)、删除虚拟机、转发和/或处理运行在该计算设备100上的所有虚拟机(例如虚拟机1和虚拟机2)之间的网络报文或转发该计算设备100上的虚拟机与外部网络之间的网络报文(虚拟交换功能),处理虚拟机产生的I/O等。
不同虚拟机中的运行环境(如虚拟机应用、操作系统和虚拟硬件)是完全隔离的,虚拟机1和虚拟机2之间要进行通信需经过虚拟机管理程序转发网络报文。
租户可远程登录虚拟机,在虚拟机操作系统环境下操作虚拟机安装、设置以及卸载应用。
在图1中,如虚线箭头所示,外部设备可以直通虚拟机(以直通虚拟机1为例),便于虚拟机能够直接访问外部设备而无需通过主机操作系统进行虚拟化,以节省计算设备100的运算能力和内存。
然而,虚拟机由主机操作系统内核中的虚拟机管理程序管理,一旦主机操作系统内核被攻击者攻破,那么攻击者将能操控虚拟机管理程序管理虚拟机,如窃取虚拟机的内存中存储的虚拟机待发送给直通外部设备的数据,或者窃取虚拟机的内存中存储的虚拟机接收的来自直通外部设备的数据,又例如通过虚拟机访问外部设备,对虚拟机和外部设备之间的直通数据和外部设备造成安全性威胁。
因此,如何保护外部设备直通虚拟机场景中直通外部设备与虚拟机之间的直通数据以及外部设备的安全,满足用户对直通数据以及外部设备的安全需求,已成为本领域亟需解决的问题。
为了解决上述问题,本申请提供一种计算设备及外部设备直通虚拟机的方法。为了便于理解本申请提供的计算设备及外部设备直通虚拟机的方法,下面先对本申请涉及的安全区(TrustZone)技术进行介绍。
随着高级精简指令集设备(advanced RISC machines,ARM)处理器性能的不断提升,运行有ARM处理器的计算设备(如服务器、智能终端设备)给人们的生活带来了极大的便利。与此同时,计算设备上也携带了越来越多的用户数据,用户也越来越重视计算设备的安全性。ARM处理器上,当前主流的系统级解决方案是安全区(TrustZone)技术。
TrustZone技术作为安全拓展最早是在ARMv6的版本中被引入的,它把计算设备的硬件资源划分为两个世界,REE侧(也可以称为非安全世界(normal world))和TEE侧(也可以称为安全世界(secure world))。TrustZone作为硬件安全特性,工作在TEE侧。
REE侧并不是指运行在其中的操作系统(operating system,OS)或者软件是恶意的,而是它所处环境的安全性比TEE侧低。因为当处理器工作在REE侧的时候,TEE侧的资源(如寄存器、内存、高速缓冲存储器(cache)、外设等)是被禁止访问的,一旦处理器试图访问这些资源,系统将会直接崩溃。例如,TrustZone可以通过配置安全区地址控制(trustzone address space contoller,TZASC)寄存器和安全区内存调整(trustzone memory adapter,TZMA)寄存器,把敏感的内存设置为安全内存(secure memory),REE侧就无法对这片内存进行访问。当处理器工作在TEE侧时,它既可以访问TEE侧的资源,又可以访问REE侧的资源。正是由于TEE侧拥有比REE侧的操作系统更高的权限,TrustZone可以作为可信根为REE侧的操作系统提供更高级别的安全保护方案。
以ARMv8.4为例,图2描述了ARM的硬件架构,左侧是REE侧的架构,右侧是TEE侧的架构,REE侧包括四种工作权限层:异常等级0(exception level 0,EL0)层、EL1层、EL2层和EL3层,TEE侧包括四种工作权限层:安全异常等级0(secure exception level 0,SEL0)层、SEL1层、SEL2层和EL3层。 其中,EL0层也可以称为用户态层,EL1层也可以称为内核态层,EL2层也可以称为虚拟机管理程序层,EL3层也可以称为安全监控(secure monitor)层。数值越大的级别的等级权限越高,数值越小的级别的等级权限越低。
和用户联系紧密的操作系统运行在REE侧的EL0层和EL1层,如虚拟机的操作系统运行在EL0层和EL1层。虚拟机管理程序运行在EL2层。ARM可信固件运行在EL3层,ARM可信固件(ARM trusted firmware,ATF)是处理器启动时运行的第一个组件,是由ARM官方提供的底层固件,该固件统一了ARM底层接口标准,如电源状态控制接口(power status control interface,PSCI)、安全启动需求(trusted board boot requirements,TBBR)、安全世界状态与普通世界状态切换的安全监控调用(secure monitor call,SMC)操作等。
接下来继续介绍本申请提供的计算设备,本申请提供的计算设备主要为硬件资源被划分为REE侧和TEE侧的计算设备,如上述运行有上述ARM处理器的计算设备,也可以为通过其他技术将硬件资源划分为REE侧和TEE侧的计算设备,本申请不作具体限定。
参见图3示例性示出的本申请提供的计算设备300,计算设备300的硬件资源被划分为REE侧和TEE侧,主机操作系统内核位于REE侧。
如图3所示,在计算设备300中,虚拟机部署于TEE侧,与主机操作系统内核部署于不同侧。
为了将上述TEE侧的虚拟机与上述图1所示的未划分REE侧和TEE侧的计算设备100中的虚拟机,以及与图3所示的位于REE侧的虚拟机进行区分,在接下来的实施例中,将TEE侧的虚拟机称为机密虚拟机,将图1所示的虚拟机以及图3所示的REE侧的虚拟机称为普通虚拟机。
如图3所示,计算设备300的TEE侧可包括一个或多个机密虚拟机,REE侧可包括一个或多个普通虚拟机,在图3中,以TEE侧和REE侧各包括两个虚拟机为例。
机密虚拟机与普通虚拟机类似,可包括操作系统内核以及一个或多个应用程序(application,APP)(图3未示出)。机密虚拟机和普通虚拟机中的操作系统内核可以为linux等功能强大的通用操作系统内核,本申请对此不作具体限定。
需要说明的是,上述主机操作系统内核中的虚拟机管理程序(为了与下文所述TEE侧的虚拟机管理程序进行区分,以下将主机操作系统内核中的虚拟机管理程序称为普通虚拟机管理程序)主要用于管理普通虚拟机,当管理机密虚拟机时,其需要通过TEE侧的相关模块(如图5所示的TEE侧的安全虚拟机管理程序)进行管理操作,也就是说,普通虚拟机管理程序不具有机密虚拟机的访问权限,以保护机密虚拟机的安全。
如图3所示,计算设备300与计算设备100类似,也包括硬件层,硬件层具体可以参见图1相关描述,为了说明书的简洁,此处不再展开赘述。
应当理解,计算设备300仅为本申请提供的一个示例,并且,计算设备300可具有比图3示出的部件更多或更少的部件,或者可具有部件的不同配置实现。
在本申请具体的实施例中,当用户对外部设备直通虚拟机时直通数据以及外部设备的安全性要求较低时,可以根据用户需求创建普通虚拟机,并配置外部设备直通普通虚拟机。
当用户对直通数据以及外部设备的安全性要求较高时,可以根据用户需求创建机密虚拟机,并配置外部设备直通机密虚拟机,如图3所示外部设备直通机密虚拟机2,由于机密虚拟机位于TEE侧,因此机密虚拟机受TEE的硬件安全特性保护,即便主机操作系统内核被攻击者攻破,攻击者也不能通过主机操作系统内核中普通虚拟机管理程序管理机密虚拟机,如无法窃取机密虚拟机的内存中存储的机密虚拟机待发送给直通外部设备的数据,以及无法窃取机密虚拟机的内存中存储的机密虚拟机接收的来自直通外部设备的数据,此外也无法通过机密虚拟机访问外部设备,满足用户对虚拟机与外部设备之间的直通数据以及对外部设备的安全需求。
下面结合图4、图7A所示的本申请提供的两种外部设备直通虚拟机的方法流程示意图,对图3所示的计算设备300配置外部设备直通TEE侧的机密虚拟机的过程进行详细描述。
(一)第一种外部设备直通虚拟机的方法:
如图4所示,该方法包括步骤S401和S402。
S401:计算设备300的处理器在REE侧获取第一指令,第一指令指示配置第一外部设备直通第一机密虚拟机。
S402:处理器在TEE侧根据第一指令配置第一外部设备直通第一机密虚拟机。
第一机密虚拟机可以为TEE侧的机密虚拟机中的任意一个。
第一指令可以携带用于配置第一外部设备直通第一机密虚拟机的配置参数,如第一外部设备的设备标识(如第一外部设备的流标识(stream ID)、第一机密虚拟机的标识(如第一机密虚拟机的ID)等,其中,第一外部设备的设备标识用于处理器定位第一外部设备,第一机密虚拟机的标识用于处理器定位第一机密虚拟机。第一外部设备可以为GPU、NPU、TPU、网卡、显卡、声卡等外部设备中的一种或多种,本申请不对第一外部设备作具体限定。
在一种可能的实施例中,第一指令可以为用户通过计算设备300的接口输入至计算设备300,计算设备300在获取到第一指令后,将第一指令存储至REE侧的内存,后续处理器从REE侧的内存中读取该第一指令,并在TEE侧执行第一指令。
在一种可能的实施例中,处理器在TEE侧配置第一外部设备直通第一机密虚拟机的过程可以包括图4所示的S4021至S4023:
S4021:处理器在TEE侧配置第一外部设备的BAR。
第一外部设备的BAR,可以理解为第一外部设备在PCIE总线域中的地址,即第一外部设备的总线地址。
S4022:处理器在TEE侧建立第一映射关系,第一映射关系为第一内存与第二内存之间的映射关系,第一内存为第一机密虚拟机的内存中用于第一机密虚拟机访问第一外部设备的内存,第二内存为第一外部设备的BAR中用于第一机密虚拟机访问第一外部设备的内存。
可以理解,第一机密虚拟机的内存属于TEE侧。
S4023:处理器在TEE侧建立第二映射关系,第二映射关系为第三内存与第四内存之间的映射关系,第三内存为第一机密虚拟机的内存中用于第一外部设备访问第一机密虚拟机的内存,第四内存为第一外部设备的BAR中用于第一外部设备访问第一机密虚拟机的内存。
上述第一映射关系和第二映射关系,可以为内存地址之间的映射关系,例如,第一映射关系为第一内存的地址和第二内存的地址之间的映射关系。
可以理解,第一外部设备直通第一机密虚拟机,主要涉及以下两种类型的内存访问:1.第一机密虚拟机访问(如配置、读写)第一外部设备的内存(即上述BAR),发起者是第一机密虚拟机(也可以说是运行第一机密虚拟机的处理器),响应者是第一外部设备,2.第一外部设备DMA读写第一机密虚拟机的内存(也可以称为DMA内存,属于主机内存),以第一外部设备为网卡为例,网卡在收到目的地址是第一机密虚拟机的报文后,需要将报文发送给第一机密虚拟机,发起者是网卡,响应者是第一机密虚拟机中用于网卡DMA读写的DMA内存,不需要CPU参与。
本申请中,处理器在TEE侧建立第一映射关系,可以使得第一机密虚拟机在需要访问第一外部设备时,第一机密虚拟机通过访问第一内存,便可以访问到第二内存,访问到第二内存即访问到第一外部设备。处理器在TEE侧建立第二映射关系,可以使得第一外部设备在需要访问第一机密虚拟机时,第一外部设备通过访问第四内存,便可以访问到第三内存,访问到第三内存即访问到第一机密虚拟机。可以看出,通过第一映射关系和第二映射关系,第一机密虚拟机和第一外部设备在访问对方时,可以像访问自己的内存一样访问对方。
具体实现中,上述第一映射关系可以为处理器通过MMIO技术建立,该情况下,第一内存通常被称为MMIO内存。第二映射关系可以为处理器通过SMMU建立,该情况下,第三内存通常被称为DMA内存。关于处理器通过MMIO技术建立上述第一映射关系以及通过SMMU建立第二映射关系的过程,可以参见现有技术中MMIO以及SMMU相关描述,为了说明书的简洁,此处不再展开赘述。
在一种可能的实施例中,如图5所示,计算设备300的硬件层的PCIE拓扑包括根复合体,根复合体是计算设备300的处理器和外部设备之间通信的桥梁,也就是说,处理器与外部设备通信时,通过根复合体转发通信数据。例如,上述处理器在TEE侧配置第一外部设备直通第一机密虚拟机的过程中,处理器需要在TEE侧配置第一外部设备的BAR,那么配置过程中的通信数据均由根复合体进行转发。又例如,处理器在配置第一外部设备直通第一机密虚拟机之后,处理器会运行第一机密虚拟机与第一外部设备进行通信,那么第一机密虚拟机与第一外部设备之间的直通数据也会由根复合体进行转发。
为了避免REE侧的主机操作系统内核被攻击者攻破的情况下,攻击者通过操控主机操作系统内核访问(配置或者读写)第一外部设备(如访问第一外部设备的BAR),对第一外部设备造成安全隐患,在本申请具体的实施例中,根复合体除了负责处理器与第一外部设备之间通信数据的转发,还具有如下功能:在处理器在REE侧的情况下,根复合体不允许处理器访问第一外部设备。
具体实现中,根复合体可以接收处理器发送的第三指令(指示配置在处理器在REE侧的情况下,不允许处理器访问第一外部设备),并执行第三指令进行配置。后续,根复合体在接收到处理器发送的对第一外部设备的访问请求时,可以判断处理器是否以安全方式(如处理器在TEE侧、基本输入输出系统(basic input output system,BIOS))访问第一外部设备,在确定处理器是以安全方式进行访问时,允许处理器访问第一外部设备,反之,拒绝处理器访问第一外部设备。
为了避免第一机密虚拟机被除第一外部设备之外的其他不可信外部设备访问,保护第一机密虚拟机的安全,在本申请具体的实施例中,根复合体还可以具有如下功能:根复合体可以标记第一外部设备为安全设备,未被标记的外部设备则默认为非安全设备。根复合体在标记第一外部设备为安全设备之后,若接收到某外部设备(如第一外部设备)发送的与第一机密虚拟机相关的报文时,可以根据标记信息判断该外部设备是否为安全设备,在确定该外部设备为安全设备的情况下,将报文发送至第一机密虚拟机,反之,则拒绝将报文发送至第一机密虚拟机。
具体实现中,根复合体可以接收处理器发送的第二指令(指示标记第一外部设备为安全设备),并执行第二指令进行标记。
进一步地,根复合体根据第二指令标记第一外部设备为安全设备以及在接收到外部设备发送的报文时进行安全设备判断的实现方式,可以为:处理器发送的第二指令中携带第一外部设备的设备标识(如第一外部设备的stream ID),根复合体在接收到第二指令后,根据第二指令中的第一外部设备的设备标识,标记第一外部设备为安全设备。后续,根复合体在接收到来自第一外部设备的与第一机密虚拟机相关的第一报文(携带第一标识,第一标识指示第一外部设备为安全设备)时,基于第一报文携带的第一标识,确定第一外部设备是安全设备,然后将第一报文发送给第一机密虚拟机。根复合体在接收到来自其他外部设备(未被根复合体标记为安全设备的外部设备)的与第一机密虚拟机相关的报文(未携带第一标识或者携带第二标识,第二标识指示该外部设备是非安全设备)时,可以基于报文未携带第一标识或者携带第二标识确定该外部设备是非安全设备,则拒绝将报文发送至第一机密虚拟机。
进一步地,根复合体根据第二指令中的第一外部设备的设备标识,标记第一外部设备为安全设备的实现方式可以为如下方式①或者方式②:
方式①,根复合体在接收到第二指令后,保存第一外部设备的设备标识。在该方式中,根复合体保存了对应标识的外部设备则视为被根复合体标记为安全设备,未保存对应标识的外部设备则视为被根复合体标记为非安全设备。
后续,根复合体在接收到来自第一外部设备的与第一机密虚拟机相关的第一报文(携带第一标识,这里,第一标识为第一外部设备的设备标识)时,可以基于第一报文携带的第一外部设备的设备标识以及自身存储的第一外部设备的设备标识,确定第一外部设备是安全设备,然后将第一报文发送给第一机密虚拟机。根复合体在接收到来自其他外部设备(未被根复合体标记为安全设备的外部设备)的与第一机密虚拟机相关的报文(携带其他外部设备的设备标识)时,可以基于报文携带的其他外部设备的设备标识确定该外部设备是非安全设备,则拒绝将报文发送至第一机密虚拟机。
方式②,根复合体在接收到第二指令后,根据第一外部设备的设备标识定位第一外部设备,然后,向第一外部设备发送标记指令,指示第一外部设备在本地寄存器中标记自身为安全设备。在该方式中,在本地寄存器中标记自身为安全设备的外部设备在向第一机密虚拟机发送报文时,报文会携带指示该外部设备为安全设备的第一标识,未在本地寄存器中标记自身为安全设备的外部设备在向第一机密虚拟机发送报文时,报文不携带第一标识,或者报文携带第二标识。
后续,根复合体在接收到来自第一外部设备的与第一机密虚拟机相关的第一报文时,可以基于第一报文携带的第一标识确定第一外部设备是安全设备,然后将第一报文发送给第一机密虚拟机。而其他未被标记为安全设备的外部设备在向第一机密虚拟机发送报文时,不携带第一标识或者携带第二标识,根复合体在接收到来自该外部设备的与第一机密虚拟机相关的报文时,可以基于报文未携带第一标识或者基于报文携带的第二标识,确定该外部设备为非安全设备,则拒绝将报文发送至第一机密虚拟机。
例如,具体实现中,外部设备在向第一机密虚拟机发送报文时,发送出的报文中包括安全标识(security ID)字段,若外部设备被标记为安全设备,则报文中的安全标识字段携带第一标识如0,若外部设备未被标记为安全设备,则报文中的安全标识字段为空或者为第二标识如1。
应理解,上述方式①和方式②仅仅作为示例,不应视为根复合体标记第一外部设备为安全设备以及在接收到外部设备发送的报文时进行安全设备判断的实现方式的具体限定。
在一种更具体的实施例中,如图5所示,根复合体包括安全控制器(protection controller),上述根复 合体执行的操作可以由根复合体中的安全控制器执行实现。
在一种可能的实施例中,如图5所示,计算设备300的TEE侧除了包括第一机密虚拟机之外,还可以包括对第一机密虚拟机进行管理的安全虚拟机管理程序,安全虚拟机管理程序可以运行在TEE侧的SEL2层。
在图5所示的计算设备300中,本文所述计算设备300的处理器在TEE侧执行的操作可以由处理器运行安全虚拟机管理程序实现,如上文所述处理器在TEE侧配置第一外部设备直通第一机密虚拟机的操作以及下文所述处理器在TEE侧创建第一机密虚拟机的操作,均可以由处理器运行安全虚拟机管理程序实现。
在一种可能的实施例中,如图5所示,计算设备300的REE侧还可以包括VFIO驱动,上文计算设备300的处理器在REE侧执行的操作可以由处理器运行REE侧的VFIO驱动实现。
在一种可能的实施例中,如图5所示,VFIO驱动包括vifo_iommu模块和vfio_pci模块,安全虚拟机管理程序包括安全IO管理(trust input/output management)模块,安全IO管理模块包括MMIO模块和SMMU模块。
vifo_iommu模块是对IOMMU驱动的封装,用于为第一机密虚拟机提供IOMMU功能,即为第一外部设备提供访问第一机密虚拟机的能力,例如对第一机密虚拟机进行DMA读写的能力。
具体地,vifo_iommu模块可以向SMMU模块发送指令,使得SMMU模块执行指令,从而为第一外部设备提供访问第一机密虚拟机的能力。
vfio_pci模块是对设备(device)驱动的封装,用于为第一机密虚拟机提供访问第一外部设备的能力,例如对第一外部设备进行读写的能力。
具体地,vfio_pci模块可以向MMIO模块发送指令,使得MMIO模块执行指令,从而为第一机密虚拟机提供访问第一外部设备的能力。
具体实现中,vfio_pci模块还可以向MMIO模块发送上述第二指令和上述第三指令,使得MMIO模块根据第二指令和第三指令进行对应配置。
需要说明的是,上述安全IO管理模块也可以称为其他模块,如管理模块、第一模块等,上述MMIO模块也可以称为其他模块,如第一子模块等,上述SMMU模块也可以称为其他模块,如IOMMU模块、第二子模块等,本申请不对上述模块的名称进行具体限定。
下面结合图6所示的流程图,详细介绍图5所示的计算设备300配置外部设备直通第一机密虚拟机的过程。
S601:处理器在REE侧运行VFIO驱动获取第一指令、第二指令和第三指令,第一指令指示配置第一外部设备直通第一机密虚拟机,第二指令指示标记第一外部设备为安全设备,第三指令指示配置在处理器在REE侧的情况下,不允许处理器访问第一外部设备的BAR。
S602:处理器运行VFIO驱动将第一指令、第二指令和第三指令发送给TEE侧的安全虚拟机管理程序。
S603:处理器在TEE侧运行安全虚拟机管理程序中的MMIO模块根据第一指令访问根复合体配置第一外部设备的BAR、根据第二指令标记第一外部设备为安全设备以及根据第三指令配置在处理器在REE侧的情况下不允许处理器访问第一外部设备的BAR。
具体地,可以由根复合体中的安全控制器执行第二指令标记第一外部设备为安全设备,以及执行第三指令配置在处理器在REE侧的情况下,不允许处理器访问第一外部设备的BAR。
S604:处理器在TEE侧运行安全虚拟机管理程序中的MMIO模块根据第一指令通过MMIO技术建立第一映射关系,第一映射关系为MMIO内存与第二内存之间的映射关系,MMIO内存为第一机密虚拟机的内存中用于第一机密虚拟机访问第一外部设备的内存,第二内存为第一外部设备的BAR中用于第一机密虚拟机访问第一外部设备的内存。
S605:处理器在TEE侧运行安全虚拟机管理程序中的SMMU模块根据第一指令通过SMMU建立第二映射关系,第二映射关系为DMA内存与第四内存之间的映射关系,DMA内存为第一机密虚拟机的内存中用于第一外部设备访问第一机密虚拟机的内存,第四内存为第一外部设备的BAR中用于第一外部设备访问第一机密虚拟机的内存。
通过上述步骤S601至S605,便实现了第一外部设备直通第一机密虚拟机,后续第一外部设备和第一机密虚拟机便可以基于上述第一映射关系和第二映射关系进行安全通信。
具体实现中,第一外部设备与第一机密虚拟机之间的通信数据可以由TEE侧安全虚拟机管理程序转发,不经过REE侧,如此,可以避免通信数据在传输过程中被REE侧的软件如(主机操作系统内核)访问,即便REE侧的软件被攻击者攻破,也窃取不到第一PCIE与第一机密虚拟机之间的通信数据,从而保证通 信数据在传输过程中的安全。
可以理解,在计算设备300执行图4所示的外部设备直通虚拟机的方法之前,需要先在TEE侧创建第一机密虚拟机。在本申请中,计算设备300的处理器可以在REE侧获取待创建的第一机密虚拟机的配置信息,然后在TEE侧根据第一机密虚拟机的配置信息创建第一机密虚拟机。其中,配置信息包括待创建的第一机密虚拟机的规格,例如,存储器的大小、存储器的类型、内存的大小、内存的类型、处理器核的类型、处理器核的数量、处理器核的计算速度、处理器核的内核数量、网络带宽、操作系统内核和文件系统(file system)等等。处理器在创建第一机密虚拟机时,可以基于配置信息向第一机密虚拟机提供与配置信息匹配的虚拟硬件资源,例如,基于配置信息中包括的内存信息在TEE侧的内存资源中划分出与内存信息匹配的、供第一机密虚拟机使用的安全内存,基于配置信息中包括的处理器核信息模拟出与处理器核信息匹配的、供第一机密虚拟机使用的虚拟处理器核,以及将配置信息中包括的操作系统内核和文件系统加载至第一机密虚拟机对应的安全内存中等等,从而实现第一机密虚拟机的创建。
在一种可能的实施例中,计算设备300的处理器可以运行REE侧的普通虚拟机管理程序获取待创建的第一机密虚拟机的配置信息,然后运行TEE侧的安全虚拟机管理程序根据第一机密虚拟机的配置信息创建第一机密虚拟机。
需要说明的,计算设备300的处理器除了执行上述操作之外,还可以执行其他操作,如创建、修改或者销毁REE侧和/或TEE侧的二级页表等,本申请不对计算设备300的处理器能够执行的操作进行具体限定。
(二)第二种外部设备直通虚拟机的方法:
如图7A所示,该方法包括步骤S701-S704。
S701:安全虚拟机管理程序接收非安全世界的设备直通管理模块发送的设备直通请求,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识。
第一机密虚拟机可以为TEE侧的机密虚拟机中的任意一个。
第一机密虚拟机的标识,可以为第一机密虚拟机的ID等,用于定位第一机密虚拟机。
第一外部设备可以为GPU、NPU、TPU、网卡、显卡、声卡等外部设备中的一种或多种,本申请不对第一外部设备作具体限定。
第一外部设备的设备标识,可以为第一外部设备的总线设备功能(bus device function,BDF)号等,用于定位第一外部设备。
关于安全虚拟机管理程序和设备直通管理模块,下面结合图8A示例性示出的本申请提供的另一种计算设备800进行介绍。
结合图3所示的计算设备300可以看出,图8A所示计算设备800与图3所示计算设备300的区别仅仅在于计算设备800的REE侧包含设备直通管理模块以及TEE侧包含安全虚拟机管理程序,下面仅对计算设备800与图3所示计算设备300的区别之处进行介绍,关于二者相同的地方,请参见图3相关描述,为了说明书的简洁,此处不再展开赘述。
关于安全虚拟机管理程序,已在图3部分进行介绍,请参见图3相关描述。
设备直通管理模块,可以运行于REE侧的EL2层。在一种可能的实施例中,如图8A所示,设备直通管理模块部署于运行于EL2层的主机操作系统内核中。需要说明的,设备直通管理模块也可以称为直通管理模块、直通模块、设备直通模块等等,本申请不对该模块的名称进行具体限定。
设备直通管理模块,为安全虚拟机管理程序与用户进行交互的桥梁,在S701中,安全虚拟机管理程序接收设备直通管理模块发送的设备直通请求的过程可以是:设备直通管理模块从REE侧的非安全内存中读取用户输入至计算设备800的设备直通请求,向安全虚拟机管理程序发送。
具体实现中,用户向计算设备800输入设备直通请求的方式,包括但不限于如下几种:
方式(1)、用户可通过计算设备800提供的命令行界面(command-line interface,CLI)输入设备直通请求。
方式(2)、用户可通过计算设备800提供的编写应用程序编程接口(application programming interface,API)输入设备直通请求。
方式(3)、计算设备800向用户提供图形用户界面(graphical user interface,GUI),该GUI可显示外部设备的设备标识以及机密虚拟机的标识输入接口以及配置直通控件,用户可以通过输入接口输入第一外部设备的设备标识以及输入第一机密虚拟机的标识后,点击配置直通控件,从而实现设备直通请求的输入。
S702:安全虚拟机管理程序根据设备直通请求,配置第一外部设备直通第一机密虚拟机。
可以理解,第一外部设备直通第一机密虚拟机,可能涉及以下两个方向的通信:方向1、第一机密虚拟机访问第一外部设备,发起者是第一机密虚拟机,响应者是第一外部设备,方向2、第一外部设备访问第一机密虚拟机,发起者是第一外部设备,响应者是第一机密虚拟机,因此,安全虚拟机管理程序配置第一外部设备直通第一机密虚拟机,需要配置第一外部设备与第一机密虚拟机能够进行通信。
具体地,S702可以通过图7B所示的步骤S7021至S7023,实现配置第一外部设备与第一机密虚拟机能够进行通信。
S7021:安全虚拟机管理程序在MMU中建立第一映射关系,第一映射关系为第一机密虚拟机的虚拟地址空间与第一外部设备的MMIO地址空间之间的映射关系,第一外部设备的MMIO地址空间属于第一机密虚拟机的物理地址空间。
第一外部设备的MMIO地址空间可以为设备直通请求携带。
第一机密虚拟机的物理地址空间,指第一机密虚拟机占用的内存空间,该内存空间属于安全内存。
通过在MMU中建立第一映射关系,第一机密虚拟机在需要访问第一外部设备时,第一机密虚拟机可以通过第一映射关系访问第一外部设备。
S7022:安全虚拟机管理程序在IOMMU中建立第二映射关系,第二映射关系为第一外部设备的IO虚拟地址空间与第一外部设备的DMA地址空间之间的映射关系,第一外部设备的DMA地址空间属于第一机密虚拟机的物理地址空间。
第一外部设备的DMA地址空间可以为设备直通请求携带。
通过在IOMMU中建立第二映射关系,第一外部设备在需要访问第一机密虚拟机时,第一外部设备可以通过第二映射关系访问第一机密虚拟机。
在一种可能的实施例中,安全虚拟机管理程序在MMU中建立第一映射关系以及在IOMMU中建立第二映射关系之前,可以检查设备直通请求携带的用于配置第一外部设备直通第一机密虚拟机的配置参数(如第一外部设备的设备标识、MMIO地址空间以及DMA地址空间等)的有效性,在确定配置参数有效的情况下,建立第一映射关系及第二映射关系,在确定配置参数无效的情况下,不建立第一映射关系及第二映射关系,避免建立错误的映射关系,导致后续第一机密虚拟机与第一外部设备无法正常通信,并对用户进行提醒。
例如,安全虚拟机管理程序检查计算设备800的安全固件中记录的与计算设备800连接的多个外部设备的设备标识中,是否存在设备直通请求携带的第一外部设备的设备标识,在确定安全固件中记录的多个外部设备的设备标识中存在设备直通请求携带的第一外部设备的设备标识时,检查安全固件中记录的第一外部设备的设备标识对应的MMIO地址空间,是否与设备直通请求携带的MMIO地址空间相同,在确定第一外部设备的设备标识对应的MMIO地址空间与设备直通请求携带的MMIO地址空间相同时,确定设备直通请求携带的第一外部设备的设备标识和MMIO地址空间均有效,之后,基于设备直通请求携带的MMIO地址空间在MMU中建立第一映射关系;在确定安全固件中记录的多个外部设备的设备标识中不存在设备直通请求携带的第一外部设备的设备标识时,确定设备直通请求携带的第一外部设备的设备标识无效,不在MMU中建立第一映射关系,并提醒用户第一外部设备的设备标识无效;在确定安全固件中记录的多个外部设备的设备标识中存在设备直通请求携带的第一外部设备的设备标识,但检查出安全固件中记录的第一外部设备的设备标识对应的MMIO地址空间,与设备直通请求携带的MMIO地址空间不相同时,确定设备直通请求携带的第一外部设备的设备标识有效但携带的MMIO地址空间无效,不在MMU中建立第一映射关系,并提醒用户MMIO地址空间无效。
又例如,安全虚拟机管理程序检查设备直通请求携带的DMA地址空间,是否属于第一机密虚拟机的物理地址空间,在确定属于第一机密虚拟机的物理地址空间时,确定设备直通请求携带的DMA地址空间有效,之后,基于设备直通请求携带的DMA地址空间在IOMMU中建立第二映射关系,在确定不属于第一机密虚拟机的物理地址空间时,确定设备直通请求携带的DMA地址空间无效,不在IOMMU中建立第二映射关系,并提醒用户DMA地址空间无效。
S7023:安全虚拟机管理程序向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的第一报文中添加安全标志,或者,向第一外部设备发送安全标记指令,指示第一外部设备在生成的第一报文中添加安全标志,安全标志指示第一外部设备具有安全内存的访问权限。
IO硬件模块,如图8B所示,部署于计算设备800的硬件层。IO硬件模块是计算设备800和外部设备之间通信的桥梁,也就是说,计算设备800与外部设备通信时,通过IO硬件模块转发通信数据。例如, 在完成第一外部设备与第一机密虚拟机的直通配置之后,那么计算设备800上运行的第一机密虚拟机与第一外部设备之间的通信数据会由IO硬件模块进行转发。需要说明的,IO硬件模块也可以称为安全控制器(protection controller),或者称为外部设备安全控制器等等,本申请不对该硬件模块的名称进行具体限定。在一种可能的实施例中,在外部设备是通过PCIE协议与处理器通信时,IO硬件模块可以集成于根复合体。
下面详细介绍S7023的具体实现过程。
(1)关于安全虚拟机管理程序向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的第一报文中添加安全标志,具体的实现过程可包括图9A所示步骤S901-S904:
S901:安全虚拟机管理程序向IO硬件模块发送携带第一外部设备的设备标识的安全标记指令。
S902:IO硬件模块根据安全标记指令在本地记录安全标记,安全标记包括第一外部设备的设备标识,安全标记指示第一外部设备为安全设备。
安全设备,也可以称为机密设备或者可信设备。
S903:IO硬件模块接收第一外部设备发送的携带第一外部设备的设备标识的第一报文,将第一报文携带的第一外部设备的设备标识与安全标记中的第一外部设备的设备标识进行匹配,确定二者相同,执行S904。
S904:IO硬件模块确定第一外部设备为安全设备,在第一报文中添加安全标志。
IO硬件模块在第一报文中添加安全标志后,向IOMMU发送。
在本申请中,IO硬件模块若接收到第二外部设备(这里指未在IO硬件模块进行安全标记的外部设备,即非安全外部设备)的第二报文,可以将该第二报文中携带的第二外部设备的设备标识,与本地记录的安全标记中的设备标识进行匹配,确定本地记录的安全标记中不包括第二外部设备的设备标识,从而确定第二外部设备为非安全设备,然后,在第二报文中添加非安全标志,并向IOMMU发送。
IOMMU在接收到携带安全标志的第一报文时,根据第一报文携带的安全标志可确定第一外部设备可访问REE侧的非安全内存和TEE侧的安全内存,之后,基于第一报文携带的目的地址(属于第一外部设备的IO虚拟地址空间),查询本地配置的第一页表,该页表包括TEE侧的安全内存的映射关系(如上述第一映射关系和第二映射关系,在第一映射关系中MMIO地址空间为安全内存,在第二映射关系中DMA地址空间为安全内存)和REE侧的非安全内存的映射关系,IOMMU通过查询第一页表,可以确定REE侧的非安全内存/TEE侧的安全内存中是否存在与目的地址映射的内存空间,在确定存在与目的地址映射的内存空间的情况下,向目的地址映射内存空间转发第一报文,反之,不转发第一报文。
IOMMU在接收到携带非安全标志的第二报文时,根据第二报文携带的非安全标志可确定第二外部设备可访问REE侧的非安全内存,不可访问TEE侧的安全内存,之后,基于第二报文携带的目的地址(属于第二外部设备的IO虚拟地址空间),查询本地配置的第二页表,该页表包括REE侧的非安全内存的映射关系,IOMMU通过查询第二页表,可以确定REE侧的非安全内存中是否存在与目的地址映射的内存空间,在确定存在与目的地址映射的内存空间的情况下,向目的地址映射的内存空间转发第二报文,反之,不转发第二报文。
具体实现中,IO硬件模块在报文中添加安全标志/非安全标志的具体实现方式可以为:在报文中添加安全标志(security ID)字段(如标记位(NS bit))以及添加安全标志字段的值(value),若添加的安全标志字段的值为0,则表示添加安全标志,若添加的安全标志字段的值为1,则表示添加非安全标志。
可选地,安全标志和非安全标志对应的值也可以为其他,本申请对此不作具体限定。例如,若添加的安全标志字段的值为00,则表示添加安全标志,若添加的安全标志字段的值为01,则表示添加非安全标志。
可以看出,由于非安全外部设备(即上述第二外部设备)的报文中携带非安全标志,IOMMU在接收到非安全外部设备的报文后,基于报文中携带的非安全标志确定非安全外部设备不可访问TEE侧的安全内存,可以保护TEE侧的资源安全。
(2)关于安全虚拟机管理程序向第一外部设备发送安全标记指令,指示第一外部设备在生成的第一报文中添加安全标志,具体的实现过程可包括图9B所示步骤S910-S930:
S910:安全虚拟机管理程序向第一外部设备发送安全标记指令。
S920:第一外部设备根据安全标记指令标记自身为安全设备。
S930:第一外部设备根据自身为安全设备的标记在生成的第一报文中添加安全标志。
第一外部设备在生成的第一报文中添加安全标志后,向IOMMU发送。
在本申请中,第二外部设备(这里指未标记自身为安全设备的外部设备,即非安全外部设备)由于未标记自身为安全设备,其会在自身生成的第二报文中添加非安全标志,并向IOMMU发送。
IOMMU在接收到携带安全标志的第一报文/携带非安全标志的第二报文时,对第一报文/第二报文进行的后续操作,在图9A的内容中已经详细介绍,请参见图9A中的相关描述,为了说明书的简洁,此处不再展开赘述。
具体实现中,外部设备在报文中添加安全标志/非安全标志的具体实现方式可以为:在报文中添加安全标志(security ID)字段(如标记位(NS bit))以及添加安全标志字段的值(value),若添加的安全标志字段的值为0,则表示添加安全标志,若添加的安全标志字段的值为1,则表示添加非安全标志。
可选地,安全标志和非安全标志对应的值也可以为其他,本申请对此不作具体限定。例如,若添加的安全标志字段的值为00,则表示添加安全标志,若添加的安全标志字段的值为01,则表示添加非安全标志。
可以看出,由于非安全外部设备(即上述第二外部设备)的报文中携带非安全标志,IOMMU在接收到非安全外部设备的报文后,基于报文中携带的非安全标志确定非安全外部设备不可访问TEE侧的安全内存,可以保护TEE侧的资源安全。
通过上文对图7B、图9A、图9B的描述可以看出,安全虚拟机管理程序通过在MMU中建立第一映射关系,可以使得第一机密虚拟机在需要访问第一外部设备(如需要向第一外部设备下发指令或者数据)时,MMU在接收到来自第一机密虚拟机的报文后,通过第一映射关系确定第一机密虚拟机可以访问第一外部设备,之后向第一外部设备转发第一机密虚拟机的报文,从而实现第一机密虚拟机访问第一外部设备。还可以看出,安全虚拟机管理程序通过在IOMMU中建立第二映射关系以及向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的第一报文中添加安全标志,或者,向第一外部设备发送安全标记指令,指示第一外部设备在生成的第一报文中添加安全标志,可以使得第一外部设备在需要访问第一机密虚拟机(如需要向第一机密虚拟机返回数据)时,IOMMU在接收到来自第一外部设备的第一报文后,通过第二映射关系以及第一报文中的安全标志确定第一外部设备可以访问第一机密虚拟机,向第一机密虚拟机转发第一外部设备的报文,从而实现第一外部设备访问第一机密虚拟机。
可以理解,由于第一外部设备的MMIO地址空间和第一外部设备的DMA地址空间均属于第一机密虚拟机的内存,而第一机密虚拟机的内存属于TEE侧的安全内存,因此第一外部设备的MMIO地址空间和第一外部设备的DMA地址空间均受TEE的硬件安全特性保护,即便主机操作系统内核被攻击者攻破,攻击者也不能通过主机操作系统内核访问第一外部设备的MMIO地址空间和第一外部设备的DMA地址空间,攻击者无法访问第一外部设备的MMIO地址空间,意味着无法访问第一外部设备,从而避免攻击者攻击第一外部设备,保护第一外部设备的安全以及第一外部设备中的数据(如接收的来自第一机密虚拟机的数据)安全,攻击者无法访问第一外部设备的DMA地址空间,从而保护第一外部设备的DMA地址空间中存储的来自第一外部设备的数据安全。
在一种可能的实施例中,上述设备直通请求还可以携带第一外部设备对DMA地址空间(即上述第一外部设备的DMA地址空间)的细粒度访问权限(如只读、写、执行权限等),安全虚拟机管理程序可以根据设备直通请求携带的第一外部设备对DMA地址空间的细粒度访问权限,在IOMMU中配置第一外部设备对DMA地址空间的细粒度访问权限,后续,在第一外部设备访问DMA地址空间(即访问第一机密虚拟机)时,IOMMU可以根据本地配置的上述细粒度访问权限控制第一外部设备对DMA地址空间的访问。例如,若安全虚拟机管理程序仅根据设备直通请求在IOMMU中配置第一外部设备对DMA地址空间具有只读权限,那么IOMMU仅允许第一外部设备只读DMA地址空间,不允许第一外部设备对DMA地址空间进行其他操作。
在一种可能的实施例中,上述设备直通请求还可以携带第一机密虚拟机对MMIO地址空间(即上述第一外部设备的MMIO地址空间)的细粒度访问权限(如只读、写、执行权限等),安全虚拟机管理程序可以根据设备直通请求携带的第一机密虚拟机对MMIO地址空间的细粒度访问权限,在MMU中配置第一机密虚拟机对MMIO地址空间的细粒度访问权限,后续,在第一机密虚拟机访问MMIO地址空间(即访问第一外部设备)时,MMU可以根据本地配置的上述细粒度访问权限控制第一机密虚拟机对MMIO地址空间的访问。例如,若安全虚拟机管理程序仅根据设备直通请求在MMU中配置第一机密虚拟机对MMIO地址空间具有只读权限,那么MMU仅允许第一机密虚拟机只读MMIO地址空间,不允许第一机密虚拟机对MMIO地址空间进行其他操作。
S703:安全虚拟机管理程序向设备直通管理模块发送通知消息,通知已完成第一外部设备和第一机密 虚拟机之间的直通配置。
S704:设备直通管理模块通知用户已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一种可能的实施例中,如图8B所示,计算设备800的TEE侧除了包括机密虚拟机之外,还可以包括安全IO管理(trust input/output management)模块,安全IO管理模块可以运行于TEE侧的SEL0层至SEL3层中的任意一层,优选地,运行于SEL2层。在安全IO管理模块运行于SEL2层时,可以集成于用于管理密虚拟机的安全虚拟机管理程序,也可以独立于安全虚拟机管理程序,本申请不作具体限定,在图8B中,以安全IO管理模块集成于安全虚拟机管理程序为例。需要说明的,安全IO管理模块也可以称为安全世界IO管理模块、安全管理模块、安全IO模块等等,本申请不对该模块的名称进行具体限定。
在图8B所示的计算设备800中,图7A、图7B、图9A、图9B中由安全虚拟机管理程序执行的步骤,均可以由安全IO管理模块实现。
在一种更具体的实施例中,如图8B所示,设备直通管理模块包括入站(inbound)方向访问控制模块和出站(outbound)方向访问控制模块,安全IO管理模块包括MMIO模块和IOMMU模块。
inbound方向访问控制模块是对IOMMU驱动的封装,用于为第一机密虚拟机提供IOMMU功能,即为第一机密虚拟机提供被第一外部设备访问的能力。
具体地,inbound方向访问控制模块可以根据设备直通请求访问IOMMU模块,指示IOMMU模块访问IOMMU,以在IOMMU中建立第二映射关系,从而使得第一外部设备具有通过第二映射关系访问第一机密虚拟机的能力。
outbound方向访问控制模块是对外部设备驱动的封装,用于为第一机密虚拟机提供访问第一外部设备的能力。
具体地,outbound方向访问控制模块可以根据设备直通请求访问MMIO模块,指示MMIO模块访问MMU,以在MMU中建立第一映射关系,从而使得第一机密虚拟机具有通过第一映射关系访问第一外部设备的能力。
在一种可能的实施例中,在计算设备800是基于VFIO驱动框架实现外部设备直通到用户态时,可以将设备直通管理模块集成于VFIO驱动。
需要说明的,上述MMIO模块也可以称为MMIO地址空间配置模块、MMIO配置模块等等,上述IOMMU模块也可以称为DMA内存配置模块、IOMMU配置模块等等,上述inbound方向访问控制模块也可以称为第一访问控制模块、第一方向访问控制模块、inbound控制模块等等,上述outbound方向访问控制模块也可以称为第二访问控制模块、第二方向访问控制模块、outbound控制模块等等,本申请不对上述模块的名称进行具体限定。
需要说明的,图7A是以安全虚拟机管理程序与用户之间的交互过程(如安全虚拟机管理程序获取用户输入的设备直通请求,如安全虚拟机管理程序通知用户已完成第一外部设备和第一机密虚拟机之间的直通配置),需要经过设备直通管理模块为例描述,具体实现中,安全虚拟机管理程序与用户之间的交互过程也可以不经过设备直通管理模块,如安全虚拟机管理程序直接从REE侧的非安全内存中读取用户输入至计算设备800的设备直通请求,无需由设备直通管理模块读取转发,又如安全虚拟机管理程序直接通知用户已完成第一外部设备和第一机密虚拟机之间的直通配置,无需由设备直通管理模块通知,因此,在一种可能的实施例中,图8A所示的计算设备800也可以不包括设备直通管理模块。本申请不对安全虚拟机管理程序与用户之间的交互过程进行具体限定。
在本申请具体的实施例中,在完成第一外部设备和第一机密虚拟机之间的直通配置之后,第一外部设备与第一机密虚拟机之间进行通信的通信数据,会由IO硬件模块和安全虚拟机管理程序转发,不经过REE侧,具体地,第一外部设备向第一机密虚拟机发送的数据,会经IO硬件模块转发给IOMMU,IOMMU转发给安全虚拟机管理程序,再由安全虚拟机管理程序转发给第一机密虚拟机,不经过REE侧,第一机密虚拟机向第一外部设备发送的数据,会经安全虚拟机管理程序转发给MMU,MMU转发给IO硬件模块,由IO硬件模块转发给第一外部设备,不经过REE侧,如此,可以避免通信数据在传输过程中被REE侧的软件如(主机操作系统内核)访问,即便REE侧的软件被攻击者攻破,也窃取不到第一外部设备与第一机密虚拟机之间的通信数据,从而保证通信数据在传输过程中的安全。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
上文详细阐述了本申请提供的外部设备直通虚拟机的方法,基于相同的发明构思,下面继续介绍本申请提供的外部设备直通虚拟机的装置和计算设备。
应理解,外部设备直通虚拟机的装置内部的单元模块也可以有多种划分,各个模块可以是软件模块,也可以是硬件模块,也可以部分是软件模块部分是硬件模块,本申请不对其进行限制。
参见图10A,图10A为本申请示例性示出的一种外部设备直通虚拟机的装置1000A的结构示意图,可以应用于图3、图5所示的硬件资源被划分为REE侧和TEE侧的计算设备300,如图10A所示,装置1000A包括:获取模块1010和处理模块1020。下面对装置1000A的各个模块的功能进行示例性地介绍。应理解,以下所举例描述的各个模块的功能仅是装置1000A在本申请的一些实施例中可以具有的功能,本申请并不对各个模块具有的功能进行限定。
获取模块1010,用于在REE侧获取第一指令,第一指令指示配置第一外部设备直通位于TEE侧的机密虚拟机,第一外部设备为计算设备300中的任意一个或多个外部设备。
处理模块1020,用于在TEE侧根据第一指令配置第一外部设备直通机密虚拟机。
在一种可能的实施例中,处理模块1020可以通过如下方式实现配置第一外部设备直通虚拟机:处理模块1020在TEE侧配置第一外部设备的BAR,然后建立第一映射关系和第二映射关系,其中,第一映射关系为第一内存与第二内存之间的映射关系,第一内存为虚拟机的内存中用于机密虚拟机访问第一外部设备的内存,第二内存为第一外部设备的BAR中用于机密虚拟机访问第一外部设备的内存,第二映射关系为第三内存与第四内存之间的映射关系,第三内存为机密虚拟机的内存中用于第一外部设备访问机密虚拟机的内存,第四内存为第一外部设备的BAR中用于第一外部设备访问机密虚拟机的内存。
在一种可能的实施例中,如图10A所示,装置1000A还包括访问控制模块1030,用于在获取模块1010/处理模块1020在REE侧的情况下,不允许获取模块1010/处理模块1020访问第一外部设备。
在一种可能的实施例中,如图10A所示,装置1000A还包括发送模块1040;获取模块1010,用于在REE侧获取第二指令(第二指令指示标记第一外部设备为安全设备,第二指令携带第一外部设备的设备标识);发送模块1040用于向访问控制模块1030发送第二指令,访问控制模块1030还用于根据第二指令中的第一外部设备的设备标识标记第一外部设备为安全设备,以及用于接收来自第一外部设备的与机密虚拟机相关的第一报文(第一报文携带第一标识,第一标识指示第一外部设备为安全设备),访问控制模块1030还用于基于第一报文携带的第一标识确定第一外部设备为安全设备,然后将第一报文发送至机密虚拟机。
在一种可能的实施例中,上述第一标识为第一外部设备的设备标识,上述访问控制模块1030用于根据第二指令中的第一外部设备的设备标识,在计算设备300的根复合体中标记第一外部设备为安全设备。
为了增加方案的灵活性,在另一种可能的实施例中,上述访问控制模块1030用于根据第二指令中的第一外部设备的设备标识,在第一外部设备中标记第一外部设备为安全设备。
在一种可能的实施例中,计算设备300的REE侧部署有VFIO驱动,TEE侧部署有用于对机密虚拟机进行管理的安全虚拟机管理程序,上述获取模块1010以及上述发送模块1040部署于VFIO驱动,上述处理模块1020部署于安全虚拟机管理程序,上述访问控制模块1030部署于计算设备300中的根复合体,访问控制模块1030可以理解为图5所示的安全控制器。
在一种可能的实施例中,上述访问控制模块1030用于通过安全虚拟机管理程序将第一报文发送至机密虚拟机。
在一种可能的实施例中,上述安全虚拟机管理程序还用于将从机密虚拟机接收的与第一外部设备相关的第二报文,发送至第一外部设备。
在一种可能的实施例中,上述获取模块1010在获取第一指令之前还用于在REE侧获取待创建的机密虚拟机的配置信息,上述处理模块1020还用于在TEE侧根据配置信息创建机密虚拟机。
在一种可能的实施例中,第一外部设备包括如下任意一种或多种:GPU、NPU、网卡、显卡和声卡。应理解,第一外部设备还可以包括其他类型的外部设备,本申请对此不作具体限定。
具体地,上述装置1000A执行各种操作的具体实现,可参照上述图4、图6所示外部设备机密虚拟机的方法实施例中相关内容中的描述,为了说明书的简洁,这里不再赘述。
参见图10B,图10B为本申请示例性示出的另一种外部设备直通虚拟机的装置1000B的结构示意图,可以是图7A-图9B实施例中描述的安全虚拟机管理程序或者安全IO管理模块,如图10B所示,装置1000B可包括:接收模块1001、配置模块1002和发送模块1003。下面对装置1000B的各个模块的功能进行示例性地介绍。应理解,以下所举例描述的各个模块的功能仅是装置1000B在本申请的一些实施例中可以具有 的功能,本申请并不对各个模块具有的功能进行限定。
接收模块1001,用于接收设备直通请求,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识。
配置模块1002,用于根据设备直通请求,配置第一外部设备直通第一机密虚拟机。
在一些可能的实施例中,接收模块1001,用于接收设备直通管理模块发送的设备直通请求,设备直通管理模块运行于非安全世界;发送模块1003,用于向设备直通管理模块发送通知消息,通知已完成第一外部设备和第一机密虚拟机之间的直通配置。
在一些可能的实施例中,配置模块1002,具体用于:
在MMU中建立第一映射关系以及在IOMMU中建立第二映射关系,其中,第一映射关系为第一机密虚拟机的虚拟地址空间与第一外部设备的MMIO地址空间之间的映射关系,第二映射关系为第一外部设备的IO虚拟地址空间与第一外部设备的DMA地址空间之间的映射关系,第一外部设备的MMIO地址空间和DMA地址空间均属于第一机密虚拟机的物理地址空间;
向IO硬件模块发送安全标记指令,指示IO硬件模块在接收到的来自第一外部设备的报文中添加安全标志,或者,安全虚拟机管理程序向第一外部设备发送安全标记指令,指示第一外部设备在生成的报文中添加安全标志,安全标志指示第一外部设备具有安全内存的访问权限。
在一些可能的实施例中,在第一机密虚拟机所属的计算设备包括RC的情况下,IO硬件模块集成于RC。
在一些可能的实施例中,第一外部设备的设备标识为BDF号。
在一些可能的实施例中,第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
在一些可能的实施例中,装置1000B应用于硬件资源被划分为REE侧和TEE侧的计算设备(如图8A、图8B所示的计算设备800),第一机密虚拟机位于TEE侧。
具体地,上述装置1000B执行各种操作的具体实现,可参照上述图7A-图9B所示外部设备直通虚拟机的方法中,由安全虚拟机管理程序/安全IO管理模块执行的操作的描述,为了说明书的简洁,这里不再赘述。
参见图10C,图10C为本申请示例性示出的另一种外部设备直通虚拟机的装置1000C的结构示意图,可以是图7A-图9B实施例中描述的设备直通管理模块,如图10C所示,装置1000C可包括:接收模块1100和发送模块1200。下面对装置1000C的各个模块的功能进行示例性地介绍。应理解,以下所举例描述的各个模块的功能仅是装置1000C在本申请的一些实施例中可以具有的功能,本申请并不对各个模块具有的功能进行限定。
发送模块1200,用于向安全虚拟机管理程序发送设备直通请求,设备直通请求用于配置第一外部设备直通第一机密虚拟机,设备直通请求携带第一外部设备的设备标识和第一机密虚拟机的标识。
接收模块1100,用于接收安全虚拟机管理程序发送的通知消息,通知消息指示已完成第一外部设备和第一机密虚拟机之间的直通配置。
具体地,上述装置1000C执行各种操作的具体实现,可参照上述图7A-图9B所示外部设备直通虚拟机的方法中,由设备直通管理模块执行的操作的描述,为了说明书的简洁,这里不再赘述。
参见图11,图11为本申请提供的另一种计算设备1110的结构示意图,计算设备包括:处理器1111、内存单元1112、通信接口1113、存储器1114、输入设备1115和输出设备1116,其中,处理器1111、内存单元1112、通信接口1113、存储器1114、外部设备1115之间可以通过总线1116相互连接。其中,
处理器1111可以读取内存单元1112中存储的程序代码(包括指令),执行内存单元1112中存储的程序代码,使得计算设备300执行上述外部设备直通机密虚拟机的方法中的步骤。
处理器1111可以有多种具体实现形式,例如处理器1111可以为至少一个CPU,如图11所示,包括CPU0和CPU1,处理器1111还可以为GPU等,处理器1111还可以是单核处理器或多核处理器。处理器1111可以由CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现。上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD)、现场可编程门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。处理器1111也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digital signal processing,DSP)等。
内存单元1112用于存储内核、程序代码以及处理器1111在执行内存单元1112中存储的程序代码时所产生的程序数据。其中,程序代码包括图10A所示的获取模块1010的代码和处理模块1020的代码等,程序数据包括:第一指令、第二指令、待创建的机密虚拟机的配置信息等等,或者,程序代码包括图10B所示的接收模块1001的代码、配置模块1002的代码和发送模块1003的代码等,程序数据包括:设备直通请求、指示已完成第一外部设备和第一机密虚拟机之间的直通配置的通知消息等等,或者,程序代码包括图10C所示的接收模块1100和发送模块1200的代码等,程序数据包括:设备直通请求、指示已完成第一外部设备和第一机密虚拟机之间的直通配置的通知消息等等。
通信接口1113可以为有线接口(例如以太网接口、光纤接口、其他类型接口(例如,无限带宽技术(infiniBand,IB)接口))或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与其他计算设备或装置进行通信。当通信接口1113为有线接口时,通信接口1113可以采用传输控制协议/网际协议(transmission control protocol/internet protocol,TCP/IP)之上的协议族,例如,远程函数调用(remote function call,RFC)协议、简单对象访问协议(simple object access protocol,SOAP)协议、简单网络管理协议(simple network management protocol,SNMP)协议、公共对象请求代理体系结构(common object request broker architecture,CORBA)协议以及分布式协议等等。
存储器1114可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器1114也可以是易失性存储器,易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。
外部设备1115可以包括显卡、网卡、声卡、加速设备(如GPU、NPU)、磁盘等。
总线1116可以是PCIE总线等。上述总线1116可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
应理解,本申请实施例的计算设备可对应于本申请实施例中的包括装置1000A、1000B或者1000C的计算设备,并可以对应于执行本申请实施例中图4、图6、图7A、图7B、图9A、图9B所示方法中相应主体,并且计算设备中的各个模块的操作和/或功能分别为了实现图4、图6、图7A、图7B、图9A、图9B所示方法的相应流程,为了简洁,在此不再赘述。
应当理解,计算设备300仅为本申请实施例提供的一个示例,并且,计算设备300可具有比图11示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。
本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,该指令被运行时可以实现上述实施例中记载的外部设备直通虚拟机的方法的部分或者全部步骤。
本申请还提供一种计算机程序产品,当计算机程序产品被计算机读取并执行时,可以实现上述方法实施例中记载的外部设备直通虚拟机的方法的部分或者全部步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
在上述实施例中,可以全部或部分地通过软件、硬件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质、或者半导体介质等。
以上所述,仅为本申请的具体实施方式。熟悉本技术领域的技术人员根据本申请提供的具体实施方式,可想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (36)

  1. 一种高速串行计算机扩展总线标准PCIE设备直通虚拟机的方法,其特征在于,应用于计算设备,所述计算设备的硬件资源被划分为富执行环境REE侧和可信执行环境TEE侧,所述计算设备包括第一PCIE设备,所述TEE侧包括虚拟机,所述方法包括:
    所述计算设备的处理器在所述REE侧获取第一指令,所述第一指令指示配置所述第一PCIE设备直通所述虚拟机;
    所述处理器在所述TEE侧根据所述第一指令配置所述第一PCIE设备直通所述虚拟机。
  2. 根据权利要求1所述的方法,其特征在于,所述处理器在所述TEE侧配置所述第一PCIE设备直通所述虚拟机,包括:
    所述处理器在所述TEE侧配置所述第一PCIE设备的基地址寄存器BAR;
    所述处理器在所述TEE侧建立第一映射关系,其中,所述第一映射关系为所述第一内存与第二内存之间的映射关系,所述第一内存为所述虚拟机的内存中用于所述虚拟机访问所述第一PCIE设备的内存,所述第二内存为所述第一PCIE设备的BAR中用于所述虚拟机访问所述第一PCIE设备的内存;
    所述处理器在所述TEE侧建立第二映射关系,其中,所述第二映射关系为第三内存与第四内存之间的映射关系,所述第三内存为所述虚拟机的内存中用于所述第一PCIE设备访问所述虚拟机的内存,所述第四内存为所述第一PCIE设备的BAR中用于所述第一PCIE设备访问所述虚拟机的内存。
  3. 根据权利要求1或2所述的方法,其特征在于,所述计算设备包括根复合体RC,所述方法还包括:
    在所述处理器在所述REE侧的情况下,所述RC不允许所述处理器访问所述第一PCIE设备。
  4. 根据权利要求1至3任一权利要求所述的方法,其特征在于,所述方法还包括:
    所述处理器在所述REE侧获取第二指令,所述第二指令指示标记所述第一PCIE设备为安全设备,所述第二指令携带所述第一PCIE设备的标识;
    所述处理器向所述计算设备中的RC发送所述第二指令;
    所述RC根据所述第二指令中的所述第一PCIE设备的标识,标记所述第一PCIE设备为安全设备;
    所述RC接收来自所述第一PCIE设备的与所述虚拟机相关的第一报文,所述第一报文携带第一标识,所述第一标识指示所述第一PCIE设备为安全设备;
    所述RC基于所述第一报文中的所述第一标识,确定所述第一PCIE设备为安全设备;
    所述RC将所述第一报文发送至所述虚拟机。
  5. 根据权利要求4所述的方法,其特征在于,所述第一标识为所述第一PCIE设备的标识,所述RC根据所述第二指令中的所述第一PCIE设备的标识,标记所述第一PCIE设备为安全设备,包括:
    所述RC根据所述第二指令中的所述第一PCIE设备的标识,在所述RC中标记所述第一PCIE设备为安全设备。
  6. 根据权利要求4所述的方法,其特征在于,所述RC根据所述第二指令中的所述第一PCIE设备的标识,标记所述第一PCIE设备为安全设备,包括:
    所述RC根据所述第二指令中的所述第一PCIE设备的标识,在所述第一PCIE设备中标记所述第一PCIE设备为安全设备。
  7. 根据权利要求1至6任一权利要求所述的方法,其特征在于,所述REE侧部署有虚拟功能输入输出VFIO驱动,所述TEE侧部署有用于对所述虚拟机进行管理的虚拟机管理器;
    所述处理器在所述REE侧执行的操作由所述处理器运行所述VFIO驱动执行,所述处理器在所述TEE侧执行的操作由所述处理器运行所述虚拟机管理器执行。
  8. 根据权利要求7所述的方法,其特征在于,所述RC将所述第一报文发送至所述虚拟机,包括:
    所述RC通过所述虚拟机管理器将所述第一报文发送至所述虚拟机;
    所述方法还包括:
    所述处理器运行所述虚拟机管理器将从所述虚拟机接收的与所述第一PCIE设备相关的第二报文,发送至所述第一PCIE设备。
  9. 根据权利要求1至8任一权利要求所述的方法,其特征在于,所述处理器在所述REE侧获取第一指令之前,所述方法还包括:
    所述处理器在所述REE侧获取待创建的所述虚拟机的配置信息;
    所述处理器在所述TEE侧根据所述配置信息创建所述虚拟机。
  10. 根据权利要求1至9任一权利要求所述的方法,其特征在于,所述第一PCIE设备包括如下任意一种或多种:图形处理器GPU、嵌入式神经网络处理器NPU、网卡、显卡和声卡。
  11. 一种外部设备直通虚拟机的方法,其特征在于,所述方法包括:
    安全虚拟机管理程序接收设备直通请求,所述设备直通请求用于配置第一外部设备直通第一机密虚拟机,所述设备直通请求携带所述第一外部设备的设备标识和所述第一机密虚拟机的标识;
    所述安全虚拟机管理程序根据所述设备直通请求,配置所述第一外部设备直通所述第一机密虚拟机。
  12. 根据权利要求11所述的方法,其特征在于,所述安全虚拟机管理程序接收设备直通请求,包括:
    所述安全虚拟机管理程序接收设备直通管理模块发送的设备直通请求,所述设备直通管理模块运行于非安全世界;
    在所述安全虚拟机管理程序配置所述第一外部设备直通所述第一机密虚拟机之后,所述方法还包括:
    所述安全虚拟机管理程序向所述设备直通管理模块发送通知消息,通知已完成所述第一外部设备和所述第一机密虚拟机之间的直通配置。
  13. 根据权利要求11或12所述的方法,其特征在于,所述安全虚拟机管理程序配置所述第一外部设备直通所述第一机密虚拟机,包括:
    所述安全虚拟机管理程序在内存管理单元MMU中建立第一映射关系以及在输入输出内存管理单元IOMMU中建立第二映射关系,其中,所述第一映射关系为所述第一机密虚拟机的虚拟地址空间与所述第一外部设备的内存映射输入输出MMIO地址空间之间的映射关系,所述第二映射关系为所述第一外部设备的IO虚拟地址空间与所述第一外部设备的直接内存存取DMA地址空间之间的映射关系,所述MMIO地址空间和所述DMA地址空间均属于所述第一机密虚拟机的物理地址空间;
    所述安全虚拟机管理程序向IO硬件模块发送安全标记指令,指示所述IO硬件模块在接收到的来自所述第一外部设备的报文中添加安全标志,或者,所述安全虚拟机管理程序向所述第一外部设备发送安全标记指令,指示所述第一外部设备在生成的报文中添加安全标志,所述安全标志指示所述第一外部设备具有安全内存的访问权限。
  14. 根据权利要求13所述的方法,其特征在于,在第一机密虚拟机所属的计算设备包括根复合体RC的情况下,所述IO硬件模块集成于所述RC。
  15. 根据权利要求11至14任一权利要求所述的方法,其特征在于,所述第一外部设备的设备标识为总线-设备-功能BDF号。
  16. 根据权利要求11至15任一权利要求所述的方法,其特征在于,所述安全虚拟机管理程序包括安全IO管理模块,所述安全虚拟机管理程序执行的操作由所述安全IO管理模块执行。
  17. 根据权利要求11至16任一权利要求所述的方法,其特征在于,所述第一外部设备为GPU、NPU、张量处理器TPU、网卡或者硬盘。
  18. 根据权利要求11至17任一权利要求所述的方法,其特征在于,所述方法应用于硬件资源被划分为REE侧和TEE侧的计算设备,所述第一机密虚拟机位于所述TEE侧。
  19. 一种外部设备直通虚拟机的方法,其特征在于,所述方法包括:
    设备直通管理模块向安全虚拟机管理程序发送设备直通请求,所述设备直通管理模块运行于非安全世界,所述设备直通请求用于配置第一外部设备直通第一机密虚拟机,所述设备直通请求携带所述第一外部设备的设备标识和所述第一机密虚拟机的标识;
    所述设备直通管理模块接收所述安全虚拟机管理程序发送的通知消息,所述通知消息指示已完成所述第一外部设备和所述第一机密虚拟机之间的直通配置。
  20. 根据权利要求19所述的方法,其特征在于,所述第一外部设备的设备标识为BDF号。
  21. 根据权利要求19或20所述的方法,其特征在于,所述第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
  22. 根据权利要求19至21任一权利要求所述的方法,其特征在于,所述方法应用于硬件资源被划分为REE侧和TEE侧的计算设备,所述第一机密虚拟机位于所述TEE侧。
  23. 一种外部设备直通虚拟机的装置,其特征在于,所述装置包括:
    接收模块,用于接收设备直通请求,所述设备直通请求用于配置第一外部设备直通第一机密虚拟机,所述设备直通请求携带所述第一外部设备的设备标识和所述第一机密虚拟机的标识;
    配置模块,用于根据所述设备直通请求,配置所述第一外部设备直通所述第一机密虚拟机。
  24. 根据权利要求23所述的装置,其特征在于,所述装置还包括发送模块;
    所述接收模块,用于接收设备直通管理模块发送的设备直通请求,所述设备直通管理模块运行于非安全世界;
    所述发送模块,用于向所述设备直通管理模块发送通知消息,通知已完成所述第一外部设备和所述第一机密虚拟机之间的直通配置。
  25. 根据权利要求23或24所述的装置,其特征在于,所述配置模块,具体用于:
    在MMU中建立第一映射关系以及在IOMMU中建立第二映射关系,其中,所述第一映射关系为所述第一机密虚拟机的虚拟地址空间与所述第一外部设备的MMIO地址空间之间的映射关系,所述第二映射关系为所述第一外部设备的IO虚拟地址空间与所述第一外部设备的DMA地址空间之间的映射关系,所述MMIO地址空间和所述DMA地址空间均属于所述第一机密虚拟机的物理地址空间;
    向IO硬件模块发送安全标记指令,指示所述IO硬件模块在接收到的来自所述第一外部设备的报文中添加安全标志,或者,所述安全虚拟机管理程序向所述第一外部设备发送安全标记指令,指示所述第一外部设备在生成的报文中添加安全标志,所述安全标志指示所述第一外部设备具有安全内存的访问权限。
  26. 根据权利要求25所述的装置,其特征在于,在所述第一机密虚拟机所属的计算设备包括RC的情况下,所述IO硬件模块集成于所述RC。
  27. 根据权利要求23至26任一权利要求所述的装置,其特征在于,所述第一外部设备的设备标识为BDF号。
  28. 根据权利要求23至27任一权利要求所述的装置,其特征在于,所述装置还包括安全IO管理模块,所述装置用于执行的操作由所述安全IO管理模块执行。
  29. 根据权利要求23至28任一权利要求所述的装置,其特征在于,所述第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
  30. 根据权利要求23至29任一权利要求所述的装置,其特征在于,所述装置应用于硬件资源被划分为REE侧和TEE侧的计算设备,所述第一机密虚拟机位于所述TEE侧。
  31. 一种外部设备直通虚拟机的装置,其特征在于,所述装置包括:
    发送模块,用于向安全虚拟机管理程序发送设备直通请求,所述设备直通管理模块运行于非安全世界,所述设备直通请求用于配置第一外部设备直通第一机密虚拟机,所述设备直通请求携带所述第一外部设备的设备标识和所述第一机密虚拟机的标识;
    接收模块,用于接收所述安全虚拟机管理程序发送的通知消息,所述通知消息指示已完成所述第一外部设备和所述第一机密虚拟机之间的直通配置。
  32. 根据权利要求31所述的装置,其特征在于,所述第一外部设备的设备标识为BDF号。
  33. 根据权利要求31或32所述的装置,其特征在于,所述第一外部设备为GPU、NPU、TPU、网卡或者硬盘。
  34. 根据权利要求31至33任一权利要求所述的装置,其特征在于,所述装置应用于硬件资源被划分为REE侧和TEE侧的计算设备,所述第一机密虚拟机位于所述TEE侧。
  35. 一种计算设备,其特征在于,所述计算设备包括处理器和存储器;所述计算设备的处理器用于执行所述计算设备的存储器中存储的指令,以使得所述计算设备执行如权利要求1至22任一权利要求所述的方法。
  36. 一种计算机可读存储介质,其特征在于,包括计算机程序指令,当所述计算机程序指令由计算设备执行时,所述计算设备执行如权利要求1至22任一权利要求所述的方法。
CN202480002939.3A 2023-06-28 2024-06-24 Pcie设备直通虚拟机的方法、装置及相关设备 Pending CN119547074A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN2023107847408 2023-06-28
CN202310784740.8A CN116881987A (zh) 2023-06-28 2023-06-28 Pcie设备直通虚拟机的方法、装置及相关设备
PCT/CN2024/101037 WO2025002060A1 (zh) 2023-06-28 2024-06-24 Pcie设备直通虚拟机的方法、装置及相关设备

Publications (1)

Publication Number Publication Date
CN119547074A true CN119547074A (zh) 2025-02-28

Family

ID=88262726

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310784740.8A Pending CN116881987A (zh) 2023-06-28 2023-06-28 Pcie设备直通虚拟机的方法、装置及相关设备
CN202480002939.3A Pending CN119547074A (zh) 2023-06-28 2024-06-24 Pcie设备直通虚拟机的方法、装置及相关设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202310784740.8A Pending CN116881987A (zh) 2023-06-28 2023-06-28 Pcie设备直通虚拟机的方法、装置及相关设备

Country Status (2)

Country Link
CN (2) CN116881987A (zh)
WO (1) WO2025002060A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116881987A (zh) * 2023-06-28 2023-10-13 华为技术有限公司 Pcie设备直通虚拟机的方法、装置及相关设备
CN119440714A (zh) * 2023-07-31 2025-02-14 华为技术有限公司 虚拟机实现方法、装置及计算机可读存储介质
CN117093246B (zh) * 2023-10-19 2024-02-23 深圳市掌锐电子有限公司 一种虚拟机中多操作系统ota ab分区升级的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6753412B2 (ja) * 2015-10-22 2020-09-09 日本電気株式会社 コンピュータ、デバイス割当管理方法及びプログラム
CN116680037A (zh) * 2019-05-05 2023-09-01 创新先进技术有限公司 数据隔离方法及装置、电子设备
US12045471B2 (en) * 2021-07-27 2024-07-23 International Business Machines Corporation Secure memory isolation for secure endpoints
CN114237817A (zh) * 2021-11-30 2022-03-25 海光信息技术股份有限公司 虚拟机数据读写方法及相关装置
CN116881987A (zh) * 2023-06-28 2023-10-13 华为技术有限公司 Pcie设备直通虚拟机的方法、装置及相关设备

Also Published As

Publication number Publication date
CN116881987A (zh) 2023-10-13
WO2025002060A1 (zh) 2025-01-02

Similar Documents

Publication Publication Date Title
US12189542B2 (en) Technologies for secure device configuration and management
CN110073355B (zh) 用于提供安全执行环境的服务器和用于保护服务器上的非易失性存储器中的固件的方法
EP3761208B1 (en) Trust zone-based operating system and method
US10831889B2 (en) Secure memory implementation for secure execution of virtual machines
CN110520847B (zh) 控制和状态信号的虚拟化
CN119547074A (zh) Pcie设备直通虚拟机的方法、装置及相关设备
US10972449B1 (en) Communication with components of secure environment
US10255088B2 (en) Modification of write-protected memory using code patching
US11575672B2 (en) Secure accelerator device pairing for trusted accelerator-to-accelerator communication
US10083129B2 (en) Code loading hardening by hypervisor page table switching
CN107787495B (zh) 安全输入/输出设备管理
US10257166B2 (en) Guest netfilter protection by virtual machine function
CN112099903A (zh) 一种虚拟机的内存管理方法、装置、cpu芯片及服务器
WO2023103697A1 (zh) 一种计算机系统中的通信方法及相关产品
WO2020247924A1 (en) Systems and methods for processor virtualization
EP3178032B1 (en) Embedding secret data in code
CN115549938A (zh) 用于控制器的主机防火墙接口
US12137161B2 (en) Limiting use of encryption keys in an integrated circuit device
JP2012093917A (ja) 仮想制御プログラム、情報処理装置及び仮想制御方法
CN109190383B (zh) 访问指令的处理方法、装置及设备
CN119337389A (zh) 一种数据保密方法、相关装置及系统
CN116611053A (zh) 可信执行环境实现方法及装置、终端设备
Chen KeenLab iOS Jailbreak Internals: Userland Read-Only Memory Can Be Dangerous

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination