]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix crash when changing node restrictions with DNS lookup in progress
authorNick Mathewson <nickm@torproject.org>
Thu, 20 Oct 2011 03:14:05 +0000 (23:14 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 20 Oct 2011 03:14:05 +0000 (23:14 -0400)
Fixes bug 4259, bugfix on 0.2.2.25-alpha.  Bugfix by "Tey'".

Original message by submitter:

  Changing nodes restrictions using a controller while Tor is doing
  DNS resolution could makes Tor crashes (on WinXP at least). The
  problem can be repeated by trying to reach a non-existent domain
  using Tor:

    curl --socks4a 127.0.0.1:9050 inexistantdomain.ext

  .. and changing the ExitNodes parameter through the control port
  before Tor returns a DNS resolution error (of course, the following
  command won't work directly if the control port is password
  protected):

    echo SETCONF ExitNodes=TinyTurtle | nc -v 127.0.0.1 9051

  Using a non-existent domain is needed to repeat the issue so that
  Tor takes a few seconds for resolving the domain (which allows us to
  change the configuration). Tor will crash while processing the
  configuration change.

  The bug is located in the addressmap_clear_excluded_trackexithosts
  method which iterates over the entries of the addresses map in order
  to check whether the changes made to the configuration will impact
  those entries. When a DNS resolving is in progress, the new_adress
  field of the associated entry will be set to NULL. The method
  doesn't expect this field to be NULL, hence the crash.

changes/bug4259 [new file with mode: 0644]
src/or/connection_edge.c

diff --git a/changes/bug4259 b/changes/bug4259
new file mode 100644 (file)
index 0000000..bfccd3a
--- /dev/null
@@ -0,0 +1,4 @@
+  o Major bugfixes:
+    - Fix a crash bug when changing node restrictions while a DNS lookup
+      is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
+      by "Tey'".
index 6a696092eb60eb2bd13c7480f96f82456d65584d..4763bf59a2623bd1984ac2fd1c03191ad2e68f92 100644 (file)
@@ -831,7 +831,10 @@ addressmap_clear_excluded_trackexithosts(or_options_t *options)
     char *nodename;
     routerinfo_t *ri; /* XXX023 Use node_t. */
 
-    if (strcmpend(target, ".exit")) {
+    if (!target) {
+      /* DNS resolving in progress */
+      continue;
+    } else if (strcmpend(target, ".exit")) {
       /* Not a .exit mapping */
       continue;
     } else if (ent->source != ADDRMAPSRC_TRACKEXIT) {