git: 7a3d7b9efc33 - stable/13 - ldd: do not use dlopen(RTLD_TRACE) for dso when format is specified
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 28 Oct 2021 00:36:29 UTC
The branch stable/13 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=7a3d7b9efc3373e439bccf234fd4fadd2af9a75f
commit 7a3d7b9efc3373e439bccf234fd4fadd2af9a75f
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-10-11 22:35:56 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-10-28 00:35:54 +0000
ldd: do not use dlopen(RTLD_TRACE) for dso when format is specified
PR: 259069
(cherry picked from commit 2c7a6dad4de17c357eb91c723bad860c6512a598)
---
usr.bin/ldd/Makefile | 1 +
usr.bin/ldd/ldd.c | 12 +++++++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/usr.bin/ldd/Makefile b/usr.bin/ldd/Makefile
index 78e551d80a33..1a671bc9f402 100644
--- a/usr.bin/ldd/Makefile
+++ b/usr.bin/ldd/Makefile
@@ -3,6 +3,7 @@
PROG?= ldd
SRCS= ldd.c
+CFLAGS+= -I${SRCTOP}/libexec/rtld-elf
LIBADD= elf
.include <bsd.prog.mk>
diff --git a/usr.bin/ldd/ldd.c b/usr.bin/ldd/ldd.c
index ee3f2070598d..492e29dff211 100644
--- a/usr.bin/ldd/ldd.c
+++ b/usr.bin/ldd/ldd.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <fcntl.h>
#include <gelf.h>
#include <libelf.h>
+#include <rtld_paths.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -134,6 +135,7 @@ int
main(int argc, char *argv[])
{
char *fmt1, *fmt2;
+ const char *rtld;
int aflag, c, fd, rval, status, is_shlib, rv, type;
aflag = 0;
@@ -234,9 +236,17 @@ main(int argc, char *argv[])
if (is_shlib == 0) {
execl(*argv, *argv, (char *)NULL);
warn("%s", *argv);
- } else {
+ } else if (fmt1 == NULL && fmt2 == NULL) {
dlopen(*argv, RTLD_TRACE);
warnx("%s: %s", *argv, dlerror());
+ } else {
+ rtld = _PATH_RTLD;
+#if __ELF_WORD_SIZE > 32 && defined(ELF32_SUPPORTED)
+ if (type == TYPE_ELF32)
+ rtld = _COMPAT32_PATH_RTLD;
+#endif
+ execl(rtld, rtld, "-d", "--",
+ *argv, (char *)NULL);
}
_exit(1);
}