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 2dda97e8fd, a.k.a. svn
revision 402. It's been there since we have been using cpuworkers.
This commit is contained in:
Nick Mathewson 2014-01-17 12:04:53 -05:00
parent 3511549651
commit 85b46d57bc
2 changed files with 12 additions and 1 deletions

6
changes/bug4345 Normal file
View File

@ -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".

View File

@ -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 */