]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/srso: Don't probe microcode in a guest
authorJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 5 Sep 2023 05:04:47 +0000 (22:04 -0700)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 19 Sep 2023 08:54:23 +0000 (10:54 +0200)
To support live migration, the hypervisor sets the "lowest common
denominator" of features.  Probing the microcode isn't allowed because
any detected features might go away after a migration.

As Andy Cooper states:

  "Linux must not probe microcode when virtualised.  What it may see
  instantaneously on boot (owing to MSR_PRED_CMD being fully passed
  through) is not accurate for the lifetime of the VM."

Rely on the hypervisor to set the needed IBPB_BRTYPE and SBPB bits.

Fixes: 1b5277c0ea0b ("x86/srso: Add SRSO_NO support")
Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/3938a7209606c045a3f50305d201d840e8c834c7.1693889988.git.jpoimboe@kernel.org
arch/x86/kernel/cpu/amd.c

index afacc48e07da87c2ca9141fff9904ce88ff39b66..03ef962a6992db0281697ea0d02b89e97f677dd5 100644 (file)
@@ -767,7 +767,7 @@ static void early_init_amd(struct cpuinfo_x86 *c)
        if (cpu_has(c, X86_FEATURE_TOPOEXT))
                smp_num_siblings = ((cpuid_ebx(0x8000001e) >> 8) & 0xff) + 1;
 
-       if (!cpu_has(c, X86_FEATURE_IBPB_BRTYPE)) {
+       if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && !cpu_has(c, X86_FEATURE_IBPB_BRTYPE)) {
                if (c->x86 == 0x17 && boot_cpu_has(X86_FEATURE_AMD_IBPB))
                        setup_force_cpu_cap(X86_FEATURE_IBPB_BRTYPE);
                else if (c->x86 >= 0x19 && !wrmsrl_safe(MSR_IA32_PRED_CMD, PRED_CMD_SBPB)) {