| From foo@baz Wed May 23 19:41:15 CEST 2018 |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Date: Wed, 23 May 2018 18:21:46 +0200 |
| Subject: s390/crc32-vx: use expoline for indirect branches |
| To: stable@vger.kernel.org |
| Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Message-ID: <1527092512-24300-4-git-send-email-schwidefsky@de.ibm.com> |
| |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| |
| [ Upstream commit 467a3bf219cee12259182c5cb4821f88fd518a51 ] |
| |
| The return from the crc32_le_vgfm_16/crc32c_le_vgfm_16 and the |
| crc32_be_vgfm_16 functions are done with "br %r14". These are indirect |
| branches as well and need to use execute trampolines for CONFIG_EXPOLINE=y. |
| |
| Cc: stable@vger.kernel.org # 4.16 |
| Fixes: f19fbd5ed6 ("s390: introduce execute-trampolines for branches") |
| Reviewed-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/s390/crypto/crc32be-vx.S | 5 ++++- |
| arch/s390/crypto/crc32le-vx.S | 4 +++- |
| 2 files changed, 7 insertions(+), 2 deletions(-) |
| |
| --- a/arch/s390/crypto/crc32be-vx.S |
| +++ b/arch/s390/crypto/crc32be-vx.S |
| @@ -12,6 +12,7 @@ |
| */ |
| |
| #include <linux/linkage.h> |
| +#include <asm/nospec-insn.h> |
| #include <asm/vx-insn.h> |
| |
| /* Vector register range containing CRC-32 constants */ |
| @@ -66,6 +67,8 @@ |
| |
| .previous |
| |
| + GEN_BR_THUNK %r14 |
| + |
| .text |
| /* |
| * The CRC-32 function(s) use these calling conventions: |
| @@ -202,6 +205,6 @@ ENTRY(crc32_be_vgfm_16) |
| |
| .Ldone: |
| VLGVF %r2,%v2,3 |
| - br %r14 |
| + BR_EX %r14 |
| |
| .previous |
| --- a/arch/s390/crypto/crc32le-vx.S |
| +++ b/arch/s390/crypto/crc32le-vx.S |
| @@ -13,6 +13,7 @@ |
| */ |
| |
| #include <linux/linkage.h> |
| +#include <asm/nospec-insn.h> |
| #include <asm/vx-insn.h> |
| |
| /* Vector register range containing CRC-32 constants */ |
| @@ -75,6 +76,7 @@ |
| |
| .previous |
| |
| + GEN_BR_THUNK %r14 |
| |
| .text |
| |
| @@ -263,6 +265,6 @@ crc32_le_vgfm_generic: |
| |
| .Ldone: |
| VLGVF %r2,%v2,2 |
| - br %r14 |
| + BR_EX %r14 |
| |
| .previous |