Skip to content

Commit 98ff5c0

Browse files
pa1guptabp3tk0v
authored andcommitted
x86/bugs: Avoid AUTO after the select step in the retbleed mitigation
The retbleed select function leaves the mitigation to AUTO in some cases. Moreover, the update function can also set the mitigation to AUTO. This is inconsistent with other mitigations and requires explicit handling of AUTO at the end of update step. Make sure a mitigation gets selected in the select step, and do not change it to AUTO in the update step. When no mitigation can be selected leave it to NONE, which is what AUTO was getting changed to in the end. Suggested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Acked-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/20250611-eibrs-fix-v4-1-5ff86cac6c61@linux.intel.com
1 parent e04c78d commit 98ff5c0

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

arch/x86/kernel/cpu/bugs.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,14 @@ static void __init retbleed_select_mitigation(void)
12471247
retbleed_mitigation = RETBLEED_MITIGATION_IBPB;
12481248
else
12491249
retbleed_mitigation = RETBLEED_MITIGATION_NONE;
1250+
} else if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) {
1251+
/* Final mitigation depends on spectre-v2 selection */
1252+
if (boot_cpu_has(X86_FEATURE_IBRS_ENHANCED))
1253+
retbleed_mitigation = RETBLEED_MITIGATION_EIBRS;
1254+
else if (boot_cpu_has(X86_FEATURE_IBRS))
1255+
retbleed_mitigation = RETBLEED_MITIGATION_IBRS;
1256+
else
1257+
retbleed_mitigation = RETBLEED_MITIGATION_NONE;
12501258
}
12511259
}
12521260

@@ -1255,9 +1263,6 @@ static void __init retbleed_update_mitigation(void)
12551263
if (!boot_cpu_has_bug(X86_BUG_RETBLEED) || cpu_mitigations_off())
12561264
return;
12571265

1258-
if (retbleed_mitigation == RETBLEED_MITIGATION_NONE)
1259-
goto out;
1260-
12611266
/*
12621267
* retbleed=stuff is only allowed on Intel. If stuffing can't be used
12631268
* then a different mitigation will be selected below.
@@ -1268,7 +1273,7 @@ static void __init retbleed_update_mitigation(void)
12681273
its_mitigation == ITS_MITIGATION_RETPOLINE_STUFF) {
12691274
if (spectre_v2_enabled != SPECTRE_V2_RETPOLINE) {
12701275
pr_err("WARNING: retbleed=stuff depends on spectre_v2=retpoline\n");
1271-
retbleed_mitigation = RETBLEED_MITIGATION_AUTO;
1276+
retbleed_mitigation = RETBLEED_MITIGATION_NONE;
12721277
} else {
12731278
if (retbleed_mitigation != RETBLEED_MITIGATION_STUFF)
12741279
pr_info("Retbleed mitigation updated to stuffing\n");
@@ -1294,15 +1299,11 @@ static void __init retbleed_update_mitigation(void)
12941299
if (retbleed_mitigation != RETBLEED_MITIGATION_STUFF)
12951300
pr_err(RETBLEED_INTEL_MSG);
12961301
}
1297-
/* If nothing has set the mitigation yet, default to NONE. */
1298-
if (retbleed_mitigation == RETBLEED_MITIGATION_AUTO)
1299-
retbleed_mitigation = RETBLEED_MITIGATION_NONE;
13001302
}
1301-
out:
1303+
13021304
pr_info("%s\n", retbleed_strings[retbleed_mitigation]);
13031305
}
13041306

1305-
13061307
static void __init retbleed_apply_mitigation(void)
13071308
{
13081309
bool mitigate_smt = false;

0 commit comments

Comments
 (0)