]> git.hungrycats.org Git - linux/commitdiff
kaiser: disabled on Xen PV
authorJiri Kosina <jkosina@suse.cz>
Tue, 2 Jan 2018 13:19:49 +0000 (14:19 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 7 Jan 2018 01:46:53 +0000 (01:46 +0000)
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>
arch/x86/mm/kaiser.c

index 1e1bed668848947d91f8f866b645f98c61358e38..840e8b896518e2bd79f7c34d5216594ef607e966 100644 (file)
@@ -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);
 }