Commit 85b46d57 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

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 2dda97e8, a.k.a. svn
revision 402. It's been there since we have been using cpuworkers.
parent 35115496
Loading
Loading
Loading
Loading

changes/bug4345

0 → 100644
+6 −0
Original line number Diff line number Diff line
  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".
+6 −1
Original line number Diff line number Diff line
@@ -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 */