aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch')
-rw-r--r--recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch35
1 files changed, 35 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch b/recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
new file mode 100644
index 0000000000..dd2c9b32be
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
@@ -0,0 +1,35 @@
+From 649497d1a3676020802ebba04a3d9bb31253adb5 Mon Sep 17 00:00:00 2001
+From: Avi Kivity <avi@redhat.com>
+Date: Tue, 28 Dec 2010 12:09:07 +0200
+Subject: [PATCH 26/66] KVM: MMU: Fix incorrect direct gfn for unpaged mode shadow
+
+We use the physical address instead of the base gfn for the four
+PAE page directories we use in unpaged mode. When the guest accesses
+an address above 1GB that is backed by a large host page, a BUG_ON()
+in kvm_mmu_set_gfn() triggers.
+
+Resolves: https://bugzilla.kernel.org/show_bug.cgi?id=21962
+Reported-and-tested-by: Nicolas Prochazka <prochazka.nicolas@gmail.com>
+KVM-Stable-Tag.
+Signed-off-by: Avi Kivity <avi@redhat.com>
+---
+ arch/x86/kvm/mmu.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
+index fb8b376..fbb04ae 100644
+--- a/arch/x86/kvm/mmu.c
++++ b/arch/x86/kvm/mmu.c
+@@ -2394,7 +2394,8 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu)
+ ASSERT(!VALID_PAGE(root));
+ spin_lock(&vcpu->kvm->mmu_lock);
+ kvm_mmu_free_some_pages(vcpu);
+- sp = kvm_mmu_get_page(vcpu, i << 30, i << 30,
++ sp = kvm_mmu_get_page(vcpu, i << (30 - PAGE_SHIFT),
++ i << 30,
+ PT32_ROOT_LEVEL, 1, ACC_ALL,
+ NULL);
+ root = __pa(sp->spt);
+--
+1.6.6.1
+