| From 36268223c1e9981d6cfc33aff8520b3bde4b8114 Mon Sep 17 00:00:00 2001 |
| From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| Date: Mon, 26 Feb 2018 09:35:01 -0500 |
| Subject: x86/spectre_v2: Don't check microcode versions when running under hypervisors |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| |
| commit 36268223c1e9981d6cfc33aff8520b3bde4b8114 upstream. |
| |
| As: |
| |
| 1) It's known that hypervisors lie about the environment anyhow (host |
| mismatch) |
| |
| 2) Even if the hypervisor (Xen, KVM, VMWare, etc) provided a valid |
| "correct" value, it all gets to be very murky when migration happens |
| (do you provide the "new" microcode of the machine?). |
| |
| And in reality the cloud vendors are the ones that should make sure that |
| the microcode that is running is correct and we should just sing lalalala |
| and trust them. |
| |
| Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> |
| Cc: Wanpeng Li <kernellwp@gmail.com> |
| Cc: kvm <kvm@vger.kernel.org> |
| Cc: Krčmář <rkrcmar@redhat.com> |
| Cc: Borislav Petkov <bp@alien8.de> |
| CC: "H. Peter Anvin" <hpa@zytor.com> |
| CC: stable@vger.kernel.org |
| Link: https://lkml.kernel.org/r/20180226213019.GE9497@char.us.oracle.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/cpu/intel.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/arch/x86/kernel/cpu/intel.c |
| +++ b/arch/x86/kernel/cpu/intel.c |
| @@ -144,6 +144,13 @@ static bool bad_spectre_microcode(struct |
| { |
| int i; |
| |
| + /* |
| + * We know that the hypervisor lie to us on the microcode version so |
| + * we may as well hope that it is running the correct version. |
| + */ |
| + if (cpu_has(c, X86_FEATURE_HYPERVISOR)) |
| + return false; |
| + |
| for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) { |
| if (c->x86_model == spectre_bad_microcodes[i].model && |
| c->x86_stepping == spectre_bad_microcodes[i].stepping) |