Patch "powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2" has been added to the 4.4-stable tree

2019-04-29 Thread gregkh


This is a note to let you know that I've just added the patch titled

powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

to the 4.4-stable tree which can be found at:

http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
 powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let  know about it.


>From foo@baz Mon 29 Apr 2019 11:38:37 AM CEST
From: Michael Ellerman 
Date: Mon, 22 Apr 2019 00:20:17 +1000
Subject: powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2
To: sta...@vger.kernel.org, gre...@linuxfoundation.org
Cc: linuxppc-...@ozlabs.org, diana.crac...@nxp.com, msucha...@suse.de, 
npig...@gmail.com, christophe.le...@c-s.fr
Message-ID: <20190421142037.21881-33-...@ellerman.id.au>

From: Michael Ellerman 

commit 6d44acae1937b81cf8115ada8958e04f601f3f2e upstream.

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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/powerpc/kernel/security.c |   27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -118,25 +118,35 @@ ssize_t cpu_show_meltdown(struct device
 
 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))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
+
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
 
-   return sprintf(buf, "Vulnerable\n");
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -152,9 +162,6 @@ ssize_t cpu_show_spectre_v2(struct devic
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;


Patches currently in stable-queue which might be from m...@ellerman.id.au are

queue-4.4/powerpc-64s-add-support-for-a-store-forwarding-barrier-at-kernel-entry-exit.patch
queue-4.4/powerpc-64-make-stf-barrier-ppc_book3s_64-specific.patch
queue-4.4/powerpc-pseries-set-or-clear-security-feature-flags.patch
queue-4.4/powerpc-fsl-fix-spectre_v2-mitigations-reporting.patch
queue-4.4/powerpc-64s-patch-barrier_nospec-in-modules.patch
queue-4.4/powerpc-pseries-support-firmware-disable-of-rfi-flush.patch
queue-4.4/powerpc-rfi-flush-call-setup_rfi_flush-after-lpm-migration.patch
queue-4.4/powerpc-pseries-query-hypervisor-for-count-cache-flush-settings.patch
queue-4.4/powerpc-powernv-set-or-clear-security-feature-flags.patch
queue-4.4/powerpc-64s-add-support-for-software-count-cache-flush.patch
queue-4.4/powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
queue-4.

[PATCH stable v4.4 32/52] powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

2019-04-21 Thread Michael Ellerman
commit 6d44acae1937b81cf8115ada8958e04f601f3f2e upstream.

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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/kernel/security.c | 27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index 202083daebfb..e74057ba2e36 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -118,25 +118,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)
 {
-   if (!security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   return sprintf(buf, "Vulnerable\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
+
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -152,9 +162,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct 
device_attribute *attr, c
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;
-- 
2.20.1



[PATCH stable v4.9 10/35] powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

2019-04-11 Thread Michael Ellerman
commit 6d44acae1937b81cf8115ada8958e04f601f3f2e upstream.

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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/kernel/security.c | 27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index f189f946d935..bf298d0c475f 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -118,25 +118,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)
 {
-   if (!security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   return sprintf(buf, "Vulnerable\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
+
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -152,9 +162,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct 
device_attribute *attr, c
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;
-- 
2.20.1



Patch "[PATCH stable v4.14 07/32] powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2" has been added to the 4.14-stable tree

2019-03-29 Thread gregkh


This is a note to let you know that I've just added the patch titled

[PATCH stable v4.14 07/32] powerpc64s: Show ori31 availability in 
spectre_v1 sysfs file not v2

to the 4.14-stable tree which can be found at:

http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
 powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
and it can be found in the queue-4.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let  know about it.


>From foo@baz Fri Mar 29 15:53:50 CET 2019
From: Michael Ellerman 
Date: Fri, 29 Mar 2019 22:25:55 +1100
Subject: [PATCH stable v4.14 07/32] powerpc64s: Show ori31 availability in 
spectre_v1 sysfs file not v2
To: sta...@vger.kernel.org, gre...@linuxfoundation.org
Cc: linuxppc-...@ozlabs.org, diana.crac...@nxp.com, msucha...@suse.de, 
christophe.le...@c-s.fr
Message-ID: <20190329112620.14489-8-...@ellerman.id.au>

From: Michael Ellerman 

commit 6d44acae1937b81cf8115ada8958e04f601f3f2e upstream.

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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/powerpc/kernel/security.c |   27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -117,25 +117,35 @@ ssize_t cpu_show_meltdown(struct device
 
 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))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
+
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
 
-   return sprintf(buf, "Vulnerable\n");
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -151,9 +161,6 @@ ssize_t cpu_show_spectre_v2(struct devic
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;


Patches currently in stable-queue which might be from m...@ellerman.id.au are

queue-4.14/powerpc-fsl-emulate-sprn_bucsr-register.patch
queue-4.14/powerpc-64-make-stf-barrier-ppc_book3s_64-specific.patch
queue-4.14/powerpc-fsl-fix-spectre_v2-mitigations-reporting.patch
queue-4.14/powerpc-64s-patch-barrier_nospec-in-modules.patch
queue-4.14/powerpc-pseries-query-hypervisor-for-count-cache-flush-settings.patch
queue-4.14/powerpc-64s-add-support-for-software-count-cache-flush.patch
queue-4.14/powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
queue-4.14/powerpc-fsl-flush-the-branch-predictor-at-each-kernel-entry-64bit.patch
queue-4.14/powerpc-fsl-update-spectre-v2-reporting.patch
queue-4.14/powerpc-64-make-meltdown-reporting-book3s-64-specific.patch
queue-4.14/powerpc-64s-add-support-for-ori-barrier_nospec-patching.p

[PATCH stable v4.14 07/32] powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

2019-03-29 Thread Michael Ellerman
commit 6d44acae1937b81cf8115ada8958e04f601f3f2e upstream.

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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/kernel/security.c | 27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index a8b277362931..4cb8f1f7b593 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -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)
 {
-   if (!security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   return sprintf(buf, "Vulnerable\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
+
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -151,9 +161,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct 
device_attribute *attr, c
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;
-- 
2.20.1



Re: powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

2018-07-24 Thread Michael Ellerman
On Mon, 2018-07-09 at 06:25:21 UTC, Michael Ellerman wrote:
> 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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
> Cc: sta...@vger.kernel.org # v4.17+
> Signed-off-by: Michael Ellerman 

Applied to powerpc next.

https://git.kernel.org/powerpc/c/6d44acae1937b81cf8115ada8958e0

cheers


[PATCH] powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2

2018-07-09 Thread Michael Ellerman
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: d6fbe1c55c55 ("powerpc/64s: Wire up cpu_show_spectre_v2()")
Cc: sta...@vger.kernel.org # v4.17+
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/kernel/security.c | 27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index a8b277362931..4cb8f1f7b593 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -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)
 {
-   if (!security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR))
-   return sprintf(buf, "Not affected\n");
+   struct seq_buf s;
+
+   seq_buf_init(, buf, PAGE_SIZE - 1);
 
-   if (barrier_nospec_enabled)
-   return sprintf(buf, "Mitigation: __user pointer 
sanitization\n");
+   if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
+   if (barrier_nospec_enabled)
+   seq_buf_printf(, "Mitigation: __user pointer 
sanitization");
+   else
+   seq_buf_printf(, "Vulnerable");
 
-   return sprintf(buf, "Vulnerable\n");
+   if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
+   seq_buf_printf(, ", ori31 speculation barrier 
enabled");
+
+   seq_buf_printf(, "\n");
+   } else
+   seq_buf_printf(, "Not affected\n");
+
+   return s.len;
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-   bool bcs, ccd, ori;
struct seq_buf s;
+   bool bcs, ccd;
 
seq_buf_init(, 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(, "Mitigation: ");
@@ -151,9 +161,6 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct 
device_attribute *attr, c
} else
seq_buf_printf(, "Vulnerable");
 
-   if (ori)
-   seq_buf_printf(, ", ori31 speculation barrier enabled");
-
seq_buf_printf(, "\n");
 
return s.len;
-- 
2.14.1