Bug 28406

Summary: RE: rtld-elf apparently ignores LD_LIBRARY_PATH
Product: Base System Reporter: John Polstra <jdp>
Component: binAssignee: greid
Status: Closed FIXED    
Severity: Affects Only Me CC: FreeBSD-gnats-submit
Priority: Normal    
Version: 1.0-RELEASE   
Hardware: Any   
OS: Any   

Description John Polstra 2001-06-25 22:40:02 UTC
 We have been here before.  Here's the relevant log message from
 "src/libexec/rtld-elf/rtld.c":
 
 revision 1.21
 date: 1999/04/09 06:42:00;  author: jdp;  state: Exp;  lines: +4 -4
 The ELF specification says that the RPATH in the executable or
 shared object takes precedence over LD_LIBRARY_PATH.  Make the
 dynamic linker do it that way.
 
 John
 
 Chris BeHanna wrote:
 > 
 >>Submitter-Id: current-users
 >>Originator:   Chris BeHanna
 >>Organization: 
 >>Confidential: no 
 >>Synopsis:     rtld-elf ignores LD_LIBRARY_PATH
 >>Severity:     critical
 >>Priority:     medium
 >>Category:     bin
 >>Class:                sw-bug
 >>Release:      FreeBSD 4.3-STABLE i386
 >>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.
Comment 1 greid freebsd_committer freebsd_triage 2001-07-02 19:17:07 UTC
State Changed
From-To: open->closed

Mailing list message; not a PR 


Comment 2 greid freebsd_committer freebsd_triage 2001-07-02 19:17:07 UTC
Responsible Changed
From-To: gnats-admin->greid

Misfiled