]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix ldd for PIE binaries after rtld stopped accepting binaries for dlopen.
authorkib <kib@FreeBSD.org>
Sat, 13 Jun 2020 18:21:31 +0000 (18:21 +0000)
committerkib <kib@FreeBSD.org>
Sat, 13 Jun 2020 18:21:31 +0000 (18:21 +0000)
commitdffbc53f6064e368ca7bfaeb033698dc2ec0e1b8
treea09e51a7d22fd1f4baccb7a65e2ec8dc28dbdd3b
parentc7344298e1802050a75651a9f7e11819485aa186
Fix ldd for PIE binaries after rtld stopped accepting binaries for dlopen.

ldd proclaims ET_DYN objects as shared libraries and tries to
dlopen(RTLD_TRACE) them to get dependencies. Since PIE binaries are
ET_DYN | DF_1_PIE, refusal to dlopen such binaries breaks ldd.

Fix it by reading and parsing dynamic segment looking for DF_FLAG_1
and taking DF_1_PIE into account when deciding between binary and
library.

Reported by: Dewayne Geraghty <dewayne@heuristicsystems.com.au>
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D25257
usr.bin/ldd/ldd.c