]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/bpf: Fix gotol with large offsets
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 2 Jan 2024 19:30:35 +0000 (20:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:44:56 +0000 (15:44 -0800)
[ Upstream commit ecba66cb36e3428e9f0c2362b45e213ad43ba8d0 ]

The gotol implementation uses a wrong data type for the offset: it
should be s32, not s16.

Fixes: c690191e23d8 ("s390/bpf: Implement unconditional jump with 32-bit offset")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20240102193531.3169422-2-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

index bf06b7283f0ca69b3ef91661c6d12d6497a7e5ab..c7fbeedeb0a48463a537fb81bc32c7c6dafdb465 100644 (file)
@@ -779,7 +779,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
                                 int i, bool extra_pass, u32 stack_depth)
 {
        struct bpf_insn *insn = &fp->insnsi[i];
-       s16 branch_oc_off = insn->off;
+       s32 branch_oc_off = insn->off;
        u32 dst_reg = insn->dst_reg;
        u32 src_reg = insn->src_reg;
        int last, insn_count = 1;