Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 395953 - net-proxy/torsocks-1.2 gives warnings about symbols not in shared library
Summary: net-proxy/torsocks-1.2 gives warnings about symbols not in shared library
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Anthony Basile
URL: http://code.google.com/p/torsocks/iss...
Whiteboard:
Keywords:
Depends on:
Blocks: 395215
  Show dependency tree
 
Reported: 2011-12-25 00:51 UTC by Maxim Kammerer
Modified: 2013-09-09 14:53 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Maxim Kammerer 2011-12-25 00:51:29 UTC
# torify nc -v example.com 80
02:49:15 libtorsocks(15851): The symbol res_init() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15851): The symbol res_query() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15851): The symbol res_search() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15851): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15852): The symbol res_init() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15852): The symbol res_query() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15852): The symbol res_search() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15852): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15850): The symbol res_init() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15850): The symbol res_query() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15850): The symbol res_search() was not found in any shared library. The error reported was: not found!
02:49:15 libtorsocks(15850): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!

Same warnings with straight
LD_PRELOAD=/usr/lib64/torsocks/libtorsocks.so.1.0.0 nc -v example.com 80
(didn't check whether LD_PRELOAD is used to implement the functionality, though).
Comment 1 Anthony Basile gentoo-dev 2011-12-27 01:32:41 UTC
This is a known issue and is harmless.  It happens whenever torsocks wraps a program that doesn't have the res_*() functions.  See the upstream bug report in the url above.

We could alert the user about this using pkg_postinst() message or I could try to suppress the error by renaming the dlopen-ed symbol.  If the reporter wants, try the patch (or some variation of it) in comment 9 of the above url.
Comment 2 Maxim Kammerer 2011-12-29 01:40:40 UTC
Tried the patch, no effect (x86).

--- /tmp/torsocks.c	2011-12-29 01:13:39.000000000 +0000
+++ /tmp/torsocks.c.new	2011-12-29 01:37:48.000000000 +0000
@@ -174,10 +174,10 @@
     #ifdef SUPPORT_RES_API
     lib = dlopen(LIBRESOLV, RTLD_LAZY);
     realres_init = dlsym(lib, "res_init");
-    realresquery = dlsym(lib, "res_query");
-    realressend = dlsym(lib, "res_send");
-    realresquerydomain = dlsym(lib, "res_querydomain");
-    realressearch = dlsym(lib, "res_search");
+    real__res_query = dlsym(lib, "res_query");
+    real__res_send = dlsym(lib, "res_send");
+    real__res_querydomain = dlsym(lib, "res_querydomain");
+    real__res_search = dlsym(lib, "res_search");
     dlclose(lib);
     #endif
 #endif


01:38:38 libtorsocks(2038): The symbol res_query() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2038): The symbol res_search() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2038): The symbol __res_send() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2038): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2039): The symbol res_query() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2039): The symbol res_search() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2039): The symbol __res_send() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2039): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2037): The symbol res_query() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2037): The symbol res_search() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2037): The symbol __res_send() was not found in any shared library. The error reported was: not found!
01:38:38 libtorsocks(2037): The symbol res_querydomain() was not found in any shared library. The error reported was: not found!
Comment 3 Anthony Basile gentoo-dev 2012-02-04 02:01:03 UTC
I checked on debian and they've got the same issue.
Comment 4 Anthony Basile gentoo-dev 2012-02-19 02:36:47 UTC
(In reply to comment #3)
> I checked on debian and they've got the same issue.

Debian has a patch, see their bug

   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=636943

But its not working for me.  I've put a bumped ebuild with their patch on my overlay at

http://git.overlays.gentoo.org/gitweb/?p=dev/blueness.git;a=commit;h=651111ac72109701d4c7562a4db6b9337449e755

In particular, see the patch called fix-symbol-notfound.patch

@Maxim.  Can you test and see if this fixes it for you?
Comment 5 Maxim Kammerer 2012-02-20 17:44:14 UTC
I tried fix-symbol-notfound.patch on hardened x86 (applying to 1.2-r1 in the main tree after the "prepare" phase), and it didn't fix the issue for me either.

Could it be that glibc differences between Debian and Gentoo matter here?
Comment 6 Anthony Basile gentoo-dev 2012-02-20 18:07:48 UTC
(In reply to comment #5)
> I tried fix-symbol-notfound.patch on hardened x86 (applying to 1.2-r1 in the
> main tree after the "prepare" phase), and it didn't fix the issue for me
> either.
> 
> Could it be that glibc differences between Debian and Gentoo matter here?

That's where I was heading with this.  Debian is using eglibc.  But, I have yet to test on my Debian box.  I may not be fixed even there despite what the debian report says.
Comment 7 Anthony Basile gentoo-dev 2012-02-21 16:59:40 UTC
(In reply to comment #6)
> (In reply to comment #5)
> > I tried fix-symbol-notfound.patch on hardened x86 (applying to 1.2-r1 in the
> > main tree after the "prepare" phase), and it didn't fix the issue for me
> > either.
> > 
> > Could it be that glibc differences between Debian and Gentoo matter here?
> 
> That's where I was heading with this.  Debian is using eglibc.  But, I have yet
> to test on my Debian box.  I may not be fixed even there despite what the
> debian report says.

Okay, a different approach.  The messages are being generated by a macro LOAD_ERROR defined on line 124 of torsocks.c.  In each case, LOAD_ERROR is called after a call to dlsym(), eg

    if (!realres_init && ((realres_init = dlsym(RTLD_NEXT, "res_init")) == NULL))
        LOAD_ERROR("res_init", MSGERR);

Then, in the macro, 

    const char *error; \
    error = dlerror(); \
    show_msg(l, "The symbol ...

But, if there was no real error in dlsym, but it just gave NULL because of RTLD_NEXT, then dlerror() returns NUL.  So, the fix would be to check *error before doing a show_msg in LOAD_ERROR.  Hence my patch is

--- torsocks-1.2.orig//src/torsocks.c	2011-10-25 17:49:50.000000000 -0400
+++ torsocks-1.2/src/torsocks.c	2012-02-21 11:09:20.000000000 -0500
@@ -124,9 +124,9 @@
 #define LOAD_ERROR(s,l) { \
     const char *error; \
     error = dlerror(); \
-    show_msg(l, "The symbol %s() was not found in any shared " \
-                     "library. The error reported was: %s!\n", s, \
-                     (error)?error:"not found"); \
+    if (error) \
+        show_msg(l, "The symbol %s() was not found in any shared " \
+            "library. The error reported was: %s!\n", s, error); \
     dlerror(); \
     }
     pthread_mutex_lock(&torsocks_init_mutex);



@Maxim.  It works for me and I'll add it to the tree soon, but if you like to test, the ebuild+patch is here:

http://git.overlays.gentoo.org/gitweb/?p=dev/blueness.git;a=tree;f=net-proxy/torsocks;h=3f381e04cb4f1f79bbe274dbe3196ca8cb744d62;hb=5d1f388224d0f988f426fe02342c86276982e6ce

I'm also passing it upstream.
Comment 8 Maxim Kammerer 2012-02-21 21:15:28 UTC
The patch seems to work very well!
Comment 9 Anthony Basile gentoo-dev 2012-03-08 18:15:03 UTC
(In reply to comment #8)
> The patch seems to work very well!

Last I spoke to upstream, Robert was uneasy about whether there are other circumstances where dlerror() would return NULL but some *real* error did occur.  I've played with this and I haven't hit anything like that.  I'm going to add the patch to Gentoo.

BTW, I've also written some POC code to demonstrate the issue.  Here it is

    http://opensource.dyc.edu/pub/misc/torsocks-poc-issue3.tgz

I'm thinking of passing this upstream but I really don't fancy the idea of dealing with glibc upstream.
Comment 10 Anthony Basile gentoo-dev 2012-03-08 18:51:09 UTC
Okay its in the tree as torsocks-1.2-r2.  I'll close this as resovled test-request because we need to address upstream's concern that we may not be missing some important errors here.
Comment 11 Maxim Kammerer 2012-03-08 20:39:00 UTC
(In reply to comment #9)
> Last I spoke to upstream, Robert was uneasy about whether there are other
> circumstances where dlerror() would return NULL but some *real* error did
> occur.

From reading the manpages, it seems that only the reverse can happen -- if an old error is not cleared by a call to dlerror(), then it will propagate to LOAD_ERROR. But that would happen without the patch, too.

By the way, looking at fix-symbol-notfound.patch above, it seems that the second call to dlerror() (in the original code) is unnecessary, is that correct?
 
> BTW, I've also written some POC code to demonstrate the issue.  Here it is
> 
>     http://opensource.dyc.edu/pub/misc/torsocks-poc-issue3.tgz

I looked, thanks - does this mean that the patch actually relies on potentially broken behavior of glibc? Or am I missing something?

> I'm thinking of passing this upstream but I really don't fancy the idea of
> dealing with glibc upstream.

"Stop reopening!"
Comment 12 Maxim Kammerer 2013-01-01 23:04:58 UTC
I think this can be now resolved as FIXED?
Comment 13 Harold Anderson 2013-09-09 14:53:33 UTC
Sorry to re-open.  Perhaps building with static-libs would help?

torsocks qmail-remote gmail.com postmaster@example.com bill_gates@gmail.com
14:40:57 libtorsocks(17231): Unresolved symbol: res_query
14:40:57 libtorsocks(17231): Unresolved symbol: res_query
14:40:57 libtorsocks(17231): Unresolved symbol: res_query

$ emerge --info torsocks
Portage 2.2.1 (default/linux/amd64/13.0/no-multilib, gcc-4.7.3, glibc-2.17, 3.9.5-gentooBlackSwan x86_64)
=================================================================
                        System Settings
=================================================================
System uname: Linux-3.9.5-gentooBlackSwan-x86_64-Intel-R-_Xeon-R-_CPU_E5-2650_0_@_2.00GHz-with-gentoo-2.2
KiB Mem:      608060 total,     20984 free
KiB Swap:          0 total,         0 free
Timestamp of tree: Fri, 06 Sep 2013 18:30:01 +0000
ld GNU ld (GNU Binutils) 2.23.2
app-shells/bash:          4.2_p45
dev-java/java-config:     2.2.0
dev-lang/python:          2.7.5-r2, 3.2.5-r2
dev-util/cmake:           2.8.11.1
dev-util/pkgconfig:       0.28
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.12
sys-apps/sandbox:         2.6-r1
sys-devel/autoconf:       2.69
sys-devel/automake:       1.12.6
sys-devel/binutils:       2.23.2
sys-devel/gcc:            4.7.3
sys-devel/gcc-config:     1.8
sys-devel/libtool:        2.4.2
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.10 (virtual/os-headers)
sys-libs/glibc:           2.17
Repositories: gentoo
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt /var/lib/hsqldb /var/qmail/alias /var/qmail/control /var/vpopmail/etc"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.4/ext-active/ /etc/php/apache2-php5.5/ext-active/ /etc/php/cgi-php5.4/ext-active/ /etc/php/cgi-php5.5/ext-active/ /etc/php/cli-php5.4/ext-active/ /etc/php/cli-php5.5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -pipe"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://mirror.bytemark.co.uk/gentoo/  http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/ http://de-mirror.org/gentoo/"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY=""
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="acl amd64 apache2 authdaemond berkdb bzip2 clamav cli cracklib crypt cxx dri fortran gdbm gif hwdb iconv imap ipv6 jpeg maildir mariadb mmx modules mudflap mysql ncurses nls nptl openmp pam pcre persuid png python readline sasl session spamassassin spell sqlite3 sse sse2 ssl svg tcpd tiff unicode urandom vda vhosts vim-syntax zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="suexec expires dumpio negotiation vhost_alias log_config dbd authz-user authz_default authz_dbm authn_default authz_user authn_dbm authn_dbd authn_basic alias actions auth_basic authn_alias authn_anon authn_core authn_file authz_core authz_groupfile authz_host authz_owner autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env ext_filter filter headers include logio mime mime_magic rewrite setenvif socache_shmcb speling status unique_id unixd userd" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en" NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi geo gzip limit_req limit_zone map memcached proxy referer rewrite scgi split_clients ssi upstream_ip_hash userid uwsgi realip gzip_static gunzip spdy cache_purge limit_conn slowfs_cache" NGINX_MODULES_MAIL="smtp pop3 imap" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-4" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" RUBY_TARGETS="ruby20 ruby19" USERLAND="GNU" VIDEO_CARDS="fbdev glint intel mach64 mga nouveau nv r128 radeon savage sis tdfx trident vesa via vmware dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON

=================================================================
                        Package Settings
=================================================================

net-proxy/torsocks-1.2-r2 was built with the following:
USE="-static-libs"