libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: libltdl is inefficient and a security hazard


From: Bob Friesenhahn
Subject: Re: libltdl is inefficient and a security hazard
Date: Sun, 25 Oct 2009 17:57:07 -0500 (CDT)
User-agent: Alpine 2.01 (GSO 1266 2009-07-14)

Doing some investigation under Linux, I see that libltdl does the same wrong things under Linux except that Linux employs some algorithms which makes doing the wrong things much less expensive than under Solaris. Linux prunes directories in the search path which were found to not exist from later searches. Linux also entirely ignores requests to load libraries which were already loaded. However, Linux does still try to dlopen() a ".a" archive file.

Here is a strace done under Linux showing only the system calls which pass file names (strace -e trace=file command). The modules loaded were "null.la" and "xc.la":

execve("/usr/local/bin/gm", ["gm", "convert", "-size", "1x1", "xc:white", 
"null:"], [/* 50 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libGraphicsMagick.so.3", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/liblcms.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libfreetype.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libXext.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libSM.so.6", O_RDONLY)   = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libICE.so.6", O_RDONLY)  = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libX11.so.6", O_RDONLY)  = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libbz2.so.1.0", O_RDONLY)    = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libz.so.1", O_RDONLY)    = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY)        = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libgomp.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libpthread.so.0", O_RDONLY)  = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libdl.so.2", O_RDONLY)       = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libXau.so.6", O_RDONLY)  = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libxcb-xlib.so.0", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libxcb.so.1", O_RDONLY)  = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/librt.so.1", O_RDONLY)       = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libXdmcp.so.6", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY)         = 3
open("/proc/stat", O_RDONLY)            = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/usr/local/share/GraphicsMagick-1.4/config/modules.mgk", O_RDONLY) = 3
getcwd("/"..., 2052)                    = 2
access("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.la", R_OK) = 0
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.la", O_RDONLY) 
= 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/lib/tls/null.a", O_RDONLY)       = -1 ENOENT (No such file or directory)
stat("/lib/tls", 0x7fffbac4e380)        = -1 ENOENT (No such file or directory)
open("/lib/x86_64/null.a", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fffbac4e380)     = -1 ENOENT (No such file or directory)
open("/lib/null.a", O_RDONLY)           = -1 ENOENT (No such file or directory)
stat("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/usr/lib/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or 
directory)
open("/usr/lib/tls/null.a", O_RDONLY)   = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7fffbac4e380)    = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/usr/lib/null.a", O_RDONLY)       = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=135168, ...}) = 0
open("/lib/x86_64-linux-gnu/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such 
file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such 
file or directory)
open("/lib/x86_64-linux-gnu/tls/null.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7fffbac4e380) = -1 ENOENT (No such file or 
directory)
open("/lib/x86_64-linux-gnu/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file 
or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file 
or directory)
open("/lib/x86_64-linux-gnu/null.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No 
such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No 
such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/null.a", O_RDONLY) = -1 ENOENT (No such 
file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7fffbac4e380) = -1 ENOENT (No such file 
or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such 
file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such 
file or directory)
open("/usr/lib/x86_64-linux-gnu/null.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT 
(No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT 
(No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No 
such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT 
(No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No 
such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such 
file or directory)
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.so", O_RDONLY) 
= 3
access("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.la", R_OK) = 0
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.la", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/xc.a", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/usr/lib/xc.a", O_RDONLY)         = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/xc.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
open("/usr/lib/x86_64-linux-gnu/xc.a", O_RDONLY) = -1 ENOENT (No such file or 
directory)
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.so", O_RDONLY) = 3
open("/usr/local/share/GraphicsMagick-1.4/config/colors.mgk", O_RDONLY) = 3

Bob
--
Bob Friesenhahn
address@hidden, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]