qemu-trivial
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-trivial] [PATCH] virtio-9p-proxy: Fix sockfd leak and modify the c


From: arei.gonglei
Subject: [Qemu-trivial] [PATCH] virtio-9p-proxy: Fix sockfd leak and modify the check logic
Date: Wed, 29 Oct 2014 18:52:17 +0800

From: Gonglei <address@hidden>

If connect() return false, the sockfd will leak,
meanwhile proxy_init() can't check the return value
of connect_namedsocket(), maybe cause unpredictable
results.

Let's move the sock_id check logic out, which can
check both if and else statements.

Signed-off-by: Gonglei <address@hidden>
---
 hw/9pfs/virtio-9p-proxy.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/hw/9pfs/virtio-9p-proxy.c b/hw/9pfs/virtio-9p-proxy.c
index b57966d..1c3aa5f 100644
--- a/hw/9pfs/virtio-9p-proxy.c
+++ b/hw/9pfs/virtio-9p-proxy.c
@@ -1112,6 +1112,7 @@ static int connect_namedsocket(const char *path)
     size = strlen(helper.sun_path) + sizeof(helper.sun_family);
     if (connect(sockfd, (struct sockaddr *)&helper, size) < 0) {
         fprintf(stderr, "socket error\n");
+        close(sockfd);
         return -1;
     }
 
@@ -1152,11 +1153,12 @@ static int proxy_init(FsContext *ctx)
         sock_id = connect_namedsocket(ctx->fs_root);
     } else {
         sock_id = atoi(ctx->fs_root);
-        if (sock_id < 0) {
-            fprintf(stderr, "socket descriptor not initialized\n");
-            g_free(proxy);
-            return -1;
-        }
+    }
+
+    if (sock_id < 0) {
+        fprintf(stderr, "socket descriptor not initialized\n");
+        g_free(proxy);
+        return -1;
     }
     g_free(ctx->fs_root);
     ctx->fs_root = NULL;
-- 
1.7.12.4





reply via email to

[Prev in Thread] Current Thread [Next in Thread]