From 6eda3b54822abb7216a9a8d027fed8e9d5dbad75 Mon Sep 17 00:00:00 2001 From: Ales Ledvinka Date: Wed, 16 Jan 2013 12:20:52 +0000 Subject: [PATCH] 3600946 check for failed bind on send, leaks --- ipmitool/lib/ipmi_tsol.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ipmitool/lib/ipmi_tsol.c b/ipmitool/lib/ipmi_tsol.c index 36e591e..9beb84b 100644 --- a/ipmitool/lib/ipmi_tsol.c +++ b/ipmitool/lib/ipmi_tsol.c @@ -446,7 +446,10 @@ ipmi_tsol_main(struct ipmi_intf * intf, int argc, char ** argv) lprintf(LOG_ERR, "Can't open port %d", port); return -1; } - bind(fd_socket, (struct sockaddr *)&sin, sizeof(sin)); + if (-1 == bind(fd_socket, (struct sockaddr *)&sin, sizeof(sin))) { + lprintf(LOG_ERR, "Failed to bind socket."); + return -1; + } /* * retrieve local IP address if not supplied on command line @@ -454,17 +457,20 @@ ipmi_tsol_main(struct ipmi_intf * intf, int argc, char ** argv) if (recvip == NULL) { result = intf->open(intf); /* must connect first */ if (result < 0) + close(fd_socket); return -1; mylen = sizeof(myaddr); if (getsockname(intf->fd, (struct sockaddr *)&myaddr, &mylen) < 0) { lperror(LOG_ERR, "getsockname failed"); + close(fd_socket); return -1; } recvip = inet_ntoa(myaddr.sin_addr); if (recvip == NULL) { lprintf(LOG_ERR, "Unable to find local IP address"); + close(fd_socket); return -1; } } @@ -482,6 +488,7 @@ ipmi_tsol_main(struct ipmi_intf * intf, int argc, char ** argv) result = ipmi_tsol_start(intf, recvip, port); if (result < 0) { lprintf(LOG_ERR, "Error starting SOL"); + close(fd_socket); return -1; }