diff mbox

libcacard/vscclient: fix leakage of socket on error paths

Message ID 1370023006-4639-1-git-send-email-alevy@redhat.com
State New
Headers show

Commit Message

Alon Levy May 31, 2013, 5:56 p.m. UTC
Spotted by Coverity.

Signed-off-by: Alon Levy <alevy@redhat.com>
---
 libcacard/vscclient.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Alon Levy May 31, 2013, 5:58 p.m. UTC | #1
> Spotted by Coverity.
> 

Self NACK.

I'll send a more complete patch, and use closesocket.

> Signed-off-by: Alon Levy <alevy@redhat.com>
> ---
>  libcacard/vscclient.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/libcacard/vscclient.c b/libcacard/vscclient.c
> index ac23647..9fcc548 100644
> --- a/libcacard/vscclient.c
> +++ b/libcacard/vscclient.c
> @@ -618,18 +618,22 @@ connect_to_qemu(
>      if (ret != 0) {
>          /* Error */
>          fprintf(stderr, "getaddrinfo failed\n");
> -        return -1;
> +        goto cleanup_socket;
>      }
>  
>      if (connect(sock, server->ai_addr, server->ai_addrlen) < 0) {
>          /* Error */
>          fprintf(stderr, "Could not connect\n");
> -        return -1;
> +        goto cleanup_socket;
>      }
>      if (verbose) {
>          printf("Connected (sizeof Header=%zd)!\n", sizeof(VSCMsgHeader));
>      }
>      return sock;
> +
> +cleanup_socket:
> +    close(sock);
> +    return -1;
>  }
>  
>  int
> --
> 1.8.2.1
> 
> 
>
diff mbox

Patch

diff --git a/libcacard/vscclient.c b/libcacard/vscclient.c
index ac23647..9fcc548 100644
--- a/libcacard/vscclient.c
+++ b/libcacard/vscclient.c
@@ -618,18 +618,22 @@  connect_to_qemu(
     if (ret != 0) {
         /* Error */
         fprintf(stderr, "getaddrinfo failed\n");
-        return -1;
+        goto cleanup_socket;
     }
 
     if (connect(sock, server->ai_addr, server->ai_addrlen) < 0) {
         /* Error */
         fprintf(stderr, "Could not connect\n");
-        return -1;
+        goto cleanup_socket;
     }
     if (verbose) {
         printf("Connected (sizeof Header=%zd)!\n", sizeof(VSCMsgHeader));
     }
     return sock;
+
+cleanup_socket:
+    close(sock);
+    return -1;
 }
 
 int