From 298eaa36435de8cf24cf00cc820195b2a67d6453 Mon Sep 17 00:00:00 2001 From: hky1999 <976929993@qq.com> Date: Thu, 4 Dec 2025 16:29:18 +0800 Subject: [PATCH] [feat] expose invalid_ept api --- src/lib.rs | 1 + src/vmx/mod.rs | 2 ++ src/vmx/vcpu.rs | 8 ++++++++ 3 files changed, 11 insertions(+) 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 a6cb6cc..f7bf628 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())?; @@ -1635,3 +1638,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) } +}