| From: Jim Mattson <jmattson@google.com> |
| Date: Fri, 13 Dec 2019 16:15:15 -0800 |
| Subject: kvm: x86: Host feature SSBD doesn't imply guest feature |
| SPEC_CTRL_SSBD |
| |
| commit 396d2e878f92ec108e4293f1c77ea3bc90b414ff upstream. |
| |
| The host reports support for the synthetic feature X86_FEATURE_SSBD |
| when any of the three following hardware features are set: |
| CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31] |
| CPUID.80000008H:EBX.AMD_SSBD[bit 24] |
| CPUID.80000008H:EBX.VIRT_SSBD[bit 25] |
| |
| Either of the first two hardware features implies the existence of the |
| IA32_SPEC_CTRL MSR, but CPUID.80000008H:EBX.VIRT_SSBD[bit 25] does |
| not. Therefore, CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31] should only be |
| set in the guest if CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31] or |
| CPUID.80000008H:EBX.AMD_SSBD[bit 24] is set on the host. |
| |
| Fixes: 0c54914d0c52a ("KVM: x86: use Intel speculation bugs and features as derived in generic x86 code") |
| Signed-off-by: Jim Mattson <jmattson@google.com> |
| Reviewed-by: Jacob Xu <jacobhxu@google.com> |
| Reviewed-by: Peter Shier <pshier@google.com> |
| Cc: Paolo Bonzini <pbonzini@redhat.com> |
| Reported-by: Eric Biggers <ebiggers@kernel.org> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| [bwh: Backported to 3.16: adjust indentation] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/x86/kvm/cpuid.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/arch/x86/kvm/cpuid.c |
| +++ b/arch/x86/kvm/cpuid.c |
| @@ -400,7 +400,8 @@ static inline int __do_cpuid_ent(struct |
| entry->edx |= F(SPEC_CTRL); |
| if (boot_cpu_has(X86_FEATURE_STIBP)) |
| entry->edx |= F(INTEL_STIBP); |
| - if (boot_cpu_has(X86_FEATURE_SSBD)) |
| + if (boot_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) || |
| + boot_cpu_has(X86_FEATURE_AMD_SSBD)) |
| entry->edx |= F(SPEC_CTRL_SSBD); |
| /* |
| * We emulate ARCH_CAPABILITIES in software even |