summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/rtld.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-09-19 05:11:25 +0000
committerkib <kib@FreeBSD.org>2012-09-19 05:11:25 +0000
commit1bcc5f9efee181c1e3591d0a6ebad354372dfd9a (patch)
treecad8db72cf7369b50daa486c97abaed68a104899 /libexec/rtld-elf/rtld.c
parent282d6b7f2c0f1fb51d911f75ef9989f62e389985 (diff)
downloadFreeBSD-src-1bcc5f9efee181c1e3591d0a6ebad354372dfd9a.zip
FreeBSD-src-1bcc5f9efee181c1e3591d0a6ebad354372dfd9a.tar.gz
Do not reference z_nodeflib for !objgiven case, thus fixing LD_PRELOAD
for a non-absolute path. PR: bin/171604 MFC after: 3 days
Diffstat (limited to 'libexec/rtld-elf/rtld.c')
-rw-r--r--libexec/rtld-elf/rtld.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 050adbb..1a7010e 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -1429,7 +1429,7 @@ find_library(const char *xname, const Obj_Entry *refobj)
{
char *pathname;
char *name;
- bool objgiven;
+ bool nodeflib, objgiven;
objgiven = refobj != NULL;
if (strchr(xname, '/') != NULL) { /* Hard coded pathname */
@@ -1464,6 +1464,7 @@ find_library(const char *xname, const Obj_Entry *refobj)
(pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL)
return (pathname);
} else {
+ nodeflib = objgiven ? refobj->z_nodeflib : false;
if ((objgiven &&
(pathname = search_library_path(name, refobj->rpath)) != NULL) ||
(objgiven && refobj->runpath == NULL && refobj != obj_main &&
@@ -1471,9 +1472,8 @@ find_library(const char *xname, const Obj_Entry *refobj)
(pathname = search_library_path(name, ld_library_path)) != NULL ||
(objgiven &&
(pathname = search_library_path(name, refobj->runpath)) != NULL) ||
- (pathname = search_library_path(name, gethints(refobj->z_nodeflib)))
- != NULL ||
- (objgiven && !refobj->z_nodeflib &&
+ (pathname = search_library_path(name, gethints(nodeflib))) != NULL ||
+ (objgiven && !nodeflib &&
(pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL))
return (pathname);
}
OpenPOWER on IntegriCloud