Prevent potential socket file descriptor leak
This may happen when passing connected socket to nl_cache_mngr_alloc(). Now, nl_connect() will return error trying to connect already connected socket. Also, dont call close(-1) if socket() fails.
This commit is contained in:
parent
a2b23ffe45
commit
5eee974e03
1 changed files with 9 additions and 2 deletions
11
lib/nl.c
11
lib/nl.c
|
@ -69,6 +69,8 @@
|
|||
* Creates a netlink socket using the specified protocol, binds the socket
|
||||
* and issues a connection attempt.
|
||||
*
|
||||
* This function fail if socket is already connected.
|
||||
*
|
||||
* @note SOCK_CLOEXEC is set on the socket if available.
|
||||
*
|
||||
* @return 0 on success or a negative error code.
|
||||
|
@ -82,6 +84,9 @@ int nl_connect(struct nl_sock *sk, int protocol)
|
|||
flags |= SOCK_CLOEXEC;
|
||||
#endif
|
||||
|
||||
if (sk->s_fd != -1)
|
||||
return -NLE_BAD_SOCK;
|
||||
|
||||
sk->s_fd = socket(AF_NETLINK, SOCK_RAW | flags, protocol);
|
||||
if (sk->s_fd < 0) {
|
||||
err = -nl_syserr2nlerr(errno);
|
||||
|
@ -123,8 +128,10 @@ int nl_connect(struct nl_sock *sk, int protocol)
|
|||
|
||||
return 0;
|
||||
errout:
|
||||
close(sk->s_fd);
|
||||
sk->s_fd = -1;
|
||||
if (sk->s_fd != -1) {
|
||||
close(sk->s_fd);
|
||||
sk->s_fd = -1;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue