From ad8fb33ffaf265dbeb9b8b84a7b3873c0261b076 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 23 Jun 2020 03:18:57 +0000 Subject: [PATCH] MFC r362251: rtld: Allow to load ET_DYN && DF_1_PIE when tracing. --- libexec/rtld-elf/rtld.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 5f92f9f877b..86c3218ea9d 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -2565,12 +2565,13 @@ do_load_object(int fd, const char *name, char *path, struct stat *sbp, obj->path = path; if (!digest_dynamic(obj, 0)) goto errp; - if (obj->z_pie) { + dbg("%s valid_hash_sysv %d valid_hash_gnu %d dynsymcount %d", obj->path, + obj->valid_hash_sysv, obj->valid_hash_gnu, obj->dynsymcount); + if (obj->z_pie && (flags & RTLD_LO_TRACE) == 0) { + dbg("refusing to load PIE executable \"%s\"", obj->path); _rtld_error("Cannot load PIE binary %s as DSO", obj->path); goto errp; } - dbg("%s valid_hash_sysv %d valid_hash_gnu %d dynsymcount %d", obj->path, - obj->valid_hash_sysv, obj->valid_hash_gnu, obj->dynsymcount); if (obj->z_noopen && (flags & (RTLD_LO_DLOPEN | RTLD_LO_TRACE)) == RTLD_LO_DLOPEN) { dbg("refusing to load non-loadable \"%s\"", obj->path); -- 2.45.0