[tor-commits] [tor/maint-0.2.4] Avoid a double-close on one failing case of the socketpair replacement code

nickm at torproject.org nickm at torproject.org
Tue Sep 3 19:41:34 UTC 2013


commit d819663b661aea4f276404224fec6fe9c33f0bd9
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Aug 6 16:41:57 2013 -0400

    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).
---
 changes/bug9400     |    7 +++++++
 src/common/compat.c |    2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/changes/bug9400 b/changes/bug9400
new file mode 100644
index 0000000..9742240
--- /dev/null
+++ b/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.
+
diff --git a/src/common/compat.c b/src/common/compat.c
index bf6a0a4..d88c5f9 100644
--- a/src/common/compat.c
+++ b/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;
 





More information about the tor-commits mailing list