dd2c9b32bea8972590656f73e682fa9fbceea703
[openembedded.git] /
1 From 649497d1a3676020802ebba04a3d9bb31253adb5 Mon Sep 17 00:00:00 2001
2 From: Avi Kivity <avi@redhat.com>
3 Date: Tue, 28 Dec 2010 12:09:07 +0200
4 Subject: [PATCH 26/66] KVM: MMU: Fix incorrect direct gfn for unpaged mode shadow
5
6 We use the physical address instead of the base gfn for the four
7 PAE page directories we use in unpaged mode.  When the guest accesses
8 an address above 1GB that is backed by a large host page, a BUG_ON()
9 in kvm_mmu_set_gfn() triggers.
10
11 Resolves: https://bugzilla.kernel.org/show_bug.cgi?id=21962
12 Reported-and-tested-by: Nicolas Prochazka <prochazka.nicolas@gmail.com>
13 KVM-Stable-Tag.
14 Signed-off-by: Avi Kivity <avi@redhat.com>
15 ---
16  arch/x86/kvm/mmu.c |    3 ++-
17  1 files changed, 2 insertions(+), 1 deletions(-)
18
19 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
20 index fb8b376..fbb04ae 100644
21 --- a/arch/x86/kvm/mmu.c
22 +++ b/arch/x86/kvm/mmu.c
23 @@ -2394,7 +2394,8 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu)
24                         ASSERT(!VALID_PAGE(root));
25                         spin_lock(&vcpu->kvm->mmu_lock);
26                         kvm_mmu_free_some_pages(vcpu);
27 -                       sp = kvm_mmu_get_page(vcpu, i << 30, i << 30,
28 +                       sp = kvm_mmu_get_page(vcpu, i << (30 - PAGE_SHIFT),
29 +                                             i << 30,
30                                               PT32_ROOT_LEVEL, 1, ACC_ALL,
31                                               NULL);
32                         root = __pa(sp->spt);
33 -- 
34 1.6.6.1
35