summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Boncompte [DTI2] <jorge@dti2.net>2010-04-08 04:56:48 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-12 15:03:01 -0700
commit5049664c319adc3f8d136c2fc4bf9d57c33ffe57 (patch)
treef231bfa108f7efb0b55e293f6532cc8a804e91f1
parent8ccd10349128212f41b131cd2772917c06c51406 (diff)
downloadkernel-crypto-5049664c319adc3f8d136c2fc4bf9d57c33ffe57.tar.gz
kernel-crypto-5049664c319adc3f8d136c2fc4bf9d57c33ffe57.tar.xz
kernel-crypto-5049664c319adc3f8d136c2fc4bf9d57c33ffe57.zip
udp: fix for unicast RX path optimization
[ Upstream commit 1223c67c0938d2df309fde618bd82c87c8c1af04 ] Commits 5051ebd275de672b807c28d93002c2fb0514a3c9 and 5051ebd275de672b807c28d93002c2fb0514a3c9 ("ipv[46]: udp: optimize unicast RX path") broke some programs. After upgrading a L2TP server to 2.6.33 it started to fail, tunnels going up an down, after the 10th tunnel came up. My modified rp-l2tp uses a global unconnected socket bound to (INADDR_ANY, 1701) and one connected socket per tunnel after parameter negotiation. After ten sockets were open and due to mixed parameters to udp[46]_lib_lookup2() kernel started to drop packets. Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--net/ipv4/udp.c4
-rw-r--r--net/ipv6/udp.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 112c61135f9..16190cac0b6 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -471,8 +471,8 @@ static struct sock *__udp4_lib_lookup(struct net *net, __be32 saddr,
if (hslot->count < hslot2->count)
goto begin;
- result = udp4_lib_lookup2(net, INADDR_ANY, sport,
- daddr, hnum, dif,
+ result = udp4_lib_lookup2(net, saddr, sport,
+ INADDR_ANY, hnum, dif,
hslot2, slot2);
}
rcu_read_unlock();
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index d9714d20705..4f57cd2b353 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -258,8 +258,8 @@ static struct sock *__udp6_lib_lookup(struct net *net,
if (hslot->count < hslot2->count)
goto begin;
- result = udp6_lib_lookup2(net, &in6addr_any, sport,
- daddr, hnum, dif,
+ result = udp6_lib_lookup2(net, saddr, sport,
+ &in6addr_any, hnum, dif,
hslot2, slot2);
}
rcu_read_unlock();