summaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorTom Herbert <tom@herbertland.com>2016-12-14 16:54:15 -0800
committerDavid S. Miller <davem@davemloft.net>2016-12-17 11:13:19 -0500
commit9af7e923fdd82dc25ad5ea75e24e92708947f961 (patch)
tree8422da81ea838c2fb4dd8aa50ad22a0797115c9e /net/ipv4
parent0eb6984f70005e792917d9e51142a57f79b32c91 (diff)
downloadlinux-9af7e923fdd82dc25ad5ea75e24e92708947f961.tar.gz
linux-9af7e923fdd82dc25ad5ea75e24e92708947f961.tar.bz2
linux-9af7e923fdd82dc25ad5ea75e24e92708947f961.zip
inet: Don't go into port scan when looking for specific bind port
inet_csk_get_port is called with port number (snum argument) that may be zero or nonzero. If it is zero, then the intent is to find an available ephemeral port number to bind to. If snum is non-zero then the caller is asking to allocate a specific port number. In the latter case we never want to perform the scan in ephemeral port range. It is conceivable that this can happen if the "goto again" in "tb_found:" is done. This patch adds a check that snum is zero before doing the "goto again". Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/inet_connection_sock.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index d5d3ead0a6c3..f59838a60ea5 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -212,7 +212,7 @@ tb_found:
sk->sk_reuseport &&
!rcu_access_pointer(sk->sk_reuseport_cb) &&
uid_eq(tb->fastuid, uid))) &&
- smallest_size != -1 && --attempts >= 0) {
+ !snum && smallest_size != -1 && --attempts >= 0) {
spin_unlock_bh(&head->lock);
goto again;
}