]> xenbits.xensource.com Git - people/andrewcoop/qemu-traditional.git/commitdiff
net: Fix memory/handle leaks in net_socket_listen_init()
authorKaifeng Zhu <kaifeng.zhu@citrix.com>
Tue, 22 Apr 2014 06:38:24 +0000 (07:38 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 16 Oct 2015 15:52:06 +0000 (16:52 +0100)
fd and s could be leaked in case bind/listen failed.

Signed-off-by: Kaifeng Zhu <kaifeng.zhu@citrix.com>
Coverity-IDs: 1055923 1055924
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
net.c

diff --git a/net.c b/net.c
index f3887a777f31e556cbbce1ec2e2b9ae53aaa21b5..33460d86876c11cf549f870ecf79c8e06cfe1a56 100644 (file)
--- a/net.c
+++ b/net.c
@@ -1460,6 +1460,7 @@ static int net_socket_listen_init(VLANState *vlan,
     fd = socket(PF_INET, SOCK_STREAM, 0);
     if (fd < 0) {
         perror("socket");
+        qemu_free(s);
         return -1;
     }
     socket_set_nonblock(fd);
@@ -1471,11 +1472,15 @@ static int net_socket_listen_init(VLANState *vlan,
     ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
     if (ret < 0) {
         perror("bind");
+        closesocket(fd);
+        qemu_free(s);
         return -1;
     }
     ret = listen(fd, 0);
     if (ret < 0) {
         perror("listen");
+        closesocket(fd);
+        qemu_free(s);
         return -1;
     }
     s->vlan = vlan;