* [PATCH] perf - ensure offset provided during probe addition is not greater than function length [not found] <4F45FABE.90104@linux.vnet.ibm.com> @ 2012-02-24 7:41 ` Prashanth Nageshappa 2012-02-24 10:32 ` Masami Hiramatsu 2012-03-02 9:50 ` [tip:perf/urgent] perf probe: Ensure offset provided " tip-bot for Prashanth Nageshappa 0 siblings, 2 replies; 5+ messages in thread From: Prashanth Nageshappa @ 2012-02-24 7:41 UTC (permalink / raw) To: masami.hiramatsu.pt, ananth, akpm, linux-kernel; +Cc: jbaron, rostedt, srikar perf probe allows kprobe to be inserted at any offset from a function start, which results in adding kprobes to unintended location. (example: perf probe do_fork+10000 is allowed even though size of do_fork is ~904) This patch will ensure probe addition fails when the offset specified is greater than size of the function. Signed-off-by: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> --- tools/perf/util/probe-finder.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 5d73262..d298f94 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf) static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, bool retprobe, struct probe_trace_point *tp) { - Dwarf_Addr eaddr; + Dwarf_Addr eaddr, highaddr; const char *name; /* Copy the name of probe point */ @@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, dwarf_diename(sp_die)); return -ENOENT; } + if (dwarf_highpc(sp_die, &highaddr) != 0) { + pr_warning("Failed to get end address of %s\n", + dwarf_diename(sp_die)); + return -ENOENT; + } + if (paddr > highaddr) { + pr_warning("Offset specified is greater than size of %s\n", + dwarf_diename(sp_die)); + return -EINVAL; + } tp->symbol = strdup(name); if (tp->symbol == NULL) return -ENOMEM; ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] perf - ensure offset provided during probe addition is not greater than function length 2012-02-24 7:41 ` [PATCH] perf - ensure offset provided during probe addition is not greater than function length Prashanth Nageshappa @ 2012-02-24 10:32 ` Masami Hiramatsu 2012-02-24 11:33 ` Prashanth Nageshappa 2012-03-02 9:50 ` [tip:perf/urgent] perf probe: Ensure offset provided " tip-bot for Prashanth Nageshappa 1 sibling, 1 reply; 5+ messages in thread From: Masami Hiramatsu @ 2012-02-24 10:32 UTC (permalink / raw) To: Prashanth Nageshappa; +Cc: ananth, akpm, linux-kernel, jbaron, rostedt, srikar (2012/02/24 16:41), Prashanth Nageshappa wrote: > perf probe allows kprobe to be inserted at any offset from a function > start, which results in adding kprobes to unintended location. > (example: perf probe do_fork+10000 is allowed even though size of > do_fork is ~904) > > This patch will ensure probe addition fails when the offset specified > is greater than size of the function. > > > Signed-off-by: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> This seems good to me. Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Thank you, > --- > > tools/perf/util/probe-finder.c | 12 +++++++++++- > 1 files changed, 11 insertions(+), 1 deletions(-) > > diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c > index 5d73262..d298f94 100644 > --- a/tools/perf/util/probe-finder.c > +++ b/tools/perf/util/probe-finder.c > @@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf) > static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, > bool retprobe, struct probe_trace_point *tp) > { > - Dwarf_Addr eaddr; > + Dwarf_Addr eaddr, highaddr; > const char *name; > > /* Copy the name of probe point */ > @@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, > dwarf_diename(sp_die)); > return -ENOENT; > } > + if (dwarf_highpc(sp_die, &highaddr) != 0) { > + pr_warning("Failed to get end address of %s\n", > + dwarf_diename(sp_die)); > + return -ENOENT; > + } > + if (paddr > highaddr) { > + pr_warning("Offset specified is greater than size of %s\n", > + dwarf_diename(sp_die)); > + return -EINVAL; > + } > tp->symbol = strdup(name); > if (tp->symbol == NULL) > return -ENOMEM; > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] perf - ensure offset provided during probe addition is not greater than function length 2012-02-24 10:32 ` Masami Hiramatsu @ 2012-02-24 11:33 ` Prashanth Nageshappa 2012-02-24 19:16 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 5+ messages in thread From: Prashanth Nageshappa @ 2012-02-24 11:33 UTC (permalink / raw) To: acme; +Cc: ananth, akpm, linux-kernel, jbaron, rostedt, srikar, Masami Hiramatsu Can you please pick up this patch? On 02/24/2012 04:02 PM, Masami Hiramatsu wrote: > (2012/02/24 16:41), Prashanth Nageshappa wrote: >> perf probe allows kprobe to be inserted at any offset from a function >> start, which results in adding kprobes to unintended location. >> (example: perf probe do_fork+10000 is allowed even though size of >> do_fork is ~904) >> >> This patch will ensure probe addition fails when the offset specified >> is greater than size of the function. >> >> >> Signed-off-by: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> > > This seems good to me. > > Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > > Thank you, > >> --- >> >> tools/perf/util/probe-finder.c | 12 +++++++++++- >> 1 files changed, 11 insertions(+), 1 deletions(-) >> >> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c >> index 5d73262..d298f94 100644 >> --- a/tools/perf/util/probe-finder.c >> +++ b/tools/perf/util/probe-finder.c >> @@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf) >> static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, >> bool retprobe, struct probe_trace_point *tp) >> { >> - Dwarf_Addr eaddr; >> + Dwarf_Addr eaddr, highaddr; >> const char *name; >> >> /* Copy the name of probe point */ >> @@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, >> dwarf_diename(sp_die)); >> return -ENOENT; >> } >> + if (dwarf_highpc(sp_die, &highaddr) != 0) { >> + pr_warning("Failed to get end address of %s\n", >> + dwarf_diename(sp_die)); >> + return -ENOENT; >> + } >> + if (paddr > highaddr) { >> + pr_warning("Offset specified is greater than size of %s\n", >> + dwarf_diename(sp_die)); >> + return -EINVAL; >> + } >> tp->symbol = strdup(name); >> if (tp->symbol == NULL) >> return -ENOMEM; >> > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] perf - ensure offset provided during probe addition is not greater than function length 2012-02-24 11:33 ` Prashanth Nageshappa @ 2012-02-24 19:16 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 5+ messages in thread From: Arnaldo Carvalho de Melo @ 2012-02-24 19:16 UTC (permalink / raw) To: Prashanth Nageshappa Cc: ananth, akpm, linux-kernel, jbaron, rostedt, srikar, Masami Hiramatsu Em Fri, Feb 24, 2012 at 05:03:03PM +0530, Prashanth Nageshappa escreveu: > Can you please pick up this patch? I'll do it, thanks, - Arnaldo > On 02/24/2012 04:02 PM, Masami Hiramatsu wrote: > > > (2012/02/24 16:41), Prashanth Nageshappa wrote: > >> perf probe allows kprobe to be inserted at any offset from a function > >> start, which results in adding kprobes to unintended location. > >> (example: perf probe do_fork+10000 is allowed even though size of > >> do_fork is ~904) > >> > >> This patch will ensure probe addition fails when the offset specified > >> is greater than size of the function. > >> > >> > >> Signed-off-by: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> > > > > This seems good to me. > > > > Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > > > > Thank you, > > > >> --- > >> > >> tools/perf/util/probe-finder.c | 12 +++++++++++- > >> 1 files changed, 11 insertions(+), 1 deletions(-) > >> > >> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c > >> index 5d73262..d298f94 100644 > >> --- a/tools/perf/util/probe-finder.c > >> +++ b/tools/perf/util/probe-finder.c > >> @@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf) > >> static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, > >> bool retprobe, struct probe_trace_point *tp) > >> { > >> - Dwarf_Addr eaddr; > >> + Dwarf_Addr eaddr, highaddr; > >> const char *name; > >> > >> /* Copy the name of probe point */ > >> @@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, > >> dwarf_diename(sp_die)); > >> return -ENOENT; > >> } > >> + if (dwarf_highpc(sp_die, &highaddr) != 0) { > >> + pr_warning("Failed to get end address of %s\n", > >> + dwarf_diename(sp_die)); > >> + return -ENOENT; > >> + } > >> + if (paddr > highaddr) { > >> + pr_warning("Offset specified is greater than size of %s\n", > >> + dwarf_diename(sp_die)); > >> + return -EINVAL; > >> + } > >> tp->symbol = strdup(name); > >> if (tp->symbol == NULL) > >> return -ENOMEM; > >> > > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip:perf/urgent] perf probe: Ensure offset provided is not greater than function length 2012-02-24 7:41 ` [PATCH] perf - ensure offset provided during probe addition is not greater than function length Prashanth Nageshappa 2012-02-24 10:32 ` Masami Hiramatsu @ 2012-03-02 9:50 ` tip-bot for Prashanth Nageshappa 1 sibling, 0 replies; 5+ messages in thread From: tip-bot for Prashanth Nageshappa @ 2012-03-02 9:50 UTC (permalink / raw) To: linux-tip-commits Cc: acme, linux-kernel, hpa, mingo, prashanth, ananth, masami.hiramatsu.pt, rostedt, akpm, srikar, jbaron, tglx Commit-ID: 26b7952494772f0e695271fbd6cf83a852f60f25 Gitweb: http://git.kernel.org/tip/26b7952494772f0e695271fbd6cf83a852f60f25 Author: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> AuthorDate: Fri, 24 Feb 2012 13:11:39 +0530 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Wed, 29 Feb 2012 18:29:45 -0300 perf probe: Ensure offset provided is not greater than function length The perf probe command allows kprobe to be inserted at any offset from a function start, which results in adding kprobes to unintended location. Example: perf probe do_fork+10000 is allowed even though size of do_fork is ~904. This patch will ensure probe addition fails when the offset specified is greater than size of the function. Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Jason Baron <jbaron@redhat.com> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Link: http://lkml.kernel.org/r/4F473F33.4060409@linux.vnet.ibm.com Signed-off-by: Prashanth Nageshappa <prashanth@linux.vnet.ibm.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/probe-finder.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 5d73262..74bd2e6 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf) static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, bool retprobe, struct probe_trace_point *tp) { - Dwarf_Addr eaddr; + Dwarf_Addr eaddr, highaddr; const char *name; /* Copy the name of probe point */ @@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr, dwarf_diename(sp_die)); return -ENOENT; } + if (dwarf_highpc(sp_die, &highaddr) != 0) { + pr_warning("Failed to get end address of %s\n", + dwarf_diename(sp_die)); + return -ENOENT; + } + if (paddr > highaddr) { + pr_warning("Offset specified is greater than size of %s\n", + dwarf_diename(sp_die)); + return -EINVAL; + } tp->symbol = strdup(name); if (tp->symbol == NULL) return -ENOMEM; ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-03-02 9:53 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <4F45FABE.90104@linux.vnet.ibm.com>
2012-02-24 7:41 ` [PATCH] perf - ensure offset provided during probe addition is not greater than function length Prashanth Nageshappa
2012-02-24 10:32 ` Masami Hiramatsu
2012-02-24 11:33 ` Prashanth Nageshappa
2012-02-24 19:16 ` Arnaldo Carvalho de Melo
2012-03-02 9:50 ` [tip:perf/urgent] perf probe: Ensure offset provided " tip-bot for Prashanth Nageshappa
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 NNTP newsgroup(s).