Quellcode durchsuchen

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 vor 11 Jahren
Ursprung
Commit
d819663b66
2 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  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;