Local port leak on nl_socket_alloc/nl_socket_set_local_port(, 0)
I've found a bug in the following scenario (fragment of code): while (1) { struct nl_sock *sk = nl_socket_alloc(); if (sk == NULL) { fprintf(stderr, "Failed to allocate nl socket\n"); break; } nl_socket_set_local_port(sk, 0); nl_socket_free(sk); } The problem is that nl_socket_set_local_port(, 0) does not release local port if it is allocated before.
This commit is contained in:
parent
4be7adbb71
commit
b367024167
1 changed files with 8 additions and 1 deletions
|
@ -268,7 +268,14 @@ void nl_socket_set_local_port(struct nl_sock *sk, uint32_t port)
|
|||
{
|
||||
if (port == 0) {
|
||||
port = generate_local_port();
|
||||
sk->s_flags &= ~NL_OWN_PORT;
|
||||
/*
|
||||
* Release local port after generation of a new one to be
|
||||
* able to change local port using nl_socket_set_local_port(, 0)
|
||||
*/
|
||||
if (!(sk->s_flags & NL_OWN_PORT))
|
||||
release_local_port(sk->s_local.nl_pid);
|
||||
else
|
||||
sk->s_flags &= ~NL_OWN_PORT;
|
||||
} else {
|
||||
if (!(sk->s_flags & NL_OWN_PORT))
|
||||
release_local_port(sk->s_local.nl_pid);
|
||||
|
|
Loading…
Add table
Reference in a new issue