Skip to content

Commit d6fbe1c

Browse files
committed
powerpc/64s: Wire up cpu_show_spectre_v2()
Add a definition for cpu_show_spectre_v2() to override the generic version. This has several permuations, though in practice some may not occur we cater for any combination. The most verbose is: Mitigation: Indirect branch serialisation (kernel only), Indirect branch cache disabled, ori31 speculation barrier enabled We don't treat the ori31 speculation barrier as a mitigation on its own, because it has to be *used* by code in order to be a mitigation and we don't know if userspace is doing that. So if that's all we see we say: Vulnerable, ori31 speculation barrier enabled Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
1 parent 5698601 commit d6fbe1c

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

arch/powerpc/kernel/security.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,36 @@ ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, c
5858

5959
return sprintf(buf, "Vulnerable\n");
6060
}
61+
62+
ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf)
63+
{
64+
bool bcs, ccd, ori;
65+
struct seq_buf s;
66+
67+
seq_buf_init(&s, buf, PAGE_SIZE - 1);
68+
69+
bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED);
70+
ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED);
71+
ori = security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31);
72+
73+
if (bcs || ccd) {
74+
seq_buf_printf(&s, "Mitigation: ");
75+
76+
if (bcs)
77+
seq_buf_printf(&s, "Indirect branch serialisation (kernel only)");
78+
79+
if (bcs && ccd)
80+
seq_buf_printf(&s, ", ");
81+
82+
if (ccd)
83+
seq_buf_printf(&s, "Indirect branch cache disabled");
84+
} else
85+
seq_buf_printf(&s, "Vulnerable");
86+
87+
if (ori)
88+
seq_buf_printf(&s, ", ori31 speculation barrier enabled");
89+
90+
seq_buf_printf(&s, "\n");
91+
92+
return s.len;
93+
}

0 commit comments

Comments
 (0)