Skip to content

Commit 8b56864

Browse files
committed
vmm/linux/tee: Handle KVM_EXIT_MEMORY_FAULT exits
Like KVM_EXIT_HYPERCALL, KVM_EXIT_MEMORY_FAULT is used by SEV-SNP guests to set memory regions to private or shared. Allow vCPUs encountering a KVM_EXIT_MEMORY_FAULT to re-use the shared/private memory handler used by KVM_EXIT_HYPERCALL to set regions to private or shared. Signed-off-by: Matias Ezequiel Vara Larsen <[email protected]> Signed-off-by: Tyler Fanelli <[email protected]>
1 parent cb0a2f7 commit 8b56864

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/vmm/src/linux/vstate.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use kvm_bindings::{
4545
KVM_MEM_GUEST_MEMFD,
4646
};
4747
#[cfg(feature = "tee")]
48-
use kvm_bindings::{kvm_enable_cap, KVM_CAP_EXIT_HYPERCALL};
48+
use kvm_bindings::{kvm_enable_cap, KVM_CAP_EXIT_HYPERCALL, KVM_MEMORY_EXIT_FLAG_PRIVATE};
4949
use kvm_ioctls::{Cap::*, *};
5050
use utils::eventfd::EventFd;
5151
use utils::signal::{register_signal_handler, sigrtmin, Killable};
@@ -1246,6 +1246,17 @@ impl Vcpu {
12461246
self.io_bus.write(0, u64::from(addr), data);
12471247
Ok(VcpuEmulation::Handled)
12481248
}
1249+
#[cfg(feature = "tee")]
1250+
VcpuExit::MemoryFault { gpa, size, flags } => {
1251+
let private = (flags & (KVM_MEMORY_EXIT_FLAG_PRIVATE as u64)) != 0;
1252+
1253+
let mem_properties = MemoryProperties { gpa, size, private };
1254+
1255+
self.pm_sender.0.send(mem_properties).unwrap();
1256+
let _ = self.pm_sender.1.read().unwrap();
1257+
1258+
Ok(VcpuEmulation::Handled)
1259+
}
12491260
VcpuExit::MmioRead(addr, data) => {
12501261
if let Some(ref mmio_bus) = self.mmio_bus {
12511262
mmio_bus.read(0, addr, data);

0 commit comments

Comments
 (0)