From: Siddhesh Poyarekar <siddhesh@gotplt.org>
To: libc-alpha@sourceware.org
Subject: [ping][PATCH v3] mtrace: Fix output with PIE and ASLR [BZ #22716]
Date: Tue, 17 Aug 2021 08:27:42 +0530 [thread overview]
Message-ID: <80db4ad2-b129-c125-f8a7-bf9faa9b1b8d@gotplt.org> (raw)
In-Reply-To: <20210812090746.612090-1-siddhesh@sourceware.org>
Ping! I'll push this if there are no further objections.
Thanks,
Siddhesh
On 8/12/21 2:37 PM, Siddhesh Poyarekar via Libc-alpha wrote:
> Record only the relative address of the caller in mtrace file. Use
> LD_TRACE_PRELINKING to get the executable as well as binary vs
> executable load offsets so that we may compute a base to add to the
> relative address in the mtrace file. This allows us to get a valid
> address to pass to addr2line in all cases.
>
> Co-authored-by: John Ogness <john.ogness@linutronix.de>
> ---
> Changes from v2:
> - Don't use ""
>
> Changes from v1:
> - Set LD_TRACE_PRELINK to an empty string so that it doesn't match any
> files and add a comment explaining it.
> - Formatting change in mtrace-impl.c
>
> malloc/mtrace-impl.c | 6 +++---
> malloc/mtrace.pl | 15 +++++++--------
> 2 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/malloc/mtrace-impl.c b/malloc/mtrace-impl.c
> index 9dffddfe2d..e7ace7f6fd 100644
> --- a/malloc/mtrace-impl.c
> +++ b/malloc/mtrace-impl.c
> @@ -67,9 +67,9 @@ tr_where (const void *caller, Dl_info *info)
> offset);
> }
>
> - fprintf (mallstream, "@ %s%s%s[%p] ", info->dli_fname ? : "",
> - info->dli_fname ? ":" : "",
> - buf, caller);
> + fprintf (mallstream, "@ %s%s%s[0x%" PRIxPTR "] ",
> + info->dli_fname ? : "", info->dli_fname ? ":" : "", buf,
> + caller - info->dli_fbase);
> }
> else
> fprintf (mallstream, "@ [%p] ", caller);
> diff --git a/malloc/mtrace.pl b/malloc/mtrace.pl
> index 6f49c8338d..b1073a1931 100644
> --- a/malloc/mtrace.pl
> +++ b/malloc/mtrace.pl
> @@ -75,11 +75,15 @@ if ($#ARGV == 0) {
> } else {
> $prog = "./$binary";
> }
> - if (open (LOCS, "env LD_TRACE_LOADED_OBJECTS=1 $prog |")) {
> + # Set the environment variable LD_TRACE_PRELINKING to an empty string so
> + # that we trigger tracing but do not match with the executable or any of
> + # its dependencies.
> + if (open (LOCS, "env LD_TRACE_PRELINKING= $prog |")) {
> while (<LOCS>) {
> chop;
> - if (/^.*=> (.*) .(0x[0123456789abcdef]*).$/) {
> + if (/^.*=> (.*) \((0x[0123456789abcdef]*), (0x[0123456789abcdef]*).*/) {
> $locs{$1} = $2;
> + $rel{$1} = hex($2) - hex($3);
> }
> }
> close (LOCS);
> @@ -110,12 +114,7 @@ sub location {
> my $addr = $2;
> my $searchaddr;
> return $cache{$addr} if (exists $cache{$addr});
> - if ($locs{$prog} ne "") {
> - $searchaddr = sprintf "%#x", $addr - $locs{$prog};
> - } else {
> - $searchaddr = $addr;
> - $prog = $binary;
> - }
> + $searchaddr = sprintf "%#x", hex($addr) + $rel{$prog};
> if ($binary ne "" && open (ADDR, "addr2line -e $prog $searchaddr|")) {
> my $line = <ADDR>;
> chomp $line;
>
next prev parent reply other threads:[~2021-08-17 2:58 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-12 9:07 [PATCH v3] mtrace: Fix output with PIE and ASLR [BZ #22716] Siddhesh Poyarekar via Libc-alpha
2021-08-12 10:39 ` John Ogness via Libc-alpha
2021-08-17 2:57 ` Siddhesh Poyarekar [this message]
2021-08-23 2:45 ` [ping][PATCH " Siddhesh Poyarekar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=80db4ad2-b129-c125-f8a7-bf9faa9b1b8d@gotplt.org \
--to=siddhesh@gotplt.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).