osmith has submitted this change. ( https://gerrit.osmocom.org/c/libgtpnl/+/36017?usp=email )
Change subject: gtp-link: close sockets on error ...................................................................... gtp-link: close sockets on error Avoid resource leaks. Fixes: CID#347578, CID#347579 Change-Id: I9c437de9712ebe568528b4c9ee1e89a4ba5cd5d1 --- M tools/gtp-link.c 1 file changed, 35 insertions(+), 7 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve fixeria: Looks good to me, approved diff --git a/tools/gtp-link.c b/tools/gtp-link.c index 0881f15..0b14bc5 100644 --- a/tools/gtp-link.c +++ b/tools/gtp-link.c @@ -80,16 +80,15 @@ static int setup_socket(struct gtp_server_sock *gtp_sock, int family) { - int fd1 = socket(family, SOCK_DGRAM, 0); - int fd2 = socket(family, SOCK_DGRAM, 0); int one = 1; - if (fd1 < 0 || fd2 < 0) + gtp_sock->fd1 = socket(family, SOCK_DGRAM, 0); + gtp_sock->fd2 = socket(family, SOCK_DGRAM, 0); + + if (gtp_sock->fd1 < 0 || gtp_sock->fd2 < 0) return -1; gtp_sock->family = family; - gtp_sock->fd1 = fd1; - gtp_sock->fd2 = fd2; switch (family) { case AF_INET: @@ -105,9 +104,9 @@ >p_sock->addr.v6, 3386); setup_sockaddr_in6(>p_sock->sockaddr.fd2.in6, >p_sock->addr.v6, 2152); - if (setsockopt(fd1, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0) + if (setsockopt(gtp_sock->fd1, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0) perror("setsockopt IPV6_V6ONLY: "); - if (setsockopt(fd2, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0) + if (setsockopt(gtp_sock->fd2, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0) perror("setsockopt IPV6_V6ONLY: "); break; } @@ -115,6 +114,19 @@ return 0; } +static void close_socket(struct gtp_server_sock *gtp_sock) +{ + if (gtp_sock->fd1 != -1) { + close(gtp_sock->fd1); + gtp_sock->fd1 = -1; + } + + if (gtp_sock->fd2 != -1) { + close(gtp_sock->fd2); + gtp_sock->fd2 = -1; + } +} + int main(int argc, char *argv[]) { char buf[MNL_SOCKET_BUFFER_SIZE]; @@ -186,15 +198,18 @@ if (setup_socket(>p_sock, family) < 0) { perror("socket"); + close_socket(>p_sock); exit(EXIT_FAILURE); } if (bind(gtp_sock.fd1, (struct sockaddr *) >p_sock.sockaddr.fd1, gtp_sock.len) < 0) { perror("bind"); + close_socket(>p_sock); exit(EXIT_FAILURE); } if (bind(gtp_sock.fd2, (struct sockaddr *) >p_sock.sockaddr.fd2, gtp_sock.len) < 0) { perror("bind"); + close_socket(>p_sock); exit(EXIT_FAILURE); } @@ -204,6 +219,7 @@ ret = gtp_dev_create(-1, argv[2], gtp_sock.fd1, gtp_sock.fd2); if (ret < 0) { perror("cannot create GTP device\n"); + close_socket(>p_sock); exit(EXIT_FAILURE); } -- To view, visit https://gerrit.osmocom.org/c/libgtpnl/+/36017?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libgtpnl Gerrit-Branch: master Gerrit-Change-Id: I9c437de9712ebe568528b4c9ee1e89a4ba5cd5d1 Gerrit-Change-Number: 36017 Gerrit-PatchSet: 1 Gerrit-Owner: osmith <osm...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de> Gerrit-Reviewer: osmith <osm...@sysmocom.de> Gerrit-Reviewer: pespin <pes...@sysmocom.de> Gerrit-MessageType: merged