]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.14.44/s390-lib-use-expoline-for-indirect-branches.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.14.44 / s390-lib-use-expoline-for-indirect-branches.patch
1 From foo@baz Wed May 23 19:38:57 CEST 2018
2 From: Martin Schwidefsky <schwidefsky@de.ibm.com>
3 Date: Wed, 23 May 2018 18:22:04 +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: <1527092529-24383-5-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 | 13 ++++++++-----
24 1 file changed, 8 insertions(+), 5 deletions(-)
25
26 --- a/arch/s390/lib/mem.S
27 +++ b/arch/s390/lib/mem.S
28 @@ -7,6 +7,9 @@
29
30 #include <linux/linkage.h>
31 #include <asm/export.h>
32 +#include <asm/nospec-insn.h>
33 +
34 + GEN_BR_THUNK %r14
35
36 /*
37 * void *memmove(void *dest, const void *src, size_t n)
38 @@ -33,14 +36,14 @@ ENTRY(memmove)
39 .Lmemmove_forward_remainder:
40 larl %r5,.Lmemmove_mvc
41 ex %r4,0(%r5)
42 - br %r14
43 + BR_EX %r14
44 .Lmemmove_reverse:
45 ic %r0,0(%r4,%r3)
46 stc %r0,0(%r4,%r1)
47 brctg %r4,.Lmemmove_reverse
48 ic %r0,0(%r4,%r3)
49 stc %r0,0(%r4,%r1)
50 - br %r14
51 + BR_EX %r14
52 .Lmemmove_mvc:
53 mvc 0(1,%r1),0(%r3)
54 EXPORT_SYMBOL(memmove)
55 @@ -77,7 +80,7 @@ ENTRY(memset)
56 .Lmemset_clear_remainder:
57 larl %r3,.Lmemset_xc
58 ex %r4,0(%r3)
59 - br %r14
60 + BR_EX %r14
61 .Lmemset_fill:
62 stc %r3,0(%r2)
63 cghi %r4,1
64 @@ -94,7 +97,7 @@ ENTRY(memset)
65 .Lmemset_fill_remainder:
66 larl %r3,.Lmemset_mvc
67 ex %r4,0(%r3)
68 - br %r14
69 + BR_EX %r14
70 .Lmemset_xc:
71 xc 0(1,%r1),0(%r1)
72 .Lmemset_mvc:
73 @@ -117,7 +120,7 @@ ENTRY(memcpy)
74 .Lmemcpy_remainder:
75 larl %r5,.Lmemcpy_mvc
76 ex %r4,0(%r5)
77 - br %r14
78 + BR_EX %r14
79 .Lmemcpy_loop:
80 mvc 0(256,%r1),0(%r3)
81 la %r1,256(%r1)