| From: Jiri Kosina <jkosina@suse.cz> |
| Date: Tue, 2 Jan 2018 14:19:49 +0100 |
| Subject: 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> |
| --- |
| arch/x86/mm/kaiser.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- 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_disabl |
| 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); |
| } |