KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko
PATCH 2/2 KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko
From bcbe1b5c4c6098f122accba4f00f6617baf807f7 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Wed, 16 Jul 2008 09:25:40 +0800
Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko
As well as move set base/mask ptes to vmx_init().
--- arch/x86/kvm/vmx.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-)
arch/x86/kvm/vmx.c +0 -0
@@ -3108,15 +3108,6 @@ static struct kvm_vcpu *vmx_create_vcpu(struct
kvm *kvm, unsigned int id)
return ERR_PTR(-ENOMEM);
allocate_vpid(vmx);
- if (id == 0 && vm_need_ept()) {
- kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK |
- VMX_EPT_WRITABLE_MASK |
- VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT);
- kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK,
- VMX_EPT_FAKE_DIRTY_MASK, 0ull,
- VMX_EPT_EXECUTABLE_MASK);
- kvm_enable_tdp();
- }
err = kvm_vcpu_init(&vmx->vcpu, kvm, id); if (err)
@@ -3294,8 +3285,17 @@ static int __init vmx_init(void)
vmx_disable_intercept_for_msr(vmx_msr_bitmap,MSR_IA32_SYSENTER_ESP);
vmx_disable_intercept_for_msr(vmx_msr_bitmap,MSR_IA32_SYSENTER_EIP);
- if (vm_need_ept())
+ if (vm_need_ept()) {
bypass_guest_pf = 0;
+ kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK |
+ VMX_EPT_WRITABLE_MASK |
+ VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT);
+ kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK,
+ VMX_EPT_FAKE_DIRTY_MASK, 0ull,
+ VMX_EPT_EXECUTABLE_MASK);
+ kvm_enable_tdp();
+ } else
+ kvm_disable_tdp();
if (bypass_guest_pf)
kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull);
--
1.5.6
From bcbe1b5c4c6098f122accba4f00f6617baf807f7 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Wed, 16 Jul 2008 09:25:40 +0800
Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko
As well as move set base/mask ptes to vmx_init().
--- arch/x86/kvm/vmx.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-)
arch/x86/kvm/vmx.c +10 -10
@@ -3108,15 +3108,6 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)return ERR_PTR (-ENOMEM );allocate_vpid (vmx); -if (id ==0 &&vm_need_ept ()) { -kvm_mmu_set_base_ptes (VMX_EPT_READABLE_MASK | -VMX_EPT_WRITABLE_MASK | -VMX_EPT_DEFAULT_MT <<VMX_EPT_MT_EPTE_SHIFT ); -kvm_mmu_set_mask_ptes (0ull ,VMX_EPT_FAKE_ACCESSED_MASK , -VMX_EPT_FAKE_DIRTY_MASK ,0ull , -VMX_EPT_EXECUTABLE_MASK ); -kvm_enable_tdp (); - } err =kvm_vcpu_init (&vmx->vcpu, kvm, id);if (err)
@@ -3294,8 +3285,17 @@ static int __init vmx_init(void)vmx_disable_intercept_for_msr (vmx_msr_bitmap,MSR_IA32_SYSENTER_ESP );vmx_disable_intercept_for_msr (vmx_msr_bitmap,MSR_IA32_SYSENTER_EIP ); -if (vm_need_ept ()) +if (vm_need_ept ()) { bypass_guest_pf =0 ; +kvm_mmu_set_base_ptes (VMX_EPT_READABLE_MASK | +VMX_EPT_WRITABLE_MASK | +VMX_EPT_DEFAULT_MT <<VMX_EPT_MT_EPTE_SHIFT ); +kvm_mmu_set_mask_ptes (0ull ,VMX_EPT_FAKE_ACCESSED_MASK , +VMX_EPT_FAKE_DIRTY_MASK ,0ull , +VMX_EPT_EXECUTABLE_MASK ); +kvm_enable_tdp (); + }else +kvm_disable_tdp ();if (bypass_guest_pf)kvm_mmu_set_nonpresent_ptes (~0xffeull ,0ull );
Signature · 1 line
1.5.6