Re: Linux 3.1-rc9
From: Simon Kirby <hidden>
Date: 2011-11-02 19:16:27
Also in:
netdev
On Wed, Nov 02, 2011 at 06:58:21PM +0100, Eric Dumazet wrote:
Le mercredi 02 novembre 2011 ?? 18:49 +0100, Eric Dumazet a ??crit :quoted
Le mercredi 02 novembre 2011 ?? 18:27 +0100, Eric Dumazet a ??crit :quoted
I believe it might come from commit 0e734419 (ipv4: Use inet_csk_route_child_sock() in DCCP and TCP.) In case inet_csk_route_child_sock() returns NULL, we dont release socket lock.Yes, thats the problem. I am testing following patch :diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 0ea10ee..683d97a 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c@@ -1510,6 +1510,7 @@ exit: NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); return NULL; put_and_exit: + bh_unlock_sock(newsk); sock_put(newsk); goto exit; }This indeed solves the problem, but more closer inspection is needed to close all bugs, not this only one. # netstat -s Ip: 6961157 total packets received 0 forwarded 0 incoming packets discarded 6961157 incoming packets delivered 6961049 requests sent out 2 dropped because of missing route //// HERE, this is the origin
Actually, we have an anti-abuse daemon that injects blackhole routes, so this makes sense. (The daemon was written before ipsets were merged and normal netfilter rules make it fall over under attack.) I'll try with this patch. Thanks! Simon-