mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
hypervisor: kvm: Add GUEST_MEMFD and KVM_SET_USER_MEMORY_REGION2 support
Add support for guest_memfd (available in Linux kernel v6.8+), which enables private memory for confidential VMs. Key changes: - Introduce UserMemoryRegion abstraction with guest_memfd fields - Add From impls between kvm_userspace_memory_region2 and UserMemoryRegion - Convert all KVM memory region operations from kvm_userspace_memory_region to kvm_userspace_memory_region2, with automatic fallback to v1 when guest_memfd is not supported - Add set_user_memory_region() wrapper that dispatches to v1/v2 based on kvm_guest_memfd_supported capability - Create guest_memfd via KVM_CREATE_GUEST_MEMFD ioctl when supported - Extend KvmDirtyLogSlot to preserve region2 fields across dirty log start/stop cycles This is prerequisite infrastructure for KVM-based confidential computing that requires private guest memory backed by guest_memfd. Co-authored-by: Alex Orozco <aorozco@google.com> Signed-off-by: Keith Adler <kadler@cloudflare.com> Signed-off-by: Ruben Hakobyan <hruben@meta.com>
This commit is contained in:
committed by
Rob Bradford
parent
12dd72d88f
commit
cdbe43f423
@@ -90,6 +90,9 @@ mod kvm {
|
||||
pub const KVM_HAS_DEVICE_ATTR: u64 = 0x4018_aee3;
|
||||
pub const KVM_SET_ONE_REG: u64 = 0x4010_aeac;
|
||||
pub const KVM_SET_USER_MEMORY_REGION: u64 = 0x4020_ae46;
|
||||
pub const KVM_SET_USER_MEMORY_REGION2: u64 = 0x40a0_ae49;
|
||||
pub const KVM_SET_MEMORY_ATTRIBUTES: u64 = 0x4020_aed2;
|
||||
pub const KVM_CREATE_GUEST_MEMFD: u64 = 0xc040_aed4;
|
||||
pub const KVM_IRQFD: u64 = 0x4020_ae76;
|
||||
pub const KVM_IOEVENTFD: u64 = 0x4040_ae79;
|
||||
pub const KVM_SET_VCPU_EVENTS: u64 = 0x4040_aea0;
|
||||
@@ -252,6 +255,14 @@ fn create_vmm_ioctl_seccomp_rule_common_kvm() -> Result<Vec<SeccompRule>, Backen
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_ONE_REG)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_REGS)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_USER_MEMORY_REGION,)?],
|
||||
and![Cond::new(
|
||||
1,
|
||||
ArgLen::Dword,
|
||||
Eq,
|
||||
KVM_SET_USER_MEMORY_REGION2,
|
||||
)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_MEMORY_ATTRIBUTES,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_CREATE_GUEST_MEMFD,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_VCPU_EVENTS,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_NMI)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_GET_NESTED_STATE)?],
|
||||
@@ -750,6 +761,14 @@ fn create_vcpu_ioctl_seccomp_rule_kvm() -> Result<Vec<SeccompRule>, BackendError
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_DEVICE_ATTR,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_GSI_ROUTING,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_USER_MEMORY_REGION,)?],
|
||||
and![Cond::new(
|
||||
1,
|
||||
ArgLen::Dword,
|
||||
Eq,
|
||||
KVM_SET_USER_MEMORY_REGION2,
|
||||
)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_CREATE_GUEST_MEMFD,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_SET_MEMORY_ATTRIBUTES,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_RUN,)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_NMI)?],
|
||||
and![Cond::new(1, ArgLen::Dword, Eq, KVM_GET_NESTED_STATE)?],
|
||||
|
||||
Reference in New Issue
Block a user