[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] virtio-9p-proxy: Fix sockfd leak and modify the che
From: |
arei.gonglei |
Subject: |
[Qemu-devel] [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
- [Qemu-devel] [PATCH] virtio-9p-proxy: Fix sockfd leak and modify the check logic,
arei.gonglei <=