[PATCH 2/3] lib/socket: don't fail if no more local ports can be assigned in nl_socket_alloc

Thomas Haller thaller at redhat.com
Tue Apr 8 05:06:25 PDT 2014


By failing inside of nl_socket_alloc(), the user can not even work around
when running out of local ports. This patch changes that if there are no more
local ports, we set the port to UINT32_MAX. This is a consistent behavior
to calling nl_socket_set_local_port(sk, 0).

In general, since nl_socket_set_local_port() does not restict the generated
ports in any way and we cannot assume to have a valid port. So the check in
the constructor was harmful and users who ever encountered it (because they
created 1024 libnl3 sockets) could not even work around it.

Signed-off-by: Thomas Haller <thaller at redhat.com>
---
 lib/socket.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/lib/socket.c b/lib/socket.c
index 1c39a12..f94ee7f 100644
--- a/lib/socket.c
+++ b/lib/socket.c
@@ -126,10 +126,6 @@ static struct nl_sock *__alloc_socket(struct nl_cb *cb)
 	sk->s_peer.nl_family = AF_NETLINK;
 	sk->s_seq_expect = sk->s_seq_next = time(0);
 	sk->s_local.nl_pid = generate_local_port();
-	if (sk->s_local.nl_pid == UINT32_MAX) {
-		nl_socket_free(sk);
-		return NULL;
-	}
 
 	return sk;
 }
-- 
1.9.0




More information about the libnl mailing list