diff options
author | Nick Mathewson <nickm@torproject.org> | 2014-01-17 12:04:53 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-01-17 12:04:53 -0500 |
commit | 85b46d57bcc40b8053dafe5d0ebb4b0bb611b484 (patch) | |
tree | cbf0ab74e061e7815d51f400e8b6cc19158dc80d | |
parent | 35115496511f64c08849a039c926910739467169 (diff) | |
download | tor-85b46d57bcc40b8053dafe5d0ebb4b0bb611b484.tar.gz tor-85b46d57bcc40b8053dafe5d0ebb4b0bb611b484.zip |
Check spawn_func() return value
If we don't, we can wind up with a wedged cpuworker, and write to it
for ages and ages.
Found by skruffy. This was a bug in 2dda97e8fd898757, a.k.a. svn
revision 402. It's been there since we have been using cpuworkers.
-rw-r--r-- | changes/bug4345 | 6 | ||||
-rw-r--r-- | src/or/cpuworker.c | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/changes/bug4345 b/changes/bug4345 new file mode 100644 index 0000000000..4975eea1ea --- /dev/null +++ b/changes/bug4345 @@ -0,0 +1,6 @@ + o Minor bugfixes: + - Check return code on spawn_func() in cpuworker code, so that we don't + think we've spawned a nonworking cpuworker and write junk to it + forever. Fix for bug 4345; bugfix on all released Tor versions. + Found by "skruffy". + diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c index ecf0d2035d..2f9f527e97 100644 --- a/src/or/cpuworker.c +++ b/src/or/cpuworker.c @@ -528,7 +528,12 @@ spawn_cpuworker(void) tor_assert(SOCKET_OK(fdarray[1])); fd = fdarray[0]; - spawn_func(cpuworker_main, (void*)fdarray); + if (spawn_func(cpuworker_main, (void*)fdarray) < 0) { + tor_close_socket(fdarray[0]); + tor_close_socket(fdarray[1]); + tor_free(fdarray); + return -1; + } log_debug(LD_OR,"just spawned a cpu worker."); #ifndef TOR_IS_MULTITHREADED tor_close_socket(fdarray[1]); /* don't need the worker's side of the pipe */ |