diff --git a/src/lib.rs b/src/lib.rs index d7f9945..758e641 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,7 @@ cfg_if::cfg_if! { mod vmx; use vmx as vender; pub use vmx::{VmxExitInfo, VmxExitReason, VmxInterruptInfo, VmxIoExitInfo}; + pub use vmx::invalid_ept; pub use vender::VmxArchVCpu; pub use vender::VmxArchPerCpuState; diff --git a/src/vmx/mod.rs b/src/vmx/mod.rs index 9fb40b7..87a0068 100644 --- a/src/vmx/mod.rs +++ b/src/vmx/mod.rs @@ -13,6 +13,8 @@ pub use self::percpu::VmxPerCpuState as VmxArchPerCpuState; pub use self::vcpu::VmxVcpu as VmxArchVCpu; pub use self::vmcs::{VmxExitInfo, VmxInterruptInfo, VmxIoExitInfo}; +pub use self::vcpu::invalid_ept; + /// Return if current platform support virtualization extension. pub fn has_hardware_support() -> bool { if let Some(feature) = raw_cpuid::CpuId::new().get_feature_info() { diff --git a/src/vmx/vcpu.rs b/src/vmx/vcpu.rs index 8d56c19..054c110 100644 --- a/src/vmx/vcpu.rs +++ b/src/vmx/vcpu.rs @@ -482,6 +482,9 @@ impl VmxVcpu { } fn setup_vmcs_host(&self) -> AxResult { + // warn!("Host IA32_PAT {:#x}", Msr::IA32_PAT.read()); + // warn!("Host IA32_EFER {:#x}", Msr::IA32_EFER.read()); + VmcsHost64::IA32_PAT.write(Msr::IA32_PAT.read())?; VmcsHost64::IA32_EFER.write(Msr::IA32_EFER.read())?; @@ -1647,3 +1650,8 @@ impl AxVcpuAccessGuestState for VmxVcpu { warn!("Dumping VmxVcpu {:#x?}", self); } } + +pub fn invalid_ept(eptp: EPTPointer) -> AxResult<()> { + use super::instructions::{InvEptType, invept}; + unsafe { invept(InvEptType::SingleContext, eptp.bits()).map_err(as_axerr) } +}