Browse Source

Fix another case of bug 8206; patch from flupzor

Nick Mathewson 11 years ago
parent
commit
0b827cbcb1
1 changed files with 16 additions and 4 deletions
  1. 16 4
      src/common/compat.c

+ 16 - 4
src/common/compat.c

@@ -1172,10 +1172,22 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
     return -errno;
 
 #if defined(FD_CLOEXEC)
-  if (SOCKET_OK(fd[0]))
-    fcntl(fd[0], F_SETFD, FD_CLOEXEC);
-  if (SOCKET_OK(fd[1]))
-    fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+  if (SOCKET_OK(fd[0])) {
+    r = fcntl(fd[0], F_SETFD, FD_CLOEXEC);
+    if (r == -1) {
+      close(fd[0]);
+      close(fd[1]);
+      return -errno;
+    }
+  }
+  if (SOCKET_OK(fd[1])) {
+    r = fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+    if (r == -1) {
+      close(fd[0]);
+      close(fd[1]);
+      return -errno;
+    }
+  }
 #endif
   goto sockets_ok; /* So that sockets_ok will not be unused. */