|
@@ -58,3 +58,36 @@ ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, c
|
|
|
|
|
|
return sprintf(buf, "Vulnerable\n");
|
|
|
}
|
|
|
+
|
|
|
+ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
+{
|
|
|
+ bool bcs, ccd, ori;
|
|
|
+ struct seq_buf s;
|
|
|
+
|
|
|
+ seq_buf_init(&s, buf, PAGE_SIZE - 1);
|
|
|
+
|
|
|
+ bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED);
|
|
|
+ ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED);
|
|
|
+ ori = security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31);
|
|
|
+
|
|
|
+ if (bcs || ccd) {
|
|
|
+ seq_buf_printf(&s, "Mitigation: ");
|
|
|
+
|
|
|
+ if (bcs)
|
|
|
+ seq_buf_printf(&s, "Indirect branch serialisation (kernel only)");
|
|
|
+
|
|
|
+ if (bcs && ccd)
|
|
|
+ seq_buf_printf(&s, ", ");
|
|
|
+
|
|
|
+ if (ccd)
|
|
|
+ seq_buf_printf(&s, "Indirect branch cache disabled");
|
|
|
+ } else
|
|
|
+ seq_buf_printf(&s, "Vulnerable");
|
|
|
+
|
|
|
+ if (ori)
|
|
|
+ seq_buf_printf(&s, ", ori31 speculation barrier enabled");
|
|
|
+
|
|
|
+ seq_buf_printf(&s, "\n");
|
|
|
+
|
|
|
+ return s.len;
|
|
|
+}
|