| From 68fdb06dc0991bd2ae571ae5469291d0347d2218 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 29 Jan 2023 20:04:55 +0100 |
| Subject: s390/bpf: Add expoline to tail calls |
| |
| From: Ilya Leoshkevich <iii@linux.ibm.com> |
| |
| [ Upstream commit bb4ef8fc3d193ed8d5583fb47cbeff5d8fb8302f ] |
| |
| All the indirect jumps in the eBPF JIT already use expolines, except |
| for the tail call one. |
| |
| Fixes: de5cb6eb514e ("s390: use expoline thunks in the BPF JIT") |
| Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> |
| Link: https://lore.kernel.org/r/20230129190501.1624747-3-iii@linux.ibm.com |
| Signed-off-by: Alexei Starovoitov <ast@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/net/bpf_jit_comp.c | 12 ++++++++++-- |
| 1 file changed, 10 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c |
| index af35052d06ed6..fbdba4c306bea 100644 |
| --- a/arch/s390/net/bpf_jit_comp.c |
| +++ b/arch/s390/net/bpf_jit_comp.c |
| @@ -1393,8 +1393,16 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, |
| /* lg %r1,bpf_func(%r1) */ |
| EMIT6_DISP_LH(0xe3000000, 0x0004, REG_1, REG_1, REG_0, |
| offsetof(struct bpf_prog, bpf_func)); |
| - /* bc 0xf,tail_call_start(%r1) */ |
| - _EMIT4(0x47f01000 + jit->tail_call_start); |
| + if (nospec_uses_trampoline()) { |
| + jit->seen |= SEEN_FUNC; |
| + /* aghi %r1,tail_call_start */ |
| + EMIT4_IMM(0xa70b0000, REG_1, jit->tail_call_start); |
| + /* brcl 0xf,__s390_indirect_jump_r1 */ |
| + EMIT6_PCREL_RILC(0xc0040000, 0xf, jit->r1_thunk_ip); |
| + } else { |
| + /* bc 0xf,tail_call_start(%r1) */ |
| + _EMIT4(0x47f01000 + jit->tail_call_start); |
| + } |
| /* out: */ |
| if (jit->prg_buf) { |
| *(u16 *)(jit->prg_buf + patch_1_clrj + 2) = |
| -- |
| 2.39.2 |
| |