FAILED: patch "[PATCH] kvm: x86: Use KVM CPU capabilities to determine CR4 reserved" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 139f7425fdf54f054463e7524b9f54c41af8407f Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Tue, 5 May 2020 09:40:46 -0400
Subject: [PATCH] kvm: x86: Use KVM CPU capabilities to determine CR4 reserved
bits
Using CPUID data can be useful for the processor compatibility check, but that's it. Using it to compute guest-reserved bits can have both false positives (such as LA57 and UMIP which we are already handling) and false negatives: in particular, with this patch we don't allow anymore a KVM guest to set CR4.PKE when CR4.PKE is clear on the host.
arch/x86/kvm/x86.c +5 -15
@@ -926,19 +926,6 @@ EXPORT_SYMBOL_GPL(kvm_set_xcr); __reserved_bits; \ }) -static u64 kvm_host_cr4_reserved_bits (struct cpuinfo_x86 *c) -{ -u64 reserved_bits =__cr4_reserved_bits (cpu_has, c); - -if (kvm_cpu_cap_has (X86_FEATURE_LA57 )) - reserved_bits &= ~X86_CR4_LA57 ; - -if (kvm_cpu_cap_has (X86_FEATURE_UMIP )) - reserved_bits &= ~X86_CR4_UMIP ; - -return reserved_bits; -} -static int kvm_valid_cr4 (struct kvm_vcpu *vcpu,unsigned long cr4) {if (cr4 & cr4_reserved_bits)
@@ -9675,7 +9662,9 @@ int kvm_arch_hardware_setup(void *opaque)if (!kvm_cpu_cap_has (X86_FEATURE_XSAVES )) supported_xss =0 ; - cr4_reserved_bits =kvm_host_cr4_reserved_bits (&boot_cpu_data); +#define __kvm_cpu_cap_has (UNUSED_ , f) kvm_cpu_cap_has(f) + cr4_reserved_bits =__cr4_reserved_bits (__kvm_cpu_cap_has,UNUSED_ ); +#undef __kvm_cpu_cap_hasif (kvm_has_tsc_control) {/*
@@ -9707,7 +9696,8 @@ int kvm_arch_check_processor_compat(void *opaque)WARN_ON (!irqs_disabled ()); -if (kvm_host_cr4_reserved_bits (c) != cr4_reserved_bits) +if (__cr4_reserved_bits (cpu_has, c) != +__cr4_reserved_bits (cpu_has, &boot_cpu_data))return -EIO ;return ops->check_processor_compatibility ();