summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2018-01-02 14:19:49 +0100
committerBen Hutchings <ben@decadent.org.uk>2018-01-07 01:46:53 +0000
commitab77eb13c3020f3e2c738dee83d1fc91919072e3 (patch)
tree47eac19bbcd2e1b0af69c12da6003f8277558d3e
parentbd99918270ac4c710ef2aede774a5647ad7e50e8 (diff)
downloadlinux-stable-ab77eb13c3020f3e2c738dee83d1fc91919072e3.tar.gz
linux-stable-ab77eb13c3020f3e2c738dee83d1fc91919072e3.tar.bz2
linux-stable-ab77eb13c3020f3e2c738dee83d1fc91919072e3.zip
kaiser: disabled on Xen PV
Kaiser cannot be used on paravirtualized MMUs (namely reading and writing CR3). This does not work with KAISER as the CR3 switch from and to user space PGD would require to map the whole XEN_PV machinery into both. More importantly, enabling KAISER on Xen PV doesn't make too much sense, as PV guests use distinct %cr3 values for kernel and user already. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> [bwh: Backported to 3.2: use xen_pv_domain()] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--arch/x86/mm/kaiser.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/mm/kaiser.c b/arch/x86/mm/kaiser.c
index 1e1bed668848..840e8b896518 100644
--- a/arch/x86/mm/kaiser.c
+++ b/arch/x86/mm/kaiser.c
@@ -11,6 +11,7 @@
#include <linux/module.h>
#include <linux/uaccess.h>
#include <linux/ftrace.h>
+#include <xen/xen.h>
extern struct mm_struct init_mm;
@@ -270,6 +271,9 @@ void __init kaiser_check_boottime_disable(void)
char arg[5];
int ret;
+ if (xen_pv_domain())
+ goto silent_disable;
+
ret = cmdline_find_option(boot_command_line, "pti", arg, sizeof(arg));
if (ret > 0) {
if (!strncmp(arg, "on", 2))
@@ -297,6 +301,8 @@ enable:
disable:
pr_info("Kernel/User page tables isolation: disabled\n");
+
+silent_disable:
kaiser_enabled = 0;
setup_clear_cpu_cap(X86_FEATURE_KAISER);
}