Eric Dumazet
719f835853
udp: add rehash on connect()
...
commit 30fff923 introduced in linux-2.6.33 (udp: bind() optimisation)
added a secondary hash on UDP, hashed on (local addr, local port).
Problem is that following sequence :
fd = socket(...)
connect(fd, &remote, ...)
not only selects remote end point (address and port), but also sets
local address, while UDP stack stored in secondary hash table the socket
while its local address was INADDR_ANY (or ipv6 equivalent)
Sequence is :
- autobind() : choose a random local port, insert socket in hash tables
[while local address is INADDR_ANY]
- connect() : set remote address and port, change local address to IP
given by a route lookup.
When an incoming UDP frame comes, if more than 10 sockets are found in
primary hash table, we switch to secondary table, and fail to find
socket because its local address changed.
One solution to this problem is to rehash datagram socket if needed.
We add a new rehash(struct socket *) method in "struct proto", and
implement this method for UDP v4 & v6, using a common helper.
This rehashing only takes care of secondary hash table, since primary
hash (based on local port only) is not changed.
Reported-by: Krzysztof Piotr Oledzki <ole@ans.pl>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-09-08 21:45:01 -07:00
..
netfilter
netfilter: fix CONFIG_COMPAT support
2010-08-23 14:41:22 -07:00
af_inet.c
inet, inet6: make tcp_sendmsg() and tcp_sendpage() through inet_sendmsg() and inet_sendpage()
2010-07-12 20:21:46 -07:00
ah4.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
arp.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
cipso_ipv4.c
net: Remove unnecessary returns from void function()s
2010-05-17 23:23:14 -07:00
datagram.c
udp: add rehash on connect()
2010-09-08 21:45:01 -07:00
devinet.c
arp_notify: allow drivers to explicitly request a notification event.
2010-05-31 00:27:44 -07:00
esp4.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
fib_frontend.c
ipv4: Fix reverse path filtering with multipath routing.
2010-09-07 13:57:24 -07:00
fib_hash.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
fib_lookup.h
fib_rules.c
net: rtnetlink: decouple rtnetlink address families from real address families
2010-04-26 16:13:54 +02:00
fib_semantics.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
fib_trie.c
ipv4: Suppress lockdep-RCU false positive in FIB trie (3)
2010-09-08 14:14:20 -07:00
icmp.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
igmp.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
inet_connection_sock.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
inet_diag.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
inet_fragment.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
inet_hashtables.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
inet_lro.c
inet_timewait_sock.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
inetpeer.c
inetpeer: restore small inet_peer structures
2010-06-16 11:55:39 -07:00
ip_forward.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
ip_fragment.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
ip_gre.c
gre: propagate ipv6 transport class
2010-07-08 21:35:58 -07:00
ip_input.c
net: use this_cpu_ptr()
2010-06-28 23:24:29 -07:00
ip_options.c
net: Remove unnecessary returns from void function()s
2010-05-17 23:23:14 -07:00
ip_output.c
ip_fragment: fix subtracting PPPOE_SES_HLEN from mtu twice
2010-08-02 17:25:07 -07:00
ip_sockglue.c
net - IP_NODEFRAG option for IPv4 socket
2010-06-23 13:16:38 -07:00
ipcomp.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
ipconfig.c
ipconfig: send host-name in DHCP requests
2010-06-02 07:05:03 -07:00
ipip.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
ipmr.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-07-20 18:25:24 -07:00
Kconfig
ipv4: minor fix about RPF in help of Kconfig
2010-09-01 14:29:36 -07:00
Makefile
netfilter.c
Merge branch 'master' of /repos/git/net-next-2.6
2010-06-15 17:31:06 +02:00
proc.c
snmp: 64bit ipstats_mib for all arches
2010-06-30 13:31:19 -07:00
protocol.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
raw.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
route.c
net: blackhole route should always be recalculated
2010-09-08 14:35:43 -07:00
syncookies.c
syncookies: add support for ECN
2010-06-26 22:00:03 -07:00
sysctl_net_ipv4.c
net: reserve ports for applications using fixed port numbers
2010-05-15 23:28:40 -07:00
tcp.c
tcp: select(writefds) don't hang up when a peer close connection
2010-08-25 23:02:48 -07:00
tcp_bic.c
tcp_cong.c
net/ipv4: Eliminate kstrdup memory leak
2010-08-27 19:31:56 -07:00
tcp_cubic.c
tcp_diag.c
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
TCP: tcp_hybla: Fix integer overflow in slow start increment
2010-06-02 07:15:48 -07:00
tcp_illinois.c
tcp_input.c
tcp: no md5sig option size check bug
2010-08-07 20:24:28 -07:00
tcp_ipv4.c
inet, inet6: make tcp_sendmsg() and tcp_sendpage() through inet_sendmsg() and inet_sendpage()
2010-07-12 20:21:46 -07:00
tcp_lp.c
tcp_minisocks.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
tcp_output.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-07-20 18:25:24 -07:00
tcp_probe.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
tcp_scalable.c
tcp_timer.c
tcp: Combat per-cpu skew in orphan tests.
2010-08-25 02:27:49 -07:00
tcp_vegas.c
tcp_vegas.h
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tunnel4.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
udp.c
udp: add rehash on connect()
2010-09-08 21:45:01 -07:00
udp_impl.h
udplite.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
xfrm4_input.c
net/ipv4: EXPORT_SYMBOL cleanups
2010-07-12 12:57:54 -07:00
xfrm4_mode_beet.c
xfrm4_mode_transport.c
xfrm4_mode_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
xfrm4_output.c
netfilter: ipv4: use NFPROTO values for NF_HOOK invocation
2010-03-25 16:00:30 +01:00
xfrm4_policy.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-07-07 15:59:38 -07:00
xfrm4_state.c
xfrm4_tunnel.c