]>
Commit | Line | Data |
---|---|---|
69d801ac GKH |
1 | From foo@baz Wed May 23 19:42:20 CEST 2018 |
2 | From: Martin Schwidefsky <schwidefsky@de.ibm.com> | |
3 | Date: Wed, 23 May 2018 18:21:30 +0200 | |
4 | Subject: s390/lib: use expoline for indirect branches | |
5 | To: stable@vger.kernel.org | |
6 | Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> | |
7 | Message-ID: <1527092496-24207-4-git-send-email-schwidefsky@de.ibm.com> | |
8 | ||
9 | From: Martin Schwidefsky <schwidefsky@de.ibm.com> | |
10 | ||
11 | [ Upstream commit 97489e0663fa700d6e7febddc43b58df98d7bcda ] | |
12 | ||
13 | The return from the memmove, memset, memcpy, __memset16, __memset32 and | |
14 | __memset64 functions are done with "br %r14". These are indirect branches | |
15 | as well and need to use execute trampolines for CONFIG_EXPOLINE=y. | |
16 | ||
17 | Cc: stable@vger.kernel.org # 4.16 | |
18 | Fixes: f19fbd5ed6 ("s390: introduce execute-trampolines for branches") | |
19 | Reviewed-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> | |
20 | Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> | |
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
22 | --- | |
23 | arch/s390/lib/mem.S | 9 ++++++--- | |
24 | 1 file changed, 6 insertions(+), 3 deletions(-) | |
25 | ||
26 | --- a/arch/s390/lib/mem.S | |
27 | +++ b/arch/s390/lib/mem.S | |
28 | @@ -5,6 +5,9 @@ | |
29 | */ | |
30 | ||
31 | #include <linux/linkage.h> | |
32 | +#include <asm/nospec-insn.h> | |
33 | + | |
34 | + GEN_BR_THUNK %r14 | |
35 | ||
36 | /* | |
37 | * memset implementation | |
38 | @@ -38,7 +41,7 @@ ENTRY(memset) | |
39 | .Lmemset_clear_rest: | |
40 | larl %r3,.Lmemset_xc | |
41 | ex %r4,0(%r3) | |
42 | - br %r14 | |
43 | + BR_EX %r14 | |
44 | .Lmemset_fill: | |
45 | stc %r3,0(%r2) | |
46 | cghi %r4,1 | |
47 | @@ -55,7 +58,7 @@ ENTRY(memset) | |
48 | .Lmemset_fill_rest: | |
49 | larl %r3,.Lmemset_mvc | |
50 | ex %r4,0(%r3) | |
51 | - br %r14 | |
52 | + BR_EX %r14 | |
53 | .Lmemset_xc: | |
54 | xc 0(1,%r1),0(%r1) | |
55 | .Lmemset_mvc: | |
56 | @@ -77,7 +80,7 @@ ENTRY(memcpy) | |
57 | .Lmemcpy_rest: | |
58 | larl %r5,.Lmemcpy_mvc | |
59 | ex %r4,0(%r5) | |
60 | - br %r14 | |
61 | + BR_EX %r14 | |
62 | .Lmemcpy_loop: | |
63 | mvc 0(256,%r1),0(%r3) | |
64 | la %r1,256(%r1) |