diff options
author | Avi Kivity <avi@qumranet.com> | 2007-12-09 10:00:02 -0500 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-01-30 10:53:20 -0500 |
commit | 41074d07c78b086b18fc2af590caef05dbcca568 (patch) | |
tree | 1e07a3d17d718d61bbb45e427c7e7980f2b7ad2e /drivers/kvm/mmu.c | |
parent | bedbe4ee86195dcd899577828714cc1413beb571 (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.c | 4 |
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; |