Home Home > GIT Browse > SLE12-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Gross <jgross@suse.com>2017-12-11 11:42:40 +0100
committerJuergen Gross <jgross@suse.com>2017-12-11 11:42:56 +0100
commit282057348474897897f4a8907096fd4d96cec740 (patch)
tree05b733f2455f43af4f0473adb975c140c68170fc
parentff08450c47a26f8b351c7e64345b462f12f26415 (diff)
xen: fix hvm guest with kaslr enabled (bnc#1071891).
-rw-r--r--patches.fixes/xen-fix-hvm-guest-with-kaslr-enabled.patch81
-rw-r--r--series.conf1
2 files changed, 82 insertions, 0 deletions
diff --git a/patches.fixes/xen-fix-hvm-guest-with-kaslr-enabled.patch b/patches.fixes/xen-fix-hvm-guest-with-kaslr-enabled.patch
new file mode 100644
index 0000000000..89577c8843
--- /dev/null
+++ b/patches.fixes/xen-fix-hvm-guest-with-kaslr-enabled.patch
@@ -0,0 +1,81 @@
+From: Juergen Gross <jgross@suse.com>
+Date: Fri, 28 Jul 2017 12:23:14 +0200
+Git-commit: 4ca83dcf4e3bc0c98836dbb97553792ca7ea5429
+Patch-mainline: v4.13
+References: bnc#1071891
+Subject: xen: fix hvm guest with kaslr enabled
+
+A Xen HVM guest running with KASLR enabled will die rather soon today
+because the shared info page mapping is using va() too early. This was
+introduced by commit a5d5f328b0e2baa5ee7c119fd66324eb79eeeb66 ("xen:
+allocate page for shared info page from low memory").
+
+In order to fix this use early_memremap() to get a temporary virtual
+address for shared info until va() can be used safely.
+
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Acked-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Juergen Gross <jgross@suse.com>
+---
+ arch/x86/xen/enlighten_hvm.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
+index d23531f..de503c2 100644
+--- a/arch/x86/xen/enlighten_hvm.c
++++ b/arch/x86/xen/enlighten_hvm.c
+@@ -12,6 +12,7 @@
+ #include <asm/setup.h>
+ #include <asm/hypervisor.h>
+ #include <asm/e820/api.h>
++#include <asm/early_ioremap.h>
+
+ #include <asm/xen/cpuid.h>
+ #include <asm/xen/hypervisor.h>
+@@ -21,6 +22,8 @@
+ #include "mmu.h"
+ #include "smp.h"
+
++static unsigned long shared_info_pfn;
++
+ void xen_hvm_init_shared_info(void)
+ {
+ int cpu;
+@@ -28,7 +31,7 @@ void xen_hvm_init_shared_info(void)
+ xatp.domid = DOMID_SELF;
+ xatp.idx = 0;
+ xatp.space = XENMAPSPACE_shared_info;
+- xatp.gpfn = virt_to_pfn(HYPERVISOR_shared_info);
++ xatp.gpfn = shared_info_pfn;
+ if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
+ BUG();
+
+@@ -51,8 +54,16 @@ static void __init reserve_shared_info(void)
+ pa += PAGE_SIZE)
+ ;
+
++ shared_info_pfn = PHYS_PFN(pa);
++
+ memblock_reserve(pa, PAGE_SIZE);
+- HYPERVISOR_shared_info = __va(pa);
++ HYPERVISOR_shared_info = early_memremap(pa, PAGE_SIZE);
++}
++
++static void __init xen_hvm_init_mem_mapping(void)
++{
++ early_memunmap(HYPERVISOR_shared_info, PAGE_SIZE);
++ HYPERVISOR_shared_info = __va(PFN_PHYS(shared_info_pfn));
+ }
+
+ static void __init init_hvm_pv_info(void)
+@@ -221,5 +232,6 @@ const struct hypervisor_x86 x86_hyper_xen_hvm = {
+ .init_platform = xen_hvm_guest_init,
+ .pin_vcpu = xen_pin_vcpu,
+ .x2apic_available = xen_x2apic_para_available,
++ .init_mem_mapping = xen_hvm_init_mem_mapping,
+ };
+ EXPORT_SYMBOL(x86_hyper_xen_hvm);
+--
+cgit v1.1
+
diff --git a/series.conf b/series.conf
index 9e27488e26..6ef3c360d8 100644
--- a/series.conf
+++ b/series.conf
@@ -6791,6 +6791,7 @@
patches.fixes/xen-x86-mark-xen_find_pt_base-as-init.patch
patches.fixes/xen-x86-provide-init_mem_mapping-hook.patch
patches.fixes/xen-split-up-xen_hvm_init_shared_info.patch
+ patches.fixes/xen-fix-hvm-guest-with-kaslr-enabled.patch
patches.drivers/0001-usb-Add-Xen-pvUSB-protocol-description.patch
patches.drivers/0002-usb-Introduce-Xen-pvUSB-frontend-xen-hcd.patch