x86/bugs: Do IBPB fallback check only once
authorJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 14 Jun 2022 22:07:19 +0000 (15:07 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Jul 2022 10:54:05 +0000 (12:54 +0200)
commit 0fe4aeea9c01baabecc8c3afc7889c809d939bc2 upstream.

When booting with retbleed=auto, if the kernel wasn't built with
CONFIG_CC_HAS_RETURN_THUNK, the mitigation falls back to IBPB.  Make
sure a warning is printed in that case.  The IBPB fallback check is done
twice, but it really only needs to be done once.

Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kernel/cpu/bugs.c

index 86d46f14177653e30e4978e9f678f1062980526b..8401fe92e2d20ab11512ea9942f07f7a7723b3d5 100644 (file)
@@ -884,18 +884,13 @@ static void __init retbleed_select_mitigation(void)
        case RETBLEED_CMD_AUTO:
        default:
                if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
-                   boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
-
-                       if (IS_ENABLED(CONFIG_RETPOLINE) &&
-                           IS_ENABLED(CONFIG_CC_HAS_RETURN_THUNK))
-                               retbleed_mitigation = RETBLEED_MITIGATION_UNRET;
-                       else
-                               retbleed_mitigation = RETBLEED_MITIGATION_IBPB;
-               }
+                   boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
+                       retbleed_mitigation = RETBLEED_MITIGATION_UNRET;
 
                /*
-                * The Intel mitigation (IBRS) was already selected in
-                * spectre_v2_select_mitigation().
+                * The Intel mitigation (IBRS or eIBRS) was already selected in
+                * spectre_v2_select_mitigation().  'retbleed_mitigation' will
+                * be set accordingly below.
                 */
 
                break;