|
@@ -314,30 +314,48 @@ retpoline_auto:
|
|
#undef pr_fmt
|
|
#undef pr_fmt
|
|
|
|
|
|
#ifdef CONFIG_SYSFS
|
|
#ifdef CONFIG_SYSFS
|
|
-ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
|
|
|
+
|
|
|
|
+ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
|
|
|
|
+ char *buf, unsigned int bug)
|
|
{
|
|
{
|
|
- if (!boot_cpu_has_bug(X86_BUG_CPU_MELTDOWN))
|
|
|
|
|
|
+ if (!boot_cpu_has_bug(bug))
|
|
return sprintf(buf, "Not affected\n");
|
|
return sprintf(buf, "Not affected\n");
|
|
- if (boot_cpu_has(X86_FEATURE_PTI))
|
|
|
|
- return sprintf(buf, "Mitigation: PTI\n");
|
|
|
|
|
|
+
|
|
|
|
+ switch (bug) {
|
|
|
|
+ case X86_BUG_CPU_MELTDOWN:
|
|
|
|
+ if (boot_cpu_has(X86_FEATURE_PTI))
|
|
|
|
+ return sprintf(buf, "Mitigation: PTI\n");
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case X86_BUG_SPECTRE_V1:
|
|
|
|
+ return sprintf(buf, "Mitigation: __user pointer sanitization\n");
|
|
|
|
+
|
|
|
|
+ case X86_BUG_SPECTRE_V2:
|
|
|
|
+ return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
|
|
|
|
+ boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "",
|
|
|
|
+ boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
|
|
|
|
+ spectre_v2_module_string());
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
return sprintf(buf, "Vulnerable\n");
|
|
return sprintf(buf, "Vulnerable\n");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
|
+{
|
|
|
|
+ return cpu_show_common(dev, attr, buf, X86_BUG_CPU_MELTDOWN);
|
|
|
|
+}
|
|
|
|
+
|
|
ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf)
|
|
ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf)
|
|
{
|
|
{
|
|
- if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V1))
|
|
|
|
- return sprintf(buf, "Not affected\n");
|
|
|
|
- return sprintf(buf, "Mitigation: __user pointer sanitization\n");
|
|
|
|
|
|
+ return cpu_show_common(dev, attr, buf, X86_BUG_SPECTRE_V1);
|
|
}
|
|
}
|
|
|
|
|
|
ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf)
|
|
ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf)
|
|
{
|
|
{
|
|
- if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
|
|
|
|
- return sprintf(buf, "Not affected\n");
|
|
|
|
-
|
|
|
|
- return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
|
|
|
|
- boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "",
|
|
|
|
- boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
|
|
|
|
- spectre_v2_module_string());
|
|
|
|
|
|
+ return cpu_show_common(dev, attr, buf, X86_BUG_SPECTRE_V2);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|