]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
nbd: Close socket on negotiation failure.
authorHani Benhabiles <kroosec@gmail.com>
Mon, 12 May 2014 23:35:15 +0000 (00:35 +0100)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Wed, 16 Jul 2014 00:28:01 +0000 (19:28 -0500)
Otherwise, the nbd client may hang waiting for the server response.

Signed-off-by: Hani Benhabiles <hani@linux.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
(cherry picked from commit 36af599417dde11747a27dc8550ff2281657a8ff)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
blockdev-nbd.c
qemu-nbd.c

index a700d52d71ade19fbd82f5235b715b6c68bc53cc..18dc528761adf89663e338b604caedba716bb6c4 100644 (file)
@@ -27,8 +27,8 @@ static void nbd_accept(void *opaque)
     socklen_t addr_len = sizeof(addr);
 
     int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len);
-    if (fd >= 0) {
-        nbd_client_new(NULL, fd, nbd_client_put);
+    if (fd >= 0 && !nbd_client_new(NULL, fd, nbd_client_put)) {
+        close(fd);
     }
 }
 
index c26c98ef1d97ae7b8a2b375572cdb2ba1e71213f..7a2cff92c2a6d4a7fb174ff9e738cf2f17b145fe 100644 (file)
@@ -299,8 +299,10 @@ static void nbd_accept(void *opaque)
         return;
     }
 
-    if (fd >= 0 && nbd_client_new(exp, fd, nbd_client_closed)) {
+    if (nbd_client_new(exp, fd, nbd_client_closed)) {
         nb_fds++;
+    } else {
+        close(fd);
     }
 }