Date: Sat, 16 Jun 2001 02:49:52 -0400 (EDT) From: Chris BeHanna <behanna@topperwein.dyndns.org> To: FreeBSD-gnats-submit@freebsd.org Cc: jdp@polstra.com Subject: bin/28191: rtld-elf apparently ignores LD_LIBRARY_PATH Message-ID: <200106160649.f5G6nqP89676@topperwein.dyndns.org>
next in thread | raw e-mail | index | archive | help
>Number: 28191
>Category: bin
>Synopsis: rtld-elf ignores LD_LIBRARY_PATH
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Jun 15 23:50:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Chris BeHanna
>Release: FreeBSD 4.3-STABLE i386
>Organization:
>Environment:
System: FreeBSD topperwein.dyndns.org 4.3-STABLE FreeBSD 4.3-STABLE #0: Tue Jun 12 09:06:55 EDT 2001 root@topperwein.dyndns.org:/usr/obj/usr/src/sys/TOPPERWEIN i386
CPU: AMD Athlon, 1.333 GHz (AMD K-7)
Affected file: /usr/libexec/ld-elf.so.1
>Description:
The XFree86 4.1.0_4 port fails on this box when attempting to
build the Type 1 fonts. In particular, this line fails:
LD_LIBRARY_PATH=../../../exports/lib XFT_CONFIG=../../../lib/Xft/XftConfig ../../../exports/bin/xftcache .
/usr/libexec/ld-elf.so.1: ../../../exports/bin/xftcache: Undefined symbol "XftDirSave"
where `pwd` is /usr/ports/x11/XFree86-4/work/xc/programs/xftcache.
According to rtld(1), LD_LIBRARY_PATH should supercede the default
search path except for setuid and setgid executables, of which
xftcache is neither.
I verified this problem by running the command by hand and by
doing "LD_LIBRARY_PATH=../../../exports/lib ldd xftcache". The
output pointed to the installed /usr/X11R6/lib/libXft.so instead of
the one within the XFree86 build tree and, indeed the installed
libXft.so doesn't have the symbol XftDirSave, but the one in the build
tree does.
Note that ldconfig -r reveals an entry for libXft.so that does
indeed point to /usr/X11R6/lib/libXft.so. That said, if I can't
selectively override that by setting LD_LIBRARY_PATH on the command
line, that's a big problem.
From the comment from find_library(), I see that the executable's
RPATH entry takes precedence over LD_LIBRARY_PATH. If that's the
case, then how can LD_LIBRARY_PATH be used to force an executable to
bootstrap itself from a build tree?
>How-To-Repeat:
Attempt to build XFree86 4.1.0_4 on an Athlon running 4.3-STABLE
from the date indicated in uname -a, above.
>Fix:
Change find_library() to look in LD_LIBRARY_PATH before RPATH for
non-setuid, non-setgid executables:
--- rtld.c Mon May 14 01:01:35 2001
+++ rtld.c.new Sat Jun 16 02:45:03 2001
@@ -803,8 +803,8 @@
dbg(" Searching for \"%s\"", name);
if ((refobj != NULL &&
- (pathname = search_library_path(name, refobj->rpath)) != NULL) ||
(pathname = search_library_path(name, ld_library_path)) != NULL ||
+ (pathname = search_library_path(name, refobj->rpath)) != NULL) ||
(pathname = search_library_path(name, gethints())) != NULL ||
(pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL)
return pathname;
If I completely misunderstand, please let me know, and I'll raise no
fuss about closing this PR.
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106160649.f5G6nqP89676>
