>Number:         189911
>Category:       bin
>Synopsis:       [patch] LD_LIBMAP has no effect on rtld
>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:   Sun May 18 14:10:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator:     Wolfgang Jenkner
>Release:        FreeBSD 10.0-STABLE amd64
>Organization:
>Environment:
System: FreeBSD iznogoud.viz 10.0-STABLE FreeBSD 10.0-STABLE #0 r265095M: Tue 
Apr 29 20:38:44 CEST 2014 
[email protected]:/usr/obj/usr/src/sys/IZNOGOUD-drm-update-38.a+ amd64

>Description:
Mapping a shared library to another - existing or not existing - library
via LD_LIBMAP, as described in rtld(1), has no effect (but it does work
when done in libmap.conf).
>How-To-Repeat:
$ LD_LIBMAP=libncurses.so.8=libncurses.so.5 ldd /bin/ls
/bin/ls:
        libutil.so.9 => /lib/libutil.so.9 (0x800823000)
        libncurses.so.8 => /lib/libncurses.so.8 (0x800a35000)
        libc.so.7 => /lib/libc.so.7 (0x800c82000)

On the other hand, with

$ cat /etc/libmap.conf
[ls]
libncurses.so.8 libncurses.so.5
$ 

we get

$ ldd /bin/ls
/bin/ls:
        libutil.so.9 => /lib/libutil.so.9 (0x800823000)
        libncurses.so.8 => /usr/local/lib/libncurses.so.5 (0x800a35000)
        libc.so.7 => /lib/libc.so.7 (0x800c53000)
        libtinfo.so.5.9 => /usr/local/lib/libtinfo.so.5.9 (0x800ffa000)
$ 

if  libncurses.so.5 from the devel/ncurses port exists.

Otherwise, we get

$ ldd /bin/ls
/bin/ls:
        libutil.so.9 => /lib/libutil.so.9 (0x800823000)
        libncurses.so.8 => not found (0)
        libc.so.7 => /lib/libc.so.7 (0x800a35000)
$ 

>Fix:
The following patch is against 10-STABLE, but should apply to HEAD as
well.

It seems that, due to an oversight in HEAD r232862, lmc_parse() was
passed wrong arguments in the libmap_override case.

Index: libexec/rtld-elf/libmap.c
===================================================================
--- libexec/rtld-elf/libmap.c   (revision 265095)
+++ libexec/rtld-elf/libmap.c   (working copy)
@@ -80,7 +80,7 @@
 
        if (libmap_override) {
                /*
-                * Do some character replacement to make $LIBMAP look
+                * Do some character replacement to make $LD_LIBMAP look
                 * like a text file, then parse it.
                 */
                libmap_override = xstrdup(libmap_override);
@@ -94,8 +94,8 @@
                                break;
                        }
                }
-               lmc_parse(p, strlen(p));
-               free(p);
+               lmc_parse(libmap_override, p - libmap_override);
+               free(libmap_override);
        }
 
        return (lm_count == 0);
>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to