tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 5567617e3b725f8a99acada48a5855b2150bc0f4
parent e5b51eb10f6802ea4cff9fab6d0b91e905630d15
Author: Alexander Hansen Færøy <ahf@torproject.org>
Date:   Tue,  3 Dec 2024 15:43:34 +0000

Merge branch 'ticket40990_049_01' into 'main'

process: Don't close all FDs on new spawn

Closes #40990

See merge request tpo/core/tor!848
Diffstat:
Achanges/ticket40990 | 4++++
Msrc/lib/process/process_unix.c | 10++++------
2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/changes/ticket40990 b/changes/ticket40990 @@ -0,0 +1,4 @@ + o Minor bugfix (process): + - Avoid closing all possible FDs when spawning a process (PT). On some systems, this could + lead to 3+ minutes hang. Fixes bug 40990; bugfix on 0.3.5.1-alpha. + diff --git a/src/lib/process/process_unix.c b/src/lib/process/process_unix.c @@ -137,7 +137,7 @@ process_unix_exec(process_t *process) int stdin_pipe[2]; int stdout_pipe[2]; int stderr_pipe[2]; - int retval, fd; + int retval; unix_process = process_get_unix_process(process); @@ -240,11 +240,9 @@ process_unix_exec(process_t *process) close(stdin_pipe[0]); close(stdin_pipe[1]); - /* Close all other fds, including the read end of the pipe. 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); + /* Note that we don't close all FDs from here, which we used to do, because + * all our open are CLOEXEC. With a very large maximum number of FDs, the + * loop was taking a long time: #40990 */ /* Create the argv value for our new process. */ char **argv = process_get_argv(process);