Skip to content

Commit

Permalink
KVM: MMU: Fix oops on guest userspace access to guest pagetable
Browse files Browse the repository at this point in the history
KVM has a heuristic to unshadow guest pagetables when userspace accesses
them, on the assumption that most guests do not allow userspace to access
pagetables directly. Unfortunately, in addition to unshadowing the pagetables,
it also oopses.

This never triggers on ordinary guests since sane OSes will clear the
pagetables before assigning them to userspace, which will trigger the flood
heuristic, unshadowing the pagetables before the first userspace access. One
particular guest, though (Xenner) will run the kernel in userspace, triggering
the oops.  Since the heuristic is incorrect in this case, we can simply
remove it.

Signed-off-by: Avi Kivity <avi@qumranet.com>
  • Loading branch information
avikivity committed Jun 24, 2008
1 parent 3094538 commit 6bf6a95
Showing 1 changed file with 0 additions and 6 deletions.
6 changes: 0 additions & 6 deletions arch/x86/kvm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1083,10 +1083,6 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
struct kvm_mmu_page *shadow;

spte |= PT_WRITABLE_MASK;
if (user_fault) {
mmu_unshadow(vcpu->kvm, gfn);
goto unshadowed;
}

shadow = kvm_mmu_lookup_page(vcpu->kvm, gfn);
if (shadow ||
Expand All @@ -1103,8 +1099,6 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
}
}

unshadowed:

if (pte_access & ACC_WRITE_MASK)
mark_page_dirty(vcpu->kvm, gfn);

Expand Down

0 comments on commit 6bf6a95

Please sign in to comment.