Commit b4f56dd4 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Obviate need for doing a CLOEXEC on pipes: just close them before exec

parent e669d25e
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -2986,7 +2986,7 @@ tor_spawn_background(const char *const filename, int *stdout_read,
    child_state = CHILD_STATE_REDIRECT;

    /* Link stdin to /dev/null */
    fd = open("/dev/null", O_RDONLY);
    fd = open("/dev/null", O_RDONLY); /* NOT cloexec, obviously. */
    if (fd != -1)
      dup2(STDIN_FILENO, fd);
    else
@@ -2994,11 +2994,18 @@ tor_spawn_background(const char *const filename, int *stdout_read,

    child_state = CHILD_STATE_CLOSEFD;

    close(stderr_pipe[0]);
    close(stderr_pipe[1]);
    close(stdout_pipe[0]);
    close(stdout_pipe[1]);
    close(fd);

    /* Close all other fds, including the read end of the pipe */
    /* XXX: use closefrom if available, or better still set FD_CLOEXEC
       on all of Tor's open files */
    for (fd = STDERR_FILENO + 1; fd < max_fd; fd++)
    /* XXX: We should now be doing enough FD_CLOEXEC setting to make
     * this needless. */
    for (fd = STDERR_FILENO + 1; fd < max_fd; fd++) {
      close(fd);
    }

    child_state = CHILD_STATE_EXEC;