]> xenbits.xensource.com Git - qemu-upstream-4.6-testing.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>
Tue, 5 Aug 2014 19:19:22 +0000 (14:19 -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 899e67cfd711db3e9a6666ef7c558ce7554a31c6..4f53b9b079f94c016eef7904ed6f0cf91ed17db6 100644 (file)
@@ -369,8 +369,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);
     }
 }