bpf: fix csum setting for bpf_set_tunnel_key
authorDaniel Borkmann <daniel@iogearbox.net>
Tue, 23 Feb 2016 01:05:26 +0000 (02:05 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Feb 2016 21:23:47 +0000 (16:23 -0500)
commit2da897e51d7f23f872224218b9a4314503b0d360
treefde1288756864287c3f0a48e1ce9ef9414f785d2
parenta8c4a2522a0808c5c2143612909717d1115c40cf
bpf: fix csum setting for bpf_set_tunnel_key

The fix in 35e2d1152b22 ("tunnels: Allow IPv6 UDP checksums to be correctly
controlled.") changed behavior for bpf_set_tunnel_key() when in use with
IPv6 and thus uncovered a bug that TUNNEL_CSUM needed to be set but wasn't.
As a result, the stack dropped ingress vxlan IPv6 packets, that have been
sent via eBPF through collect meta data mode due to checksum now being zero.

Since after LCO, we enable IPv4 checksum by default, so make that analogous
and only provide a flag BPF_F_ZERO_CSUM_TX for the user to turn it off in
IPv4 case.

Fixes: 35e2d1152b22 ("tunnels: Allow IPv6 UDP checksums to be correctly controlled.")
Fixes: c6c33454072f ("bpf: support ipv6 for bpf_skb_{set,get}_tunnel_key")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/bpf.h
net/core/filter.c