Skip to content

Commit 8d238b2

Browse files
committed
Revert "tcp: bind() fix when many ports are bound"
This reverts two commits: fda48a0 tcp: bind() fix when many ports are bound and a follow-on fix for it: 6443bb1 ipv6: Fix inet6_csk_bind_conflict() It causes problems with binding listening sockets when time-wait sockets from a previous instance still are alive. It's too late to keep fiddling with this so late in the -rc series, and we'll deal with it in net-next-2.6 instead. Signed-off-by: David S. Miller <[email protected]>
1 parent eb4fd8c commit 8d238b2

File tree

2 files changed

+10
-21
lines changed

2 files changed

+10
-21
lines changed

net/ipv4/inet_connection_sock.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,13 @@ int inet_csk_bind_conflict(const struct sock *sk,
7070
(!sk->sk_bound_dev_if ||
7171
!sk2->sk_bound_dev_if ||
7272
sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) {
73-
const __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
74-
7573
if (!reuse || !sk2->sk_reuse ||
7674
sk2->sk_state == TCP_LISTEN) {
75+
const __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
7776
if (!sk2_rcv_saddr || !sk_rcv_saddr ||
7877
sk2_rcv_saddr == sk_rcv_saddr)
7978
break;
80-
} else if (reuse && sk2->sk_reuse &&
81-
sk2_rcv_saddr &&
82-
sk2_rcv_saddr == sk_rcv_saddr)
83-
break;
79+
}
8480
}
8581
}
8682
return node != NULL;
@@ -124,11 +120,9 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum)
124120
smallest_size = tb->num_owners;
125121
smallest_rover = rover;
126122
if (atomic_read(&hashinfo->bsockets) > (high - low) + 1) {
127-
if (!inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb)) {
128-
spin_unlock(&head->lock);
129-
snum = smallest_rover;
130-
goto have_snum;
131-
}
123+
spin_unlock(&head->lock);
124+
snum = smallest_rover;
125+
goto have_snum;
132126
}
133127
}
134128
goto next;

net/ipv6/inet6_connection_sock.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,11 @@ int inet6_csk_bind_conflict(const struct sock *sk,
4242
if (sk != sk2 &&
4343
(!sk->sk_bound_dev_if ||
4444
!sk2->sk_bound_dev_if ||
45-
sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) {
46-
if ((!sk->sk_reuse || !sk2->sk_reuse ||
47-
sk2->sk_state == TCP_LISTEN) &&
48-
ipv6_rcv_saddr_equal(sk, sk2))
49-
break;
50-
else if (sk->sk_reuse && sk2->sk_reuse &&
51-
!ipv6_addr_any(inet6_rcv_saddr(sk)) &&
52-
ipv6_rcv_saddr_equal(sk, sk2))
53-
break;
54-
}
45+
sk->sk_bound_dev_if == sk2->sk_bound_dev_if) &&
46+
(!sk->sk_reuse || !sk2->sk_reuse ||
47+
sk2->sk_state == TCP_LISTEN) &&
48+
ipv6_rcv_saddr_equal(sk, sk2))
49+
break;
5550
}
5651

5752
return node != NULL;

0 commit comments

Comments
 (0)