[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-bugs] #26594 [Core Tor/Tor]: Tor becomes unresponsive after configuration handling on Windows



#26594: Tor becomes unresponsive after configuration handling on Windows
------------------------------+------------------------------
     Reporter:  ahf           |      Owner:  (none)
         Type:  defect        |     Status:  new
     Priority:  High          |  Milestone:  Tor: unspecified
    Component:  Core Tor/Tor  |    Version:  Tor: unspecified
     Severity:  Normal        |   Keywords:
Actual Points:                |  Parent ID:
       Points:                |   Reviewer:
      Sponsor:                |
------------------------------+------------------------------
 When trying to start Tor from master (as of commit
 `adcd1d8b9ac09f3abc11e2e3187fe363ad3df2fd`), Tor will never progress from
 the initial configuration handling that is happening before we bootstrap.

 When starting Tor the following output will appear:

 {{{
 PS
 C:\Users\ahf\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\home\ahf\src\github.com\ahf
 \tor-win32\src\tor> .\src\or\tor.exe
 Jul 01 20:58:33.065 [notice] Tor 0.3.5.0-alpha-dev (git-adcd1d8b9ac09f3a)
 running on Windows 8 with Libevent 2.1.8-stable, OpenSSL 1.0.2n, Zlib
 1.2.11, Liblzma N/A, and Libzstd N/A.
 Jul 01 20:58:33.068 [notice] Tor can't help you if you use it wrong! Learn
 how to be safe at https://www.torproject.org/download/download#warning
 Jul 01 20:58:33.069 [notice] This version is not a stable Tor release.
 Expect more bugs than usual.
 Jul 01 20:58:33.084 [notice] Configuration file
 "C:\Users\ahf\AppData\Roaming\tor\torrc" not present, using reasonable
 defaults.
 Jul 01 20:58:33.086 [warn] Path for GeoIPFile (<default>) is relative and
 will resolve to
 C:\Users\ahf\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\home\ahf\src\github.com\ahf
 \tor-win32\src\tor\<default>. Is this what you wanted?
 Jul 01 20:58:33.086 [warn] Path for GeoIPv6File (<default>) is relative
 and will resolve to
 C:\Users\ahf\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\home\ahf\src\github.com\ahf
 \tor-win32\src\tor\<default>. Is this what you wanted?
 }}}

 After this the process becomes unresponsive. The "Scheduler type KISTLite
 has been enabled." NOTICE log message is expected here, but is never
 shown.

 === Bisecting the issue ===

 I tried to bisect the issue and it looks like the issue began to show up
 after commit `696f6f15697260255146d634e1529202cc4c2b77` (the commit itself
 doesn't compile on Windows, but the following couple of commits are
 related fixes to that patch). The first commit that I can compile where
 this issue appears is `0b7452eeb2f2dee7acefee2d3ca2cb402a877ea1`.


 === Analysis ===

 I managed to track the issue down to a call to `strcasecmp()` in
 `config_lines_eq()` in `src/lib/encoding/confline.c`. I added the
 following debug output to get a slightly better understanding of what was
 going on (since gdb wasn't of much help here):

 {{{
 diff --git a/src/lib/encoding/confline.c b/src/lib/encoding/confline.c
 index 7f535b321..4544465d3 100644
 --- a/src/lib/encoding/confline.c
 +++ b/src/lib/encoding/confline.c
 @@ -14,6 +14,9 @@
  #include "lib/string/util_string.h"

  #include <string.h>
 +#include <stdio.h>
 +
 +#define AHF_DEBUG(...) do { printf(__VA_ARGS__); fflush(stdout); } while
 (0)

  /** Helper: allocate a new configuration option mapping 'key' to 'val',
   * append it to *<b>lst</b>. */
 @@ -232,8 +235,26 @@ int
  config_lines_eq(config_line_t *a, config_line_t *b)
  {
    while (a && b) {
 +    AHF_DEBUG("a: %p\n", a);
 +    AHF_DEBUG("b: %p\n", b);
 +
 +    AHF_DEBUG("a->key:   %p\n", a->key);
 +    AHF_DEBUG("a->value: %p\n", a->value);
 +    AHF_DEBUG("a->next:  %p\n\n", a->next);
 +
 +    AHF_DEBUG("b->key:   %p\n", b->key);
 +    AHF_DEBUG("b->value: %p\n", b->value);
 +    AHF_DEBUG("b->next:  %p\n\n", b->next);
 +
 +    AHF_DEBUG("a->key: '%s'\n", a->key);
 +    AHF_DEBUG("a->value: '%s'\n", a->value);
 +
 +    AHF_DEBUG("b->key: '%s'\n", b->key);
 +    AHF_DEBUG("b->value: '%s'\n", b->value);
 +
      if (strcasecmp(a->key, b->key) || strcmp(a->value, b->value))
        return 0;
      a = a->next;
      b = b->next;
    }
 }}}

 Tor would now output the following when started:

 {{{
 $ ./src/or/tor.exe
 Jul 01 21:24:47.029 [notice] Tor 0.3.5.0-alpha-dev (git-0b7452eeb2f2dee7)
 running on Very recent version of Windows [major=10,minor=0] with Libevent
 2.1.8-stable, OpenSSL 1.0.2o, Zlib 1.2.11, Liblzma 5.2.4, and Libzstd N/A.
 Jul 01 21:24:47.029 [notice] Tor can't help you if you use it wrong! Learn
 how to be safe at https://www.torproject.org/download/download#warning
 Jul 01 21:24:47.029 [notice] This version is not a stable Tor release.
 Expect more bugs than usual.
 Jul 01 21:24:47.039 [notice] Configuration file
 "C:\Users\ahf\AppData\Roaming\tor\torrc" not present, using reasonable
 defaults.
 Jul 01 21:24:47.041 [warn] Path for GeoIPFile (<default>) is relative and
 will resolve to C:\msys64\home\ahf\src\github.com\ahf\tor\<default>. Is
 this what you wanted?
 Jul 01 21:24:47.041 [warn] Path for GeoIPv6File (<default>) is relative
 and will resolve to C:\msys64\home\ahf\src\github.com\ahf\tor\<default>.
 Is this what you wanted?
 a: 0000000001C6C9E0
 b: 0000000001C6CE60
 a->key:   0000000001C6CC50
 a->value: 00000000035DAC70
 a->next:  0000000000000000

 b->key:   0000000001C6CDA0
 b->value: 00000000035DACC0
 b->next:  0000000000000000

 a->key: 'TestingV3AuthInitialVotingInterval'
 a->value: '1800'
 b->key: 'TestingV3AuthInitialVotingInterval'
 b->value: '1800'
 }}}

 And after that it would become unresponsive again.

 If we try to change the call from `strcasecmp()` to `strcmp()` in
 `config_lines_eq()` Tor will progress and bootstrap successfully:

 {{{
 $ ./src/or/tor.exe
 Jul 01 21:29:19.667 [notice] Tor 0.3.5.0-alpha-dev (git-0b7452eeb2f2dee7)
 running on Very recent version of Windows [major=10,minor=0] with Libevent
 2.1.8-stable, OpenSSL 1.0.2o, Zlib 1.2.11, Liblzma 5.2.4, and Libzstd N/A.
 Jul 01 21:29:19.667 [notice] Tor can't help you if you use it wrong! Learn
 how to be safe at https://www.torproject.org/download/download#warning
 Jul 01 21:29:19.667 [notice] This version is not a stable Tor release.
 Expect more bugs than usual.
 Jul 01 21:29:19.678 [notice] Configuration file
 "C:\Users\ahf\AppData\Roaming\tor\torrc" not present, using reasonable
 defaults.
 Jul 01 21:29:19.679 [warn] Path for GeoIPFile (<default>) is relative and
 will resolve to C:\msys64\home\ahf\src\github.com\ahf\tor\<default>. Is
 this what you wanted?
 Jul 01 21:29:19.679 [warn] Path for GeoIPv6File (<default>) is relative
 and will resolve to C:\msys64\home\ahf\src\github.com\ahf\tor\<default>.
 Is this what you wanted?
 a: 000000000139CB30
 b: 000000000139C950
 a->key:   000000000139C8C0
 a->value: 000000000365AF30
 a->next:  0000000000000000

 b->key:   000000000139C7D0
 b->value: 000000000365AF40
 b->next:  0000000000000000

 a->key: 'TestingV3AuthInitialVotingInterval'
 a->value: '1800'
 b->key: 'TestingV3AuthInitialVotingInterval'
 b->value: '1800'

 [ ... some debug output omitted here ... ]

 Jul 01 21:29:19.683 [notice] Scheduler type KISTLite has been enabled.
 Jul 01 21:29:19.683 [notice] Opening Socks listener on 127.0.0.1:9050
 Jul 01 21:29:19.000 [notice] Bootstrapped 0%: Starting
 Jul 01 21:29:20.000 [notice] Starting with guard context "default"
 Jul 01 21:29:20.000 [notice] Bootstrapped 80%: Connecting to the Tor
 network
 }}}

 But since our configuration keys are supposed to be case insensitive this
 is not a fix for the problem.

 === Reproducing ===

 I have tested this in two different environments: 64-bit Tor compiled via
 msys2 and 32-bit Tor compiled using my own build scripts from
 https://github.com/ahf/tor-win32 in a Debian WSL (Windows Subsystem for
 Linux) container. The results are the same. All of it was done on Windows
 10.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/26594>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
_______________________________________________
tor-bugs mailing list
tor-bugs@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs