# Commit fce79f8ce91dc45f3a4d699ee67c49e6cbeb1197 # Date 2014-04-01 16:49:18 +0200 # Author Jan Beulich # Committer Jan Beulich VMX: fix PAT value seen by guest The XSA-60 fixes introduced a window during which the guest PAT gets forced to all zeros. This shouldn't be visible to the guest. Therefore we need to intercept PAT MSR accesses during that time period. Signed-off-by: Jan Beulich Reviewed-by: Liu Jinsong --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -984,6 +984,8 @@ static void vmx_handle_cd(struct vcpu *v vmx_get_guest_pat(v, pat); vmx_set_guest_pat(v, uc_pat); + vmx_enable_intercept_for_msr(v, MSR_IA32_CR_PAT, + MSR_TYPE_R | MSR_TYPE_W); wbinvd(); /* flush possibly polluted cache */ hvm_asid_flush_vcpu(v); /* invalidate memory type cached in TLB */ @@ -993,6 +995,9 @@ static void vmx_handle_cd(struct vcpu *v { v->arch.hvm_vcpu.cache_mode = NORMAL_CACHE_MODE; vmx_set_guest_pat(v, *pat); + if ( !iommu_enabled || iommu_snoop ) + vmx_disable_intercept_for_msr(v, MSR_IA32_CR_PAT, + MSR_TYPE_R | MSR_TYPE_W); hvm_asid_flush_vcpu(v); /* no need to flush cache */ } }