All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.