Skip to content

Commit facd226

Browse files
pa1guptahansendc
authored andcommitted
x86/its: Add support for RSB stuffing mitigation
When retpoline mitigation is enabled for spectre-v2, enabling call-depth-tracking and RSB stuffing also mitigates ITS. Add cmdline option indirect_target_selection=stuff to allow enabling RSB stuffing mitigation. When retpoline mitigation is not enabled, =stuff option is ignored, and default mitigation for ITS is deployed. Signed-off-by: Pawan Gupta <[email protected]> Signed-off-by: Dave Hansen <[email protected]> Reviewed-by: Josh Poimboeuf <[email protected]> Reviewed-by: Alexandre Chartre <[email protected]>
1 parent 2665281 commit facd226

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2212,6 +2212,9 @@
22122212
mitigation.
22132213
vmexit: Only deploy mitigation if CPU is affected by
22142214
guest/host isolation part of ITS.
2215+
stuff: Deploy RSB-fill mitigation when retpoline is
2216+
also deployed. Otherwise, deploy the default
2217+
mitigation.
22152218

22162219
For details see:
22172220
Documentation/admin-guide/hw-vuln/indirect-target-selection.rst

arch/x86/kernel/cpu/bugs.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,6 +1204,7 @@ enum its_mitigation_cmd {
12041204
ITS_CMD_OFF,
12051205
ITS_CMD_ON,
12061206
ITS_CMD_VMEXIT,
1207+
ITS_CMD_RSB_STUFF,
12071208
};
12081209

12091210
enum its_mitigation {
@@ -1244,6 +1245,8 @@ static int __init its_parse_cmdline(char *str)
12441245
setup_force_cpu_bug(X86_BUG_ITS);
12451246
} else if (!strcmp(str, "vmexit")) {
12461247
its_cmd = ITS_CMD_VMEXIT;
1248+
} else if (!strcmp(str, "stuff")) {
1249+
its_cmd = ITS_CMD_RSB_STUFF;
12471250
} else {
12481251
pr_err("Ignoring unknown indirect_target_selection option (%s).", str);
12491252
}
@@ -1295,6 +1298,12 @@ static void __init its_select_mitigation(void)
12951298
goto out;
12961299
}
12971300

1301+
if (cmd == ITS_CMD_RSB_STUFF &&
1302+
(!boot_cpu_has(X86_FEATURE_RETPOLINE) || !IS_ENABLED(CONFIG_MITIGATION_CALL_DEPTH_TRACKING))) {
1303+
pr_err("RSB stuff mitigation not supported, using default\n");
1304+
cmd = ITS_CMD_ON;
1305+
}
1306+
12981307
switch (cmd) {
12991308
case ITS_CMD_OFF:
13001309
its_mitigation = ITS_MITIGATION_OFF;
@@ -1312,6 +1321,16 @@ static void __init its_select_mitigation(void)
13121321
setup_force_cpu_cap(X86_FEATURE_RETHUNK);
13131322
set_return_thunk(its_return_thunk);
13141323
break;
1324+
case ITS_CMD_RSB_STUFF:
1325+
its_mitigation = ITS_MITIGATION_RETPOLINE_STUFF;
1326+
setup_force_cpu_cap(X86_FEATURE_RETHUNK);
1327+
setup_force_cpu_cap(X86_FEATURE_CALL_DEPTH);
1328+
set_return_thunk(call_depth_return_thunk);
1329+
if (retbleed_mitigation == RETBLEED_MITIGATION_NONE) {
1330+
retbleed_mitigation = RETBLEED_MITIGATION_STUFF;
1331+
pr_info("Retbleed mitigation updated to stuffing\n");
1332+
}
1333+
break;
13151334
}
13161335
out:
13171336
pr_info("%s\n", its_strings[its_mitigation]);

0 commit comments

Comments
 (0)