[tor-bugs] #16901 [Tor]: tor 0.2.7 configures OS X system OpenSSL, even though it's too old to work

Tor Bug Tracker & Wiki blackhole at torproject.org
Tue Sep 1 13:49:56 UTC 2015


#16901: tor 0.2.7 configures OS X system OpenSSL, even though it's too old to work
--------------------------+---------------------------------------------
     Reporter:  teor      |      Owner:
         Type:  defect    |     Status:  needs_review
     Priority:  critical  |  Milestone:  Tor: 0.2.7.x-final
    Component:  Tor       |    Version:  Tor: 0.2.7.2-alpha
   Resolution:            |   Keywords:  TorCoreTeam201509 Post027Freeze
Actual Points:            |  Parent ID:
       Points:            |
--------------------------+---------------------------------------------

Comment (by teor):

 Replying to [comment:2 nickm]:
 > Also, there should have been a failure much earlier, in crypto.c:
 > {{{
 > #if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,0)
 > #error "We require OpenSSL >= 1.0.0"
 > #endif
 > }}}
 >
 > Did that not happen?

 When tor is built, it requires libevent:
 {{{
 checking for libevent directory... configure: WARNING: Could not find a
 linkable libevent.  If you have it installed somewhere unusual, you can
 specify an explicit path using --with-libevent-dir
 }}}

 When libevent is installed via MacPorts, it installs openssl (currently
 1.0.2d) as a dependency.

 When openssl 1.0.2d is installed via MacPorts, and I run:
 `CC="gcc -v" ./configure --with-libevent-dir=/opt/local; make`
 I see:
 {{{
   CCLD     src/tools/tor-gencert
 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
 Target: x86_64-apple-darwin14.5.0
 Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld"
 -demangle -export_dynamic -dynamic -arch x86_64 -dead_strip
 -macosx_version_min 10.10.0 -pie -o src/tools/tor-gencert src/tools/tor-
 gencert.o src/common/libor.a src/common/libor-crypto.a
 src/common/libcurve25519_donna.a src/ext/ed25519/ref10/libed25519_ref10.a
 src/ext/ed25519/donna/libed25519_donna.a -lz -lssl -lcrypto -lSystem
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0/lib/darwin/libclang_rt.osx.a
 Undefined symbols for architecture x86_64:
   "_EVP_aes_128_ctr", referenced from:
       _aes_new_cipher in libor-crypto.a(aes.o)
   "_CRYPTO_THREADID_set_numeric", referenced from:
       _tor_set_openssl_thread_id in libor-crypto.a(crypto.o)
   "_CRYPTO_THREADID_set_callback", referenced from:
       _crypto_early_init in libor-crypto.a(crypto.o)
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)
 make[1]: *** [src/tools/tor-gencert] Error 1
 }}}
 when linking tor-gencert.

 But tor has already linked successfully earlier in the build process, with
 the output:
 {{{
   CCLD     src/or/tor
 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
 Target: x86_64-apple-darwin14.5.0
 Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld"
 -demangle -export_dynamic -dynamic -arch x86_64 -dead_strip
 -macosx_version_min 10.10.0 -pie -o src/or/tor -L/opt/local/lib
 src/or/tor_main.o src/or/libtor.a src/common/libor.a src/common/libor-
 crypto.a src/common/libcurve25519_donna.a
 src/ext/ed25519/ref10/libed25519_ref10.a
 src/ext/ed25519/donna/libed25519_donna.a src/common/libor-event.a
 src/trunnel/libor-trunnel.a -lz -levent -lssl -lcrypto -lSystem
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0/lib/darwin/libclang_rt.osx.a
 }}}

 The difference is that tor's linker command includes `-L/opt/local/lib`
 for `-levent`, which also gets applied to `-lssl -lcrypto`, pulling in
 openssl 1.0.2d. (Also, `-L/opt/local/lib` gets applied to `-lz`, but
 that's unlikely to matter much). tor-gencert doesn't use libevent, so it
 doesn't get `-L/opt/local/lib`.

 It's also worth noting that libevent's `-I/opt/local/include` is being
 applied to all the openssl headers as well, pulling in the openssl 1.0.2d
 headers, which is why the preprocessor warning isn't triggered.

 Now I'll move on to testing your branch.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/16901#comment:3>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list