diff options
author | Sheng Yang <sheng@linux.intel.com> | 2008-10-16 05:30:57 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2008-12-31 09:51:45 -0500 |
commit | 291f26bc0f89518ad7ee3207c09eb8a743ac8fcc (patch) | |
tree | d0ce8ff4d0a4b88b656db0f559a00c5b25738ed2 /arch/x86/kvm | |
parent | d73fa29a9b75b2af7f69dae276d2c602a23b329b (diff) |
KVM: MMU: Extend kvm_mmu_page->slot_bitmap size
Otherwise set_bit() for private memory slot(above KVM_MEMORY_SLOTS) would
corrupted memory in 32bit host.
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/mmu.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 09d05f57bf66..8687758b5295 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -789,7 +789,7 @@ static struct kvm_mmu_page *kvm_mmu_alloc_page(struct kvm_vcpu *vcpu, | |||
789 | set_page_private(virt_to_page(sp->spt), (unsigned long)sp); | 789 | set_page_private(virt_to_page(sp->spt), (unsigned long)sp); |
790 | list_add(&sp->link, &vcpu->kvm->arch.active_mmu_pages); | 790 | list_add(&sp->link, &vcpu->kvm->arch.active_mmu_pages); |
791 | ASSERT(is_empty_shadow_page(sp->spt)); | 791 | ASSERT(is_empty_shadow_page(sp->spt)); |
792 | sp->slot_bitmap = 0; | 792 | bitmap_zero(sp->slot_bitmap, KVM_MEMORY_SLOTS + KVM_PRIVATE_MEM_SLOTS); |
793 | sp->multimapped = 0; | 793 | sp->multimapped = 0; |
794 | sp->parent_pte = parent_pte; | 794 | sp->parent_pte = parent_pte; |
795 | --vcpu->kvm->arch.n_free_mmu_pages; | 795 | --vcpu->kvm->arch.n_free_mmu_pages; |
@@ -1364,7 +1364,7 @@ static void page_header_update_slot(struct kvm *kvm, void *pte, gfn_t gfn) | |||
1364 | int slot = memslot_id(kvm, gfn_to_memslot(kvm, gfn)); | 1364 | int slot = memslot_id(kvm, gfn_to_memslot(kvm, gfn)); |
1365 | struct kvm_mmu_page *sp = page_header(__pa(pte)); | 1365 | struct kvm_mmu_page *sp = page_header(__pa(pte)); |
1366 | 1366 | ||
1367 | __set_bit(slot, &sp->slot_bitmap); | 1367 | __set_bit(slot, sp->slot_bitmap); |
1368 | } | 1368 | } |
1369 | 1369 | ||
1370 | static void mmu_convert_notrap(struct kvm_mmu_page *sp) | 1370 | static void mmu_convert_notrap(struct kvm_mmu_page *sp) |
@@ -2564,7 +2564,7 @@ void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot) | |||
2564 | int i; | 2564 | int i; |
2565 | u64 *pt; | 2565 | u64 *pt; |
2566 | 2566 | ||
2567 | if (!test_bit(slot, &sp->slot_bitmap)) | 2567 | if (!test_bit(slot, sp->slot_bitmap)) |
2568 | continue; | 2568 | continue; |
2569 | 2569 | ||
2570 | pt = sp->spt; | 2570 | pt = sp->spt; |