Daniel Borkmann
db3c6139e6
bpf, vxlan, geneve, gre: fix usage of dst_cache on xmit
...
The assumptions from commit 0c1d70af92 ("net: use dst_cache for vxlan
device"), 468dfffcd7 ("geneve: add dst caching support") and 3c1cb4d260
("net/ipv4: add dst cache support for gre lwtunnels") on dst_cache usage
when ip_tunnel_info is used is unfortunately not always valid as assumed.
While it seems correct for ip_tunnel_info front-ends such as OVS, eBPF
however can fill in ip_tunnel_info for consumers like vxlan, geneve or gre
with different remote dsts, tos, etc, therefore they cannot be assumed as
packet independent.
Right now vxlan, geneve, gre would cache the dst for eBPF and every packet
would reuse the same entry that was first created on the initial route
lookup. eBPF doesn't store/cache the ip_tunnel_info, so each skb may have
a different one.
Fix it by adding a flag that checks the ip_tunnel_info. Also the !tos test
in vxlan needs to be handeled differently in this context as it is currently
inferred from ip_tunnel_info as well if present. ip_tunnel_dst_cache_usable()
helper is added for the three tunnel cases, which checks if we can use dst
cache.
Fixes: 0c1d70af92 ("net: use dst_cache for vxlan device")
Fixes: 468dfffcd7 ("geneve: add dst caching support")
Fixes: 3c1cb4d260 ("net/ipv4: add dst cache support for gre lwtunnels")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-03-08 13:58:47 -05:00
..
9p
9p: switch p9_client_read() to passing struct iov_iter *
2015-04-11 22:28:27 -04:00
bluetooth
Bluetooth: add LED trigger for indicating HCI is powered up
2016-02-23 20:29:35 +01:00
caif
caif: fix a signedness bug in cfpkt_iterate()
2015-02-20 17:35:14 -05:00
irda
irda: Convert function pointer arrays and uses to const
2014-12-10 15:33:16 -05:00
iucv
s390/iucv: do not use arrays as argument
2015-09-21 16:03:04 -07:00
netfilter
netfilter: nf_conntrack: use safer way to lock all buckets
2016-01-20 14:15:31 +01:00
netns
ipv4: namespacify ip_early_demux sysctl knob
2016-02-16 20:42:54 -05:00
nfc
nfc: netlink: HCI event connectivity implementation
2015-12-29 19:06:20 +01:00
phonet
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
sctp
sctp: remove the unused sctp_datamsg_free()
2016-02-17 15:41:54 -05:00
tc_act
introduce IFE action
2016-03-01 17:15:22 -05:00
6lowpan.h
6lowpan: iphc: add support for stateful compression
2016-02-23 20:29:40 +01:00
act_api.h
net_sched: add network namespace support for tc actions
2016-02-25 14:16:21 -05:00
addrconf.h
inet: refactor inet[6]_lookup functions to take skb
2016-02-11 03:54:14 -05:00
af_ieee802154.h
ieee802154: af_ieee802154: fix typo in comment.
2015-09-17 13:20:05 +02:00
af_rxrpc.h
af_unix.h
unix: correctly track in-flight fds in sending process user_struct
2016-02-08 10:30:42 -05:00
af_vsock.h
Revert "Merge branch 'vsock-virtio'"
2015-12-08 21:55:49 -05:00
ah.h
arp.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
atmclip.h
ax25.h
ax25: Stop using sock->sk_protinfo.
2015-06-28 16:55:44 -07:00
ax88796.h
bond_3ad.h
bonding: 3ad: apply ad_actor settings changes immediately
2016-02-09 04:45:49 -05:00
bond_alb.h
bond_options.h
bonding: convert num_grat_arp to the new bonding option API
2015-07-27 01:05:24 -07:00
bonding.h
bonding: implement lower state change propagation
2015-12-03 11:49:27 -05:00
busy_poll.h
net: un-inline sk_busy_loop()
2015-11-18 16:17:38 -05:00
cfg80211-wext.h
cfg80211.h
cfg80211: basic support for PBSS network type
2016-02-24 09:04:34 +01:00
cfg802154.h
nl802154: add support for security layer
2015-09-30 13:16:44 +02:00
checksum.h
bpf: allow bpf_csum_diff to feed bpf_l3_csum_replace as well
2016-03-08 13:55:15 -05:00
cipso_ipv4.h
cipso: don't use IPCB() to locate the CIPSO IP option
2015-02-11 14:46:37 -05:00
cls_cgroup.h
net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
2015-12-08 22:02:33 -05:00
codel.h
net_sched: update hierarchical backlog too
2016-02-29 17:02:33 -05:00
compat.h
net: switch importing msghdr from userland to {compat_,}import_iovec()
2015-04-09 00:02:26 -04:00
datalink.h
dcbevent.h
dcbnl.h
net/dcb: Add IEEE QCN attribute
2015-03-06 21:50:02 -05:00
devlink.h
Introduce devlink infrastructure
2016-03-01 16:07:29 -05:00
dn.h
dn_dev.h
dn_fib.h
dn_neigh.h
netfilter: Pass net into okfn
2015-09-17 17:18:37 -07:00
dn_nsp.h
dn_route.h
dsa.h
net: dsa: support VLAN filtering switchdev attr
2016-03-01 16:24:51 -05:00
dsfield.h
dst.h
net: fix IP early demux races
2015-12-14 23:52:00 -05:00
dst_cache.h
net: add dst_cache support
2016-02-16 20:21:48 -05:00
dst_metadata.h
net: add dst_cache to ovs vxlan lwtunnel
2016-02-16 20:21:48 -05:00
dst_ops.h
ipv4, ipv6: Pass net into __ip_local_out and __ip6_local_out
2015-10-08 04:27:02 -07:00
esp.h
ethoc.h
net/ethoc: support big-endian register layout
2015-09-23 15:33:15 -07:00
fib_rules.h
net: ipv6: use common fib_default_rule_pref
2015-09-09 14:19:50 -07:00
firewire.h
flow.h
net: Rename FLOWI_FLAG_VRFSRC to FLOWI_FLAG_L3MDEV_SRC
2015-10-07 04:27:42 -07:00
flow_dissector.h
flow_dissector: Don't use bit fields.
2015-09-01 16:46:08 -07:00
flowcache.h
fou.h
garp.h
gen_stats.h
genetlink.h
Revert "genl: Add genlmsg_new_unicast() for unicast message allocation"
2016-02-18 11:42:19 -05:00
geneve.h
geneve: Add geneve_get_rx_port support
2015-12-16 10:58:56 -05:00
gre.h
gre: Remove support for sharing GRE protocol hook.
2015-08-10 14:03:54 -07:00
gro_cells.h
gro_cells: remove spinlock protecting receive queues
2015-08-31 15:17:17 -07:00
gue.h
icmp.h
ieee80211_radiotap.h
ieee802154_netdev.h
mac802154: constify ieee802154_llsec_ops structure
2016-01-04 20:40:41 +01:00
if_inet6.h
ipv6: do retries on stable privacy addresses
2015-03-23 22:12:09 -04:00
ila.h
ila: Add generic ILA translation facility
2015-12-15 23:25:20 -05:00
inet6_connection_sock.h
ipv6: remove obsolete inet6 functions
2015-10-03 04:32:42 -07:00
inet6_hashtables.h
inet: refactor inet[6]_lookup functions to take skb
2016-02-11 03:54:14 -05:00
inet_common.h
net: avoid NULL deref in inet_ctl_sock_destroy()
2015-11-02 22:46:09 -05:00
inet_connection_sock.h
tcp/dccp: fix another race at listener dismantle
2016-02-18 11:35:51 -05:00
inet_ecn.h
ipv6: update skb->csum when CE mark is propagated
2016-01-15 15:07:23 -05:00
inet_frag.h
ipv4: namespacify ip fragment max dist sysctl knob
2016-02-16 20:42:54 -05:00
inet_hashtables.h
soreuseport: fast reuseport TCP socket selection
2016-02-11 03:54:15 -05:00
inet_sock.h
net: Allow accepted sockets to be bound to l3mdev domain
2015-12-18 14:43:38 -05:00
inet_timewait_sock.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-10-20 06:08:27 -07:00
inetpeer.h
inet: tcp: fix inetpeer_set_addr_v4()
2015-12-16 00:14:12 -05:00
ip.h
net: ipv4: Convert IP network timestamps to be y2038 safe
2016-03-01 17:18:44 -05:00
ip6_checksum.h
ip6_fib.h
ipv6: Check rt->dst.from for the DST_NOCACHE route
2015-11-15 17:12:37 -05:00
ip6_route.h
ipv6: enforce flowi6_oif usage in ip6_dst_lookup_tail()
2016-01-29 20:31:26 -08:00
ip6_tunnel.h
net: replace dst_cache ip6_tunnel implementation with the generic one
2016-02-16 20:21:48 -05:00
ip_fib.h
route: check and remove route cache when we get route
2016-02-18 11:31:36 -05:00
ip_tunnels.h
bpf, vxlan, geneve, gre: fix usage of dst_cache on xmit
2016-03-08 13:58:47 -05:00
ip_vs.h
ipvs: Remove skb_sknet
2015-09-24 09:34:43 +09:00
ipcomp.h
ipconfig.h
ipv6.h
ipv6: Annotate change of locking mechanism for np->opt
2016-02-18 15:27:25 -05:00
ipx.h
iw_handler.h
cfg80211/wext: fix message ordering
2016-01-29 17:13:43 +01:00
l3mdev.h
net: l3mdev: address selection should only consider devices in L3 domain
2016-02-26 14:22:26 -05:00
lapb.h
lib80211.h
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc: Make llc_conn_ev_qfyr_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_conn.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc: Make llc_sap_action_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_sap.h
lwtunnel.h
lwtunnel: autoload of lwt modules
2016-02-21 22:00:28 -05:00
mac80211.h
mac80211: move MU_MIMO_OWNER flag to ieee80211_vif
2016-02-24 09:04:40 +01:00
mac802154.h
mac802154: fix mac header length check
2016-02-23 20:29:39 +01:00
mip6.h
mld.h
mpls.h
mpls_iptunnel.h
mpls: multipath route support
2015-10-23 06:26:42 -07:00
mrp.h
ndisc.h
Revert "ipv6: ndisc: inherit metadata dst when creating ndisc requests"
2015-12-01 15:07:59 -05:00
neighbour.h
net: add explicit logging and stat for neighbour table overflow
2015-08-10 13:46:21 -07:00
net_namespace.h
netfilter: cttimeout: add netns support
2015-12-14 12:48:58 +01:00
net_ratelimit.h
netevent.h
netlabel.h
netlink.h
netlink: add nla_get for le32 and le64
2015-09-30 13:16:44 +02:00
netprio_cgroup.h
net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
2015-12-08 22:02:33 -05:00
netrom.h
nexthop.h
nl802154.h
nl802154: add support for security layer
2015-09-30 13:16:44 +02:00
p8022.h
ping.h
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
pkt_cls.h
net: sched: cls_u32 add bit to specify software only rules
2016-03-01 16:05:39 -05:00
pkt_sched.h
net: sched: consolidate tc_classify{,_compat}
2015-08-27 14:18:48 -07:00
protocol.h
udp: restrict offloads to one namespace
2016-01-10 17:28:24 -05:00
psnap.h
raw.h
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
rawv6.h
red.h
regulatory.h
cfg80211: allow wiphy specific regdomain management
2014-12-17 11:49:55 +01:00
request_sock.h
net: add inet_sk_transparent() helper
2015-12-22 17:03:05 -05:00
rose.h
route.h
ipv4: Namespaceify ip_default_ttl sysctl knob
2016-02-16 20:42:54 -05:00
rtnetlink.h
netlink: Rightsize IFLA_AF_SPEC size calculation
2015-10-21 19:15:20 -07:00
sch_generic.h
net: sched: use pfifo_fast for non real queues
2016-03-03 17:38:46 -05:00
scm.h
unix: correctly track in-flight fds in sending process user_struct
2016-02-08 10:30:42 -05:00
secure_seq.h
slhc_vj.h
snmp.h
sock.h
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
sock_reuseport.h
soreuseport: fix NULL ptr dereference SO_REUSEPORT after bind
2016-01-19 14:44:23 -05:00
Space.h
stp.h
switchdev.h
switchdev: Adding MDB entry offload
2016-01-10 16:50:20 -05:00
tcp.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2016-02-23 00:09:14 -05:00
tcp_states.h
inet: add TCP_NEW_SYN_RECV state
2015-03-12 22:58:12 -04:00
timewait_sock.h
inet: remove BUG_ON() in twsk_destructor()
2015-07-09 15:12:20 -07:00
transp_v6.h
tso.h
net: tso: add support for IPv6
2015-10-26 22:24:22 -07:00
udp.h
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
udp_tunnel.h
net: ip_tunnel: remove 'csum_help' argument to iptunnel_handle_offloads
2016-02-12 05:52:16 -05:00
udplite.h
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
2015-02-04 01:34:15 -05:00
vsock_addr.h
vxlan.h
VXLAN: Support outer IPv4 Tx checksums by default
2016-02-21 22:05:50 -05:00
wext.h
wimax.h
x25.h
x25device.h
xfrm.h
xfrm: add rcu protection to sk->sk_policy[]
2015-12-11 19:22:06 -05:00