aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/mmu.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2007-12-09 10:00:02 -0500
committerAvi Kivity <avi@qumranet.com>2008-01-30 10:53:20 -0500
commit41074d07c78b086b18fc2af590caef05dbcca568 (patch)
tree1e07a3d17d718d61bbb45e427c7e7980f2b7ad2e /drivers/kvm/mmu.c
parentbedbe4ee86195dcd899577828714cc1413beb571 (diff)
KVM: MMU: Fix inherited permissions for emulated guest pte updates
When we emulate a guest pte write, we fail to apply the correct inherited permissions from the parent ptes. Now that we store inherited permissions in the shadow page, we can use that to update the pte permissions correctly. Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/mmu.c')
-rw-r--r--drivers/kvm/mmu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
index f8a2137c64a2..cace1e41b683 100644
--- a/drivers/kvm/mmu.c
+++ b/drivers/kvm/mmu.c
@@ -680,7 +680,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
680 gva_t gaddr, 680 gva_t gaddr,
681 unsigned level, 681 unsigned level,
682 int metaphysical, 682 int metaphysical,
683 unsigned hugepage_access, 683 unsigned access,
684 u64 *parent_pte) 684 u64 *parent_pte)
685{ 685{
686 union kvm_mmu_page_role role; 686 union kvm_mmu_page_role role;
@@ -694,7 +694,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
694 role.glevels = vcpu->mmu.root_level; 694 role.glevels = vcpu->mmu.root_level;
695 role.level = level; 695 role.level = level;
696 role.metaphysical = metaphysical; 696 role.metaphysical = metaphysical;
697 role.hugepage_access = hugepage_access; 697 role.access = access;
698 if (vcpu->mmu.root_level <= PT32_ROOT_LEVEL) { 698 if (vcpu->mmu.root_level <= PT32_ROOT_LEVEL) {
699 quadrant = gaddr >> (PAGE_SHIFT + (PT64_PT_BITS * level)); 699 quadrant = gaddr >> (PAGE_SHIFT + (PT64_PT_BITS * level));
700 quadrant &= (1 << ((PT32_PT_BITS - PT64_PT_BITS) * level)) - 1; 700 quadrant &= (1 << ((PT32_PT_BITS - PT64_PT_BITS) * level)) - 1;