| From 26f843848bae973817b3587780ce6b7b0200d3e4 Mon Sep 17 00:00:00 2001 |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Date: Mon, 6 Aug 2018 14:26:39 +0200 |
| Subject: s390: fix br_r1_trampoline for machines without exrl |
| |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| |
| commit 26f843848bae973817b3587780ce6b7b0200d3e4 upstream. |
| |
| For machines without the exrl instruction the BFP jit generates |
| code that uses an "br %r1" instruction located in the lowcore page. |
| Unfortunately there is a cut & paste error that puts an additional |
| "larl %r1,.+14" instruction in the code that clobbers the branch |
| target address in %r1. Remove the larl instruction. |
| |
| Cc: <stable@vger.kernel.org> # v4.17+ |
| Fixes: de5cb6eb51 ("s390: use expoline thunks in the BPF JIT") |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/s390/net/bpf_jit_comp.c | 2 -- |
| 1 file changed, 2 deletions(-) |
| |
| --- a/arch/s390/net/bpf_jit_comp.c |
| +++ b/arch/s390/net/bpf_jit_comp.c |
| @@ -518,8 +518,6 @@ static void bpf_jit_epilogue(struct bpf_ |
| /* br %r1 */ |
| _EMIT2(0x07f1); |
| } else { |
| - /* larl %r1,.+14 */ |
| - EMIT6_PCREL_RILB(0xc0000000, REG_1, jit->prg + 14); |
| /* ex 0,S390_lowcore.br_r1_tampoline */ |
| EMIT4_DISP(0x44000000, REG_0, REG_0, |
| offsetof(struct lowcore, br_r1_trampoline)); |