zebra: fix fd going out of scope leaks the handle

the file descriptor is closed if it has been locally created.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
Philippe Guibert 2020-09-22 14:17:15 +02:00
parent e2dcd0c2c5
commit 7529bf8f05

View File

@ -185,7 +185,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
if (sock < 0) { if (sock < 0) {
flog_err_sys(EC_LIB_SOCKET, "netlink( %u) socket() error: %s", flog_err_sys(EC_LIB_SOCKET, "netlink( %u) socket() error: %s",
sock, safe_strerror(errno)); sock, safe_strerror(errno));
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
return NS_UNKNOWN; return NS_UNKNOWN;
} }
@ -199,7 +199,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
"netlink( %u) socket() bind error: %s", sock, "netlink( %u) socket() bind error: %s", sock,
safe_strerror(errno)); safe_strerror(errno));
close(sock); close(sock);
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
return NS_UNKNOWN; return NS_UNKNOWN;
} }
@ -222,7 +222,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
ret = send_receive(sock, nlh, seq, buf); ret = send_receive(sock, nlh, seq, buf);
if (ret < 0) { if (ret < 0) {
close(sock); close(sock);
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
return NS_UNKNOWN; return NS_UNKNOWN;
} }
@ -267,7 +267,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
"netlink( %u) recvfrom() error 2 when reading: %s", "netlink( %u) recvfrom() error 2 when reading: %s",
fd, safe_strerror(errno)); fd, safe_strerror(errno));
close(sock); close(sock);
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
if (errno == ENOTSUP) { if (errno == ENOTSUP) {
zlog_debug("NEWNSID locally generated"); zlog_debug("NEWNSID locally generated");
@ -289,7 +289,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
ret = send_receive(sock, nlh, seq, buf); ret = send_receive(sock, nlh, seq, buf);
if (ret < 0) { if (ret < 0) {
close(sock); close(sock);
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
return NS_UNKNOWN; return NS_UNKNOWN;
} }
@ -321,7 +321,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
} while (len != 0 && ret == 0); } while (len != 0 && ret == 0);
} }
if (fd_param == -1) if (netnspath)
close(fd); close(fd);
close(sock); close(sock);
return return_nsid; return return_nsid;