|
@@ -844,6 +844,22 @@ static ssize_t l1tf_show_state(char *buf)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+static char *stibp_state(void)
|
|
|
|
+{
|
|
|
|
+ if (x86_spec_ctrl_base & SPEC_CTRL_STIBP)
|
|
|
|
+ return ", STIBP";
|
|
|
|
+ else
|
|
|
|
+ return "";
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static char *ibpb_state(void)
|
|
|
|
+{
|
|
|
|
+ if (boot_cpu_has(X86_FEATURE_USE_IBPB))
|
|
|
|
+ return ", IBPB";
|
|
|
|
+ else
|
|
|
|
+ return "";
|
|
|
|
+}
|
|
|
|
+
|
|
static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
|
|
static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
|
|
char *buf, unsigned int bug)
|
|
char *buf, unsigned int bug)
|
|
{
|
|
{
|
|
@@ -865,9 +881,9 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
|
|
|
|
|
|
case X86_BUG_SPECTRE_V2:
|
|
case X86_BUG_SPECTRE_V2:
|
|
return sprintf(buf, "%s%s%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
|
|
return sprintf(buf, "%s%s%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
|
|
- boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "",
|
|
|
|
|
|
+ ibpb_state(),
|
|
boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
|
|
boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
|
|
- (x86_spec_ctrl_base & SPEC_CTRL_STIBP) ? ", STIBP" : "",
|
|
|
|
|
|
+ stibp_state(),
|
|
boot_cpu_has(X86_FEATURE_RSB_CTXSW) ? ", RSB filling" : "",
|
|
boot_cpu_has(X86_FEATURE_RSB_CTXSW) ? ", RSB filling" : "",
|
|
spectre_v2_module_string());
|
|
spectre_v2_module_string());
|
|
|
|
|