SPECTRE_V2_CMD_RETPOLINE,
SPECTRE_V2_CMD_RETPOLINE_GENERIC,
SPECTRE_V2_CMD_RETPOLINE_AMD,
+ SPECTRE_V2_CMD_IBRS,
};
static const char *spectre_v2_strings[] = {
[SPECTRE_V2_RETPOLINE_MINIMAL_AMD] = "Vulnerable: Minimal AMD ASM retpoline",
[SPECTRE_V2_RETPOLINE_GENERIC] = "Mitigation: Full generic retpoline",
[SPECTRE_V2_RETPOLINE_AMD] = "Mitigation: Full AMD retpoline",
+ [SPECTRE_V2_IBRS] = "Mitigation: IBRS",
+
};
#undef pr_fmt
return SPECTRE_V2_CMD_RETPOLINE_GENERIC;
} else if (match_option(arg, ret, "auto")) {
return SPECTRE_V2_CMD_AUTO;
+ } else if (match_option(arg, ret, "ibrs")) {
+ return SPECTRE_V2_CMD_IBRS;
}
}
if (IS_ENABLED(CONFIG_RETPOLINE))
goto retpoline_auto;
break;
+ case SPECTRE_V2_CMD_IBRS:
+ mode = SPECTRE_V2_IBRS;
+ goto display;
+ break; /* Not needed but compilers may complain otherwise. */
}
pr_err("kernel not compiled with retpoline; retpoline mitigation not available");
return;
SPECTRE_V2_RETPOLINE_MINIMAL;
setup_force_cpu_cap(X86_FEATURE_RETPOLINE);
}
-
+display:
spectre_v2_enabled = mode;
pr_info("%s\n", spectre_v2_strings[mode]);
return sprintf(buf, "Not affected\n");
return sprintf(buf, "%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
- ibrs_inuse ? ", IBRS" :
+ ibrs_inuse ? "" /* As spectre_v2_strings has it. */ :
lfence_inuse ? " lfence " : "",
ibpb_inuse ? ", IBPB" : "");
}