misc/107529: ldd aborts abruptly if a shared library is missing

Roy Marples uberlord at gentoo.org
Thu Jan 4 10:00:37 PST 2007


>Number:         107529
>Category:       misc
>Synopsis:       ldd aborts abruptly if a shared library is missing
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 04 18:00:31 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Roy Marples
>Release:        FreeBSD-6.2_rc2
>Organization:
Gentoo
>Environment:
FreeBSD uberlaptop 6.2-RC2 FreeBSD Gentoo 6.2_rc2 #0: Sun Dec 31 16:44:50 GMT 2006     root at uberlaptop:/usr/src/sys-6.2_rc2/i386/compile/UBERKERNEL  i386
>Description:
ldd aborts abruptly if a shared library is missing.

Example:

uberlaptop rtld-elf # ldd /usr/lib/libgtk-x11-2.0.so.0
/usr/lib/libgtk-x11-2.0.so.0:
ldd: /usr/lib/libgtk-x11-2.0.so.0: Shared object "libcairo.so.12" not found, required by "libgtk-x11-2.0.so.0"
/usr/lib/libgtk-x11-2.0.so.0: exit status 1

Whereas expected output would be:
uberlaptop rtld-elf # ldd /usr/lib/libgtk-x11-2.0.so.0
/usr/lib/libgtk-x11-2.0.so.0:
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x284bb000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x284d1000)
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x28555000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x2855e000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x28598000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x2859b000)
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x285a0000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x285b9000)
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x285f2000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x285f5000)
        libintl.so.8 => /lib/libintl.so.8 (0x28687000)
        libiconv.so.2 => /lib/libiconv.so.2 (0x28690000)
        libcairo.so.12 => not found (0x0)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x2876e000)
        libz.so.1 => /lib/libz.so.1 (0x287db000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x287ed000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0x28817000)
        libglitz.so.1 => /usr/lib/libglitz.so.1 (0x28836000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0x28859000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0x2887d000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x28885000)
        libm.so.4 => /lib/libm.so.4 (0x28970000)
        libgcc_s.so.1 => /usr/lib/gcc/i686-gentoo-freebsd6.2/4.1.1/libgcc_s.so.1 (0x2816f000)
        libcairo.so.12 => not found (0x0)
        libXi.so.6 => /usr/lib/libXi.so.6 (0x28987000)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x2898f000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x28993000)
        libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x289a1000)
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x289b3000)
        libcairo.so.12 => not found (0x0)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x289b8000)
        libc.so.6 => /lib/libc.so.6 (0x28089000)
        librpcsvc.so.3 => /usr/lib/librpcsvc.so.3 (0x289e4000)

>How-To-Repeat:
Remove any library (non critical obviously) and ldd a binary that requires it.
>Fix:
Apply below patch :)
It should be safe as functionality is only changed if called from ldd.

diff -ur libexec.orig/rtld-elf/rtld.c libexec/rtld-elf/rtld.c
--- libexec.orig/rtld-elf/rtld.c        2007-01-04 17:21:32 +0000
+++ libexec/rtld-elf/rtld.c     2007-01-04 17:19:14 +0000
@@ -1266,8 +1266,12 @@
            char **curpath = paths;

            needed->obj = NULL;
-           if (paths == NULL)
-               return -1;
+           if (paths == NULL) {
+             if (ld_tracing)
+               continue;
+             else
+              return -1;
+           }

            while(*curpath) {
                if (needed->obj == NULL) {

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list