kernel_optimize_test/net/ipv6
Hannes Frederic Sowa 95f4a45de1 net: avoid reference counter overflows on fib_rules in multicast forwarding
Bob Falken reported that after 4G packets, multicast forwarding stopped
working. This was because of a rule reference counter overflow which
freed the rule as soon as the overflow happend.

This patch solves this by adding the FIB_LOOKUP_NOREF flag to
fib_rules_lookup calls. This is safe even from non-rcu locked sections
as in this case the flag only implies not taking a reference to the rule,
which we don't need at all.

Rules only hold references to the namespace, which are guaranteed to be
available during the call of the non-rcu protected function reg_vif_xmit
because of the interface reference which itself holds a reference to
the net namespace.

Fixes: f0ad0860d0 ("ipv4: ipmr: support multiple tables")
Fixes: d1db275dd3 ("ipv6: ip6mr: support multiple tables")
Reported-by: Bob Falken <NetFestivalHaveFun@gmx.com>
Cc: Patrick McHardy <kaber@trash.net>
Cc: Thomas Graf <tgraf@suug.ch>
Cc: Julian Anastasov <ja@ssi.bg>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-01-14 17:37:25 -08:00
..
netfilter netfilter: SYNPROXY target: restrict to INPUT/FORWARD 2013-12-11 11:30:25 +01:00
addrconf_core.c
addrconf.c ipv6: add link-local, sit and loopback address with INFINITY_LIFE_TIME 2014-01-09 23:07:47 -05:00
addrlabel.c
af_inet6.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-11-19 15:50:47 -08:00
ah6.c
anycast.c
datagram.c ipv6: do not erase dst address with flow label destination 2013-12-10 22:51:00 -05:00
esp6.c
exthdrs_core.c
exthdrs_offload.c
exthdrs.c
fib6_rules.c inet: fix NULL pointer Oops in fib(6)_rule_suppress 2013-12-10 17:54:23 -05:00
icmp.c
inet6_connection_sock.c
inet6_hashtables.c
ip6_checksum.c
ip6_fib.c
ip6_flowlabel.c
ip6_gre.c
ip6_icmp.c
ip6_input.c
ip6_offload.c
ip6_offload.h
ip6_output.c ipv6: pmtudisc setting not respected with UFO/CORK 2013-12-18 17:52:15 -05:00
ip6_tunnel.c ipv6: fix the use of pcpu_tstats in ip6_tunnel 2014-01-02 19:37:21 -05:00
ip6_vti.c ipv6: pcpu_tstats.syncp should be initialised in ip6_vti.c 2014-01-07 14:12:46 -05:00
ip6mr.c net: avoid reference counter overflows on fib_rules in multicast forwarding 2014-01-14 17:37:25 -08:00
ipcomp6.c
ipv6_sockglue.c
Kconfig
Makefile
mcast.c
mip6.c
ndisc.c ipv6: judge the accept_ra_defrtr before calling rt6_route_rcv 2013-12-02 16:00:38 -05:00
netfilter.c
output_core.c
ping.c inet: fix addr_len/msg->msg_namelen assignment in recv_error and rxpmtu functions 2013-11-23 14:46:23 -08:00
proc.c
protocol.c net: remove outdated comment for ipv4 and ipv6 protocol handler 2013-11-28 18:47:51 -05:00
raw.c ipv6: do not erase dst address with flow label destination 2013-12-10 22:51:00 -05:00
reassembly.c
route.c ipv6: always set the new created dst's from in ip6_rt_copy 2013-12-19 18:35:21 -05:00
sit.c ipv6: fix the use of pcpu_tstats in sit 2014-01-01 22:48:59 -05:00
syncookies.c
sysctl_net_ipv6.c
tcp_ipv6.c ipv6: do not erase dst address with flow label destination 2013-12-10 22:51:00 -05:00
tcpv6_offload.c gro: Clean up tcpX_gro_receive checksum verification 2013-11-23 14:46:19 -08:00
tunnel6.c
udp_impl.h
udp_offload.c
udp.c ipv6: do not erase dst address with flow label destination 2013-12-10 22:51:00 -05:00
udplite.c
xfrm6_input.c
xfrm6_mode_beet.c
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
xfrm6_output.c
xfrm6_policy.c
xfrm6_state.c
xfrm6_tunnel.c