Commit 6d44acae authored by Michael Ellerman's avatar Michael Ellerman

powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

When I added the spectre_v2 information in sysfs, I included the
availability of the ori31 speculation barrier.

Although the ori31 barrier can be used to mitigate v2, it's primarily
intended as a spectre v1 mitigation. Spectre v2 is mitigated by
hardware changes.

So rework the sysfs files to show the ori31 information in the
spectre_v1 file, rather than v2.

Currently we display eg:

  $ grep . spectre_v*
  spectre_v1:Mitigation: __user pointer sanitization
  spectre_v2:Mitigation: Indirect branch cache disabled, ori31 speculation barrier enabled

After:

  $ grep . spectre_v*
  spectre_v1:Mitigation: __user pointer sanitization, ori31 speculation barrier enabled
  spectre_v2:Mitigation: Indirect branch cache disabled

Fixes: d6fbe1c5 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: stable@vger.kernel.org # v4.17+
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 5b73151f
...@@ -117,25 +117,35 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha ...@@ -117,25 +117,35 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha
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 (!security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) struct seq_buf s;
return sprintf(buf, "Not affected\n");
seq_buf_init(&s, buf, PAGE_SIZE - 1);
if (barrier_nospec_enabled) if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
return sprintf(buf, "Mitigation: __user pointer sanitization\n"); if (barrier_nospec_enabled)
seq_buf_printf(&s, "Mitigation: __user pointer sanitization");
else
seq_buf_printf(&s, "Vulnerable");
return sprintf(buf, "Vulnerable\n"); if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
seq_buf_printf(&s, ", ori31 speculation barrier enabled");
seq_buf_printf(&s, "\n");
} else
seq_buf_printf(&s, "Not affected\n");
return s.len;
} }
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)
{ {
bool bcs, ccd, ori;
struct seq_buf s; struct seq_buf s;
bool bcs, ccd;
seq_buf_init(&s, buf, PAGE_SIZE - 1); seq_buf_init(&s, buf, PAGE_SIZE - 1);
bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED); bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED);
ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED); ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED);
ori = security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31);
if (bcs || ccd) { if (bcs || ccd) {
seq_buf_printf(&s, "Mitigation: "); seq_buf_printf(&s, "Mitigation: ");
...@@ -151,9 +161,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c ...@@ -151,9 +161,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c
} else } else
seq_buf_printf(&s, "Vulnerable"); seq_buf_printf(&s, "Vulnerable");
if (ori)
seq_buf_printf(&s, ", ori31 speculation barrier enabled");
seq_buf_printf(&s, "\n"); seq_buf_printf(&s, "\n");
return s.len; return s.len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment