summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2010-05-27 14:22:51 +0300
committerAvi Kivity <avi@redhat.com>2010-08-01 10:39:23 +0300
commit8184dd38e22fcaec664c2b98c382b85c26780e26 (patch)
treecf8c6dd4e1e2a2d04cb4d0dfee3b46b9c258937d
parent10ab25cd6bf7ee4e5a55d81f203f7dc1a855c27e (diff)
downloadlinux-stable-8184dd38e22fcaec664c2b98c382b85c26780e26.tar.gz
linux-stable-8184dd38e22fcaec664c2b98c382b85c26780e26.tar.bz2
linux-stable-8184dd38e22fcaec664c2b98c382b85c26780e26.zip
KVM: MMU: Allow spte.w=1 for gpte.w=0 and cr0.wp=0 only in shadow mode
When tdp is enabled, the guest's cr0.wp shouldn't have any effect on spte permissions. Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--arch/x86/kvm/mmu.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 9f4be0114bce..69d40a6e1e68 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -1882,7 +1882,8 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
spte |= (u64)pfn << PAGE_SHIFT;
if ((pte_access & ACC_WRITE_MASK)
- || (write_fault && !is_write_protection(vcpu) && !user_fault)) {
+ || (!tdp_enabled && write_fault && !is_write_protection(vcpu)
+ && !user_fault)) {
if (level > PT_PAGE_TABLE_LEVEL &&
has_wrprotected_page(vcpu->kvm, gfn, level)) {