linux-stable/arch/s390/net
Ilya Leoshkevich d72714c1da s390/bpf: Fix multiple tail calls
In order to branch around tail calls (due to out-of-bounds index,
exceeding tail call count or missing tail call target), JIT uses
label[0] field, which contains the address of the instruction following
the tail call. When there are multiple tail calls, label[0] value comes
from handling of a previous tail call, which is incorrect.

Fix by getting rid of label array and resolving the label address
locally: for all 3 branches that jump to it, emit 0 offsets at the
beginning, and then backpatch them with the correct value.

Also, do not use the long jump infrastructure: the tail call sequence
is known to be short, so make all 3 jumps short.

Fixes: 6651ee070b ("s390/bpf: implement bpf_tail_call() helper")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200909232141.3099367-1-iii@linux.ibm.com
2020-09-14 18:21:31 -07:00
..
bpf_jit.h bpf, s390x: remove ld_abs/ld_ind 2018-05-03 16:49:20 -07:00
bpf_jit_comp.c s390/bpf: Fix multiple tail calls 2020-09-14 18:21:31 -07:00
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-06-06 18:39:49 -07:00
pnet.c s390/net: convert pnetids to ascii 2019-02-21 10:34:37 -08:00