Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1223c67c authored by Jorge Boncompte [DTI2]'s avatar Jorge Boncompte [DTI2] Committed by David S. Miller
Browse files

udp: fix for unicast RX path optimization



Commits 5051ebd2 and
5051ebd2 ("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: default avatarJorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2488f56d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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();
+2 −2
Original line number Diff line number Diff line
@@ -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();