]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
bpf, sparc: fix usage of wrong reg for load_skb_regs after call
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 22 Dec 2017 15:23:03 +0000 (16:23 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Dec 2017 13:26:32 +0000 (14:26 +0100)
commit82a9d62f603f0cb5549c4ca554f06e70510b7296
treeedc34ab233622f7aef336a5583dffdcd4ecaf7a5
parent8a681dfd8fb253cd3cac03a59e2867f9baad7934
bpf, sparc: fix usage of wrong reg for load_skb_regs after call

[ Upstream commit 07aee94394547721ac168cbf4e1c09c14a5fe671 ]

When LD_ABS/IND is used in the program, and we have a BPF helper
call that changes packet data (bpf_helper_changes_pkt_data() returns
true), then in case of sparc JIT, we try to reload cached skb data
from bpf2sparc[BPF_REG_6]. However, there is no such guarantee or
assumption that skb sits in R6 at this point, all helpers changing
skb data only have a guarantee that skb sits in R1. Therefore,
store BPF R1 in L7 temporarily and after procedure call use L7 to
reload cached skb data. skb sitting in R6 is only true at the time
when LD_ABS/IND is executed.

Fixes: 7a12b5031c6b ("sparc64: Add eBPF JIT.")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/sparc/net/bpf_jit_comp_64.c