Просмотр исходного кода

Avoid a double-close on one failing case of the socketpair replacement code

Fix for bug 9400, spotted by coverity. Bug introduced in revision 2cb4f7a4
(subversion revision r389).
Nick Mathewson 10 лет назад
Родитель
Сommit
d819663b66
2 измененных файлов с 8 добавлено и 1 удалено
  1. 7 0
      changes/bug9400
  2. 1 1
      src/common/compat.c

+ 7 - 0
changes/bug9400

@@ -0,0 +1,7 @@
+  o Minor bugfixes:
+
+    - Avoid double-closing the listener socket in our socketpair replacement
+      (used on Windows) in the case where the addresses on our opened
+      sockets don't match what we expected. Fixes bug 9400; bugfix on
+      every released Tor version. Found by Coverity.
+

+ 1 - 1
src/common/compat.c

@@ -1281,7 +1281,6 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
       goto tidy_up_and_fail;
     if (size != sizeof(listen_addr))
       goto abort_tidy_up_and_fail;
-    tor_close_socket(listener);
     /* Now check we are talking to ourself by matching port and host on the
        two sockets.  */
     if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
@@ -1292,6 +1291,7 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
         || listen_addr.sin_port != connect_addr.sin_port) {
       goto abort_tidy_up_and_fail;
     }
+    tor_close_socket(listener);
     fd[0] = connector;
     fd[1] = acceptor;