diff --git a/Cargo.lock b/Cargo.lock index 29eb868af..9f64916f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1494,7 +1494,7 @@ dependencies = [ "tracing-subscriber", "tracing-tracy", "uuid", - "vmm-sys-util", + "vmm-sys-util 0.15.0", "windows", "windows-result", "windows-sys 0.60.2", @@ -1787,7 +1787,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf3432d9f609fbede9f624d1dbefcce77985a9322de1d0e6d460ec05502b7fd0" dependencies = [ - "vmm-sys-util", + "vmm-sys-util 0.14.0", ] [[package]] @@ -1799,7 +1799,7 @@ dependencies = [ "bitflags 2.9.1", "kvm-bindings", "libc", - "vmm-sys-util", + "vmm-sys-util 0.14.0", ] [[package]] @@ -2055,7 +2055,7 @@ checksum = "f416b4432174e5a3f956a7887f4c1a4acea9511d81def67fcb8473293630ab9e" dependencies = [ "libc", "num_enum", - "vmm-sys-util", + "vmm-sys-util 0.14.0", "zerocopy 0.7.35", ] @@ -2067,7 +2067,7 @@ checksum = "1e0cb5031f3243a7459b7c13d960d25420980874eebda816db24ce6077e21d43" dependencies = [ "libc", "num_enum", - "vmm-sys-util", + "vmm-sys-util 0.14.0", "zerocopy 0.8.26", ] @@ -2080,7 +2080,7 @@ dependencies = [ "libc", "mshv-bindings 0.2.1", "thiserror 1.0.69", - "vmm-sys-util", + "vmm-sys-util 0.14.0", ] [[package]] @@ -2092,7 +2092,7 @@ dependencies = [ "libc", "mshv-bindings 0.3.2", "thiserror 2.0.12", - "vmm-sys-util", + "vmm-sys-util 0.14.0", ] [[package]] @@ -3919,6 +3919,16 @@ dependencies = [ "libc", ] +[[package]] +name = "vmm-sys-util" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "506c62fdf617a5176827c2f9afbcf1be155b03a9b4bf9617a60dbc07e3a1642f" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "wait-timeout" version = "0.2.1" diff --git a/src/hyperlight_host/Cargo.toml b/src/hyperlight_host/Cargo.toml index 5408b83fe..0a40161c1 100644 --- a/src/hyperlight_host/Cargo.toml +++ b/src/hyperlight_host/Cargo.toml @@ -40,7 +40,7 @@ tracing-log = "0.2.0" tracing-core = "0.1.34" hyperlight-common = { workspace = true, default-features = true, features = [ "std" ] } hyperlight-guest-tracing = { workspace = true, default-features = true, optional = true } -vmm-sys-util = "0.14.0" +vmm-sys-util = "0.15.0" crossbeam-channel = "0.5.15" thiserror = "2.0.12" chrono = { version = "0.4", optional = true } diff --git a/src/hyperlight_host/src/error.rs b/src/hyperlight_host/src/error.rs index 951066c53..c07f9857f 100644 --- a/src/hyperlight_host/src/error.rs +++ b/src/hyperlight_host/src/error.rs @@ -138,6 +138,11 @@ pub enum HyperlightError { #[error("Conversion of str data to json failed")] JsonConversionFailure(#[from] serde_json::Error), + /// KVM Error Occurred + #[error("KVM Error {0:?}")] + #[cfg(kvm)] + KVMError(#[from] kvm_ioctls::Error), + /// An attempt to get a lock from a Mutex failed. #[error("Unable to lock resource")] LockAttemptFailed(String), diff --git a/src/hyperlight_host/src/hypervisor/hyperv_linux.rs b/src/hyperlight_host/src/hypervisor/hyperv_linux.rs index 0f8a68521..cc7528610 100644 --- a/src/hyperlight_host/src/hypervisor/hyperv_linux.rs +++ b/src/hyperlight_host/src/hypervisor/hyperv_linux.rs @@ -53,7 +53,7 @@ use mshv_bindings::{ hv_register_name, hv_register_name_HV_X64_REGISTER_RAX, hv_register_name_HV_X64_REGISTER_RBP, hv_register_name_HV_X64_REGISTER_RCX, hv_register_name_HV_X64_REGISTER_RSP, }; -use mshv_ioctls::{Mshv, MshvError, VcpuFd, VmFd}; +use mshv_ioctls::{Mshv, VcpuFd, VmFd}; use tracing::{Span, instrument}; #[cfg(crashdump)] use {super::crashdump, std::path::Path}; @@ -794,9 +794,7 @@ impl Hypervisor for HypervLinuxDriver { .load(Ordering::Relaxed) || debug_interrupt { - Err(MshvError::Errno(vmm_sys_util::errno::Error::new( - libc::EINTR, - ))) + Err(mshv_ioctls::MshvError::from(libc::EINTR)) } else { #[cfg(feature = "trace_guest")] if self.trace_info.guest_start_epoch.is_none() { @@ -847,7 +845,7 @@ impl Hypervisor for HypervLinuxDriver { HyperlightExit::Halt() } IO_PORT_INTERCEPT_MESSAGE => { - let io_message = m.to_ioport_info()?; + let io_message = m.to_ioport_info().map_err(mshv_ioctls::MshvError::from)?; let port_number = io_message.port_number; let rip = io_message.header.rip; let rax = io_message.rax; @@ -861,7 +859,7 @@ impl Hypervisor for HypervLinuxDriver { ) } UNMAPPED_GPA_MESSAGE => { - let mimo_message = m.to_memory_info()?; + let mimo_message = m.to_memory_info().map_err(mshv_ioctls::MshvError::from)?; let addr = mimo_message.guest_physical_address; crate::debug!( "mshv MMIO unmapped GPA -Details: Address: {} \n {:#?}", @@ -871,7 +869,7 @@ impl Hypervisor for HypervLinuxDriver { HyperlightExit::Mmio(addr) } INVALID_GPA_ACCESS_MESSAGE => { - let mimo_message = m.to_memory_info()?; + let mimo_message = m.to_memory_info().map_err(mshv_ioctls::MshvError::from)?; let gpa = mimo_message.guest_physical_address; let access_info = MemoryRegionFlags::try_from(mimo_message)?; crate::debug!( @@ -896,7 +894,8 @@ impl Hypervisor for HypervLinuxDriver { EXCEPTION_INTERCEPT => { // Extract exception info from the message so we can figure out // more information about the vCPU state - let ex_info = match m.to_exception_info() { + let ex_info = match m.to_exception_info().map_err(mshv_ioctls::MshvError::from) + { Ok(info) => info, Err(e) => { log_then_return!("Error converting to exception info: {:?}", e);