dect
/
libnl
Archived
13
0
Fork 0

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:
Коренберг Марк (дома) 2012-08-30 04:33:40 +06:00
parent a2b23ffe45
commit 5eee974e03
1 changed files with 9 additions and 2 deletions

View File

@ -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;
}