lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <4C87BF3A.5070004@ans.pl> Date: Wed, 08 Sep 2010 18:52:10 +0200 From: Krzysztof Olędzki <ole@....pl> To: Eric Dumazet <eric.dumazet@...il.com> CC: David Miller <davem@...emloft.net>, brian.haley@...com, netdev@...r.kernel.org Subject: Re: [PATCH v2] udp: add rehash on connect() On 2010-09-08 17:08, Eric Dumazet wrote: > Hmm... We should lock primary hash table too in udp_lib_rehash(), to > prevent another thread to insert another socket on same tuple (local > addr, local port) while doing our move. > > Thanks > > [PATCH v2] 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@....pl> > Signed-off-by: Eric Dumazet <eric.dumazet@...il.com> Works like a charm, thank you. Tested-by: Krzysztof Piotr Oledzki <ole@....pl> Best regards, Krzysztof Olędzki -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists