* [PATCH] perf annotate: pass filename to objdump via execl
@ 2018-10-14 8:18 Ivan Krylov
2018-10-14 14:04 ` Jiri Olsa
2019-01-08 15:44 ` [tip:perf/urgent] perf annotate: Pass " tip-bot for Ivan Krylov
0 siblings, 2 replies; 5+ messages in thread
From: Ivan Krylov @ 2018-10-14 8:18 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel
The symbol__disassemble() function uses shell to launch objdump and filter
its output via grep. Passing filenames by interpolating them into the
command line via "%s" may lead to problems if said filenames contain
special characters.
Instead, pass the filename as a command line argument where it is not
subject to any kind of interpretation, then use quoted shell
interpolation to build the strings we need safely.
Signed-off-by: Ivan Krylov <krylov.r00t@gmail.com>
---
tools/perf/util/annotate.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 28cd6a174..4a870181e 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1696,15 +1696,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
err = asprintf(&command,
"%s %s%s --start-address=0x%016" PRIx64
" --stop-address=0x%016" PRIx64
- " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
+ " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand",
opts->objdump_path ?: "objdump",
opts->disassembler_style ? "-M " : "",
opts->disassembler_style ?: "",
map__rip_2objdump(map, sym->start),
map__rip_2objdump(map, sym->end),
opts->show_asm_raw ? "" : "--no-show-raw",
- opts->annotate_src ? "-S" : "",
- symfs_filename, symfs_filename);
+ opts->annotate_src ? "-S" : "");
if (err < 0) {
pr_err("Failure allocating memory for the command to run\n");
@@ -1729,7 +1728,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
close(stdout_fd[0]);
dup2(stdout_fd[1], 1);
close(stdout_fd[1]);
- execl("/bin/sh", "sh", "-c", command, NULL);
+ execl("/bin/sh", "sh", "-c", command, "--", symfs_filename,
+ NULL);
perror(command);
exit(-1);
}
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] perf annotate: pass filename to objdump via execl
2018-10-14 8:18 [PATCH] perf annotate: pass filename to objdump via execl Ivan Krylov
@ 2018-10-14 14:04 ` Jiri Olsa
2018-12-30 14:37 ` Ivan Krylov
2019-01-08 15:44 ` [tip:perf/urgent] perf annotate: Pass " tip-bot for Ivan Krylov
1 sibling, 1 reply; 5+ messages in thread
From: Jiri Olsa @ 2018-10-14 14:04 UTC (permalink / raw)
To: Ivan Krylov
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Alexander Shishkin, Namhyung Kim, linux-kernel
On Sun, Oct 14, 2018 at 11:18:03AM +0300, Ivan Krylov wrote:
> The symbol__disassemble() function uses shell to launch objdump and filter
> its output via grep. Passing filenames by interpolating them into the
> command line via "%s" may lead to problems if said filenames contain
> special characters.
>
> Instead, pass the filename as a command line argument where it is not
> subject to any kind of interpretation, then use quoted shell
> interpolation to build the strings we need safely.
>
> Signed-off-by: Ivan Krylov <krylov.r00t@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
thanks,
jirka
> ---
> tools/perf/util/annotate.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 28cd6a174..4a870181e 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -1696,15 +1696,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
> err = asprintf(&command,
> "%s %s%s --start-address=0x%016" PRIx64
> " --stop-address=0x%016" PRIx64
> - " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
> + " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand",
> opts->objdump_path ?: "objdump",
> opts->disassembler_style ? "-M " : "",
> opts->disassembler_style ?: "",
> map__rip_2objdump(map, sym->start),
> map__rip_2objdump(map, sym->end),
> opts->show_asm_raw ? "" : "--no-show-raw",
> - opts->annotate_src ? "-S" : "",
> - symfs_filename, symfs_filename);
> + opts->annotate_src ? "-S" : "");
>
> if (err < 0) {
> pr_err("Failure allocating memory for the command to run\n");
> @@ -1729,7 +1728,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
> close(stdout_fd[0]);
> dup2(stdout_fd[1], 1);
> close(stdout_fd[1]);
> - execl("/bin/sh", "sh", "-c", command, NULL);
> + execl("/bin/sh", "sh", "-c", command, "--", symfs_filename,
> + NULL);
> perror(command);
> exit(-1);
> }
> --
> 2.11.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] perf annotate: pass filename to objdump via execl
2018-10-14 14:04 ` Jiri Olsa
@ 2018-12-30 14:37 ` Ivan Krylov
2019-01-04 15:41 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 5+ messages in thread
From: Ivan Krylov @ 2018-12-30 14:37 UTC (permalink / raw)
To: Jiri Olsa
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Alexander Shishkin, Namhyung Kim, linux-kernel
On Sun, 14 Oct 2018 16:04:51 +0200
Jiri Olsa <jolsa@redhat.com> wrote:
> Acked-by: Jiri Olsa <jolsa@kernel.org>
Is there anything I could do to improve the patch? Should I wrap the
path to objdump executable in a similar way?
--
Best regards,
Ivan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] perf annotate: pass filename to objdump via execl
2018-12-30 14:37 ` Ivan Krylov
@ 2019-01-04 15:41 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2019-01-04 15:41 UTC (permalink / raw)
To: Ivan Krylov
Cc: Jiri Olsa, Peter Zijlstra, Ingo Molnar, Alexander Shishkin,
Namhyung Kim, linux-kernel
Em Sun, Dec 30, 2018 at 05:37:43PM +0300, Ivan Krylov escreveu:
> On Sun, 14 Oct 2018 16:04:51 +0200
> Jiri Olsa <jolsa@redhat.com> wrote:
>
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
>
> Is there anything I could do to improve the patch? Should I wrap the
> path to objdump executable in a similar way?
Nope, just fell thru the holidays crack, processing it now.
- Arnaldo
^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip:perf/urgent] perf annotate: Pass filename to objdump via execl
2018-10-14 8:18 [PATCH] perf annotate: pass filename to objdump via execl Ivan Krylov
2018-10-14 14:04 ` Jiri Olsa
@ 2019-01-08 15:44 ` tip-bot for Ivan Krylov
1 sibling, 0 replies; 5+ messages in thread
From: tip-bot for Ivan Krylov @ 2019-01-08 15:44 UTC (permalink / raw)
To: linux-tip-commits
Cc: mingo, tglx, jolsa, hpa, alexander.shishkin, linux-kernel, peterz,
namhyung, krylov.r00t, acme
Commit-ID: 442b4eb3af44906fcbb526d98c314b27f8c9acf3
Gitweb: https://git.kernel.org/tip/442b4eb3af44906fcbb526d98c314b27f8c9acf3
Author: Ivan Krylov <krylov.r00t@gmail.com>
AuthorDate: Sun, 14 Oct 2018 11:18:03 +0300
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 4 Jan 2019 12:54:49 -0300
perf annotate: Pass filename to objdump via execl
The symbol__disassemble() function uses shell to launch objdump and
filter its output via grep. Passing filenames by interpolating them into
the command line via "%s" may lead to problems if said filenames contain
special characters.
Instead, pass the filename as a command line argument where it is not
subject to any kind of interpretation, then use quoted shell
interpolation to build the strings we need safely.
Signed-off-by: Ivan Krylov <krylov.r00t@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20181014111803.5d83b806@Tarkus
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/annotate.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index ac9805e0bc76..70de8f6b3aee 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1723,15 +1723,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
err = asprintf(&command,
"%s %s%s --start-address=0x%016" PRIx64
" --stop-address=0x%016" PRIx64
- " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
+ " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand",
opts->objdump_path ?: "objdump",
opts->disassembler_style ? "-M " : "",
opts->disassembler_style ?: "",
map__rip_2objdump(map, sym->start),
map__rip_2objdump(map, sym->end),
opts->show_asm_raw ? "" : "--no-show-raw",
- opts->annotate_src ? "-S" : "",
- symfs_filename, symfs_filename);
+ opts->annotate_src ? "-S" : "");
if (err < 0) {
pr_err("Failure allocating memory for the command to run\n");
@@ -1756,7 +1755,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
close(stdout_fd[0]);
dup2(stdout_fd[1], 1);
close(stdout_fd[1]);
- execl("/bin/sh", "sh", "-c", command, NULL);
+ execl("/bin/sh", "sh", "-c", command, "--", symfs_filename,
+ NULL);
perror(command);
exit(-1);
}
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-01-08 15:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-14 8:18 [PATCH] perf annotate: pass filename to objdump via execl Ivan Krylov
2018-10-14 14:04 ` Jiri Olsa
2018-12-30 14:37 ` Ivan Krylov
2019-01-04 15:41 ` Arnaldo Carvalho de Melo
2019-01-08 15:44 ` [tip:perf/urgent] perf annotate: Pass " tip-bot for Ivan Krylov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.