* [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 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.