diff --git a/nel_os_kernel/src/vmm/x86_64/intel/vcpu.rs b/nel_os_kernel/src/vmm/x86_64/intel/vcpu.rs index e9dc63f..fcd12ba 100644 --- a/nel_os_kernel/src/vmm/x86_64/intel/vcpu.rs +++ b/nel_os_kernel/src/vmm/x86_64/intel/vcpu.rs @@ -13,6 +13,7 @@ use crate::{ intel::{ auditor, controls, cpuid, ept, msr::{self, ShadowMsr}, + qual::QualCr, register::GuestRegisters, vmcs::{ self, @@ -77,7 +78,6 @@ impl IntelVCpu { self.step_next_inst()?; } VmxExitReason::CPUID => { - info!("VM exit reason: CPUID"); cpuid::handle_cpuid_vmexit(self); self.step_next_inst()?; } @@ -89,6 +89,14 @@ impl IntelVCpu { msr::ShadowMsr::handle_wrmsr_vmexit(self); self.step_next_inst()?; } + VmxExitReason::CONTROL_REGISTER_ACCESSES => { + let qual = vmread(vmcs::ro::EXIT_QUALIFICATION)?; + let qual = QualCr::from(qual); + + super::cr::handle_cr_access(self, &qual)?; + + self.step_next_inst()?; + } VmxExitReason::EPT_VIOLATION => { let guest_address = vmread(vmcs::ro::GUEST_PHYSICAL_ADDR_FULL)?; info!("EPT Violation at guest address: {:#x}", guest_address);