git: b61bce17f346 - main - rtld dump_auxv: be pedantic and distiguish between auxv union members based on format
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 13 Nov 2021 20:13:31 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=b61bce17f346d79cecfd8f195a64b10f77be43b1
commit b61bce17f346d79cecfd8f195a64b10f77be43b1
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-11-13 19:04:51 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-11-13 20:13:10 +0000
rtld dump_auxv: be pedantic and distiguish between auxv union members based on format
Reviewed by: jrtc27
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
---
libexec/rtld-elf/rtld.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 4c3762ee1ab9..d5c3d2893582 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -6105,6 +6105,15 @@ static const struct auxfmt {
AUXFMT(AT_FXRNG, "%p"),
};
+static bool
+is_ptr_fmt(const char *fmt)
+{
+ char last;
+
+ last = fmt[strlen(fmt) - 1];
+ return (last == 'p' || last == 's');
+}
+
static void
dump_auxv(Elf_Auxinfo **aux_info)
{
@@ -6120,7 +6129,13 @@ dump_auxv(Elf_Auxinfo **aux_info)
if (fmt->fmt == NULL)
continue;
rtld_fdprintf(STDOUT_FILENO, "%s:\t", fmt->name);
- rtld_fdprintfx(STDOUT_FILENO, fmt->fmt, auxp->a_un.a_ptr);
+ if (is_ptr_fmt(fmt->fmt)) {
+ rtld_fdprintfx(STDOUT_FILENO, fmt->fmt,
+ auxp->a_un.a_ptr);
+ } else {
+ rtld_fdprintfx(STDOUT_FILENO, fmt->fmt,
+ auxp->a_un.a_val);
+ }
rtld_fdprintf(STDOUT_FILENO, "\n");
}
}