fixed patch for sk_reuse
Subsystems (3)
PATCH 1/1 fixed patch for sk_reuse
ah, it seems the sk_reuse > 1 is really used...
do not try the previous patch.
http://puding.mine.nu/patches/patch-reuse
net/ipv4/tcp_ipv4.c2004-12-08 15:07:51.985722208 +0200 renamed from net/ipv4/tcp_ipv4.c.orig2004-12-07 14:54:12.597084704 +0200 +4 -2
@@ -50,6 +50,7 @@ *YOSHIFUJI Hideaki @USAGI and:Support IPV6_V6ONLY socket option, which *Alexey Kuznetsovallow both IPv4 and IPv6 sockets to bind *a single port at the same time. + *Ilya Pashkovsky:fix TCP_LISTEN check on reuse */ #include <linux/config.h>
@@ -184,7 +185,8 @@ static inline int tcp_bind_conflict(stru const u32 sk_rcv_saddr = tcp_v4_rcv_saddr(sk); struct sock *sk2; struct hlist_node *node; -int reuse = sk->sk_reuse; +unsigned char reuse = sk->sk_reuse; +unsigned char state = sk->sk_state; sk_for_each_bound(sk2, node, &tb->owners) { if (sk != sk2 &&
@@ -193,7 +195,7 @@ static inline int tcp_bind_conflict(stru !sk2->sk_bound_dev_if || sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) { if (!reuse || !sk2->sk_reuse || - sk2->sk_state == TCP_LISTEN) { + (state == TCP_LISTEN && sk2->sk_state == TCP_LISTEN)) { const u32 sk2_rcv_saddr = tcp_v4_rcv_saddr(sk2); if (!sk2_rcv_saddr || !sk_rcv_saddr || sk2_rcv_saddr == sk_rcv_saddr)