All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] perf parse-events: Avoid string for PE_BP_COLON, PE_BP_SLASH
@ 2023-06-13 18:26 Ian Rogers
  2023-06-13 19:41 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Rogers @ 2023-06-13 18:26 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	Ian Rogers, Adrian Hunter, Rob Herring, Kan Liang,
	linux-perf-users, linux-kernel

There's no need to read the string ':' or '/' for PE_BP_COLON or
PE_BP_SLASH and doing so causes parse-events.y to leak memory.

The original patch has a committer note about not using these tokens
presumably as yacc spotted they were a memory leak because no
%destructor could be run. Remove the unused token workaround as there
is now no value associated with these tokens.

Fixes: f0617f526cb0 ("perf parse: Allow config terms with breakpoints")
Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/util/parse-events.h | 4 ----
 tools/perf/util/parse-events.l | 4 ++--
 tools/perf/util/parse-events.y | 9 ---------
 3 files changed, 2 insertions(+), 15 deletions(-)

diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 5fdc1f33f57e..b0eb95f93e9c 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -228,10 +228,6 @@ void parse_events_error__handle(struct parse_events_error *err, int idx,
 void parse_events_error__print(struct parse_events_error *err,
 			       const char *event);
 
-static inline void parse_events_unused_value(const void *x __maybe_unused)
-{
-}
-
 #ifdef HAVE_LIBELF_SUPPORT
 /*
  * If the probe point starts with '%',
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 7629af3d5c7c..99335ec586ae 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -315,13 +315,13 @@ r0x{num_raw_hex}	{ return str(yyscanner, PE_RAW); }
 	 * are the same, so trailing context can be used disambiguate the two
 	 * cases.
 	 */
-":"/{modifier_bp}	{ return str(yyscanner, PE_BP_COLON); }
+":"/{modifier_bp}	{ return PE_BP_COLON; }
 	/*
 	 * The slash before memory length can get mixed up with the slash before
 	 * config terms. Fortunately config terms do not start with a numeric
 	 * digit, so trailing context can be used disambiguate the two cases.
 	 */
-"/"/{digit}		{ return str(yyscanner, PE_BP_SLASH); }
+"/"/{digit}		{ return PE_BP_SLASH; }
 "/"/{non_digit}		{ BEGIN(config); return '/'; }
 {num_dec}		{ return value(yyscanner, 10); }
 {num_hex}		{ return value(yyscanner, 16); }
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 0c3d086cc22a..9f28d4b5502f 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -80,8 +80,6 @@ static void free_list_evsel(struct list_head* list_evsel)
 %type <str> PE_LEGACY_CACHE
 %type <str> PE_MODIFIER_EVENT
 %type <str> PE_MODIFIER_BP
-%type <str> PE_BP_COLON
-%type <str> PE_BP_SLASH
 %type <str> PE_EVENT_NAME
 %type <str> PE_KERNEL_PMU_EVENT PE_PMU_EVENT_FAKE
 %type <str> PE_DRV_CFG_TERM
@@ -510,9 +508,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event
 	struct list_head *list;
 	int err;
 
-	parse_events_unused_value(&$3);
-	parse_events_unused_value(&$5);
-
 	list = alloc_list();
 	ABORT_ON(!list);
 	err = parse_events_add_breakpoint(_parse_state, list,
@@ -531,8 +526,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE opt_event_config
 	struct list_head *list;
 	int err;
 
-	parse_events_unused_value(&$3);
-
 	list = alloc_list();
 	ABORT_ON(!list);
 	err = parse_events_add_breakpoint(_parse_state, list,
@@ -550,8 +543,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event_config
 	struct list_head *list;
 	int err;
 
-	parse_events_unused_value(&$3);
-
 	list = alloc_list();
 	ABORT_ON(!list);
 	err = parse_events_add_breakpoint(_parse_state, list,
-- 
2.41.0.162.gfafddb0af9-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf parse-events: Avoid string for PE_BP_COLON, PE_BP_SLASH
  2023-06-13 18:26 [PATCH v1] perf parse-events: Avoid string for PE_BP_COLON, PE_BP_SLASH Ian Rogers
@ 2023-06-13 19:41 ` Arnaldo Carvalho de Melo
  2023-06-13 20:26   ` Ian Rogers
  0 siblings, 1 reply; 3+ messages in thread
From: Arnaldo Carvalho de Melo @ 2023-06-13 19:41 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin,
	Jiri Olsa, Namhyung Kim, Adrian Hunter, Rob Herring, Kan Liang,
	linux-perf-users, linux-kernel

Em Tue, Jun 13, 2023 at 11:26:29AM -0700, Ian Rogers escreveu:
> There's no need to read the string ':' or '/' for PE_BP_COLON or
> PE_BP_SLASH and doing so causes parse-events.y to leak memory.
> 
> The original patch has a committer note about not using these tokens
> presumably as yacc spotted they were a memory leak because no
> %destructor could be run. Remove the unused token workaround as there
> is now no value associated with these tokens.

It looked like the compiler was the one warning (-Wother) about args not
being used, didn't made it clear those were possible memory leaks :-\

 util/parse-events.y:508.24-34: warning: unused value: $3 [-Wother]
   508 | PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event_config

Anyway, I'll apply and test your patch.

- Arnaldo
 
> Fixes: f0617f526cb0 ("perf parse: Allow config terms with breakpoints")
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/parse-events.h | 4 ----
>  tools/perf/util/parse-events.l | 4 ++--
>  tools/perf/util/parse-events.y | 9 ---------
>  3 files changed, 2 insertions(+), 15 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 5fdc1f33f57e..b0eb95f93e9c 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -228,10 +228,6 @@ void parse_events_error__handle(struct parse_events_error *err, int idx,
>  void parse_events_error__print(struct parse_events_error *err,
>  			       const char *event);
>  
> -static inline void parse_events_unused_value(const void *x __maybe_unused)
> -{
> -}
> -
>  #ifdef HAVE_LIBELF_SUPPORT
>  /*
>   * If the probe point starts with '%',
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 7629af3d5c7c..99335ec586ae 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -315,13 +315,13 @@ r0x{num_raw_hex}	{ return str(yyscanner, PE_RAW); }
>  	 * are the same, so trailing context can be used disambiguate the two
>  	 * cases.
>  	 */
> -":"/{modifier_bp}	{ return str(yyscanner, PE_BP_COLON); }
> +":"/{modifier_bp}	{ return PE_BP_COLON; }
>  	/*
>  	 * The slash before memory length can get mixed up with the slash before
>  	 * config terms. Fortunately config terms do not start with a numeric
>  	 * digit, so trailing context can be used disambiguate the two cases.
>  	 */
> -"/"/{digit}		{ return str(yyscanner, PE_BP_SLASH); }
> +"/"/{digit}		{ return PE_BP_SLASH; }
>  "/"/{non_digit}		{ BEGIN(config); return '/'; }
>  {num_dec}		{ return value(yyscanner, 10); }
>  {num_hex}		{ return value(yyscanner, 16); }
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index 0c3d086cc22a..9f28d4b5502f 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -80,8 +80,6 @@ static void free_list_evsel(struct list_head* list_evsel)
>  %type <str> PE_LEGACY_CACHE
>  %type <str> PE_MODIFIER_EVENT
>  %type <str> PE_MODIFIER_BP
> -%type <str> PE_BP_COLON
> -%type <str> PE_BP_SLASH
>  %type <str> PE_EVENT_NAME
>  %type <str> PE_KERNEL_PMU_EVENT PE_PMU_EVENT_FAKE
>  %type <str> PE_DRV_CFG_TERM
> @@ -510,9 +508,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event
>  	struct list_head *list;
>  	int err;
>  
> -	parse_events_unused_value(&$3);
> -	parse_events_unused_value(&$5);
> -
>  	list = alloc_list();
>  	ABORT_ON(!list);
>  	err = parse_events_add_breakpoint(_parse_state, list,
> @@ -531,8 +526,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE opt_event_config
>  	struct list_head *list;
>  	int err;
>  
> -	parse_events_unused_value(&$3);
> -
>  	list = alloc_list();
>  	ABORT_ON(!list);
>  	err = parse_events_add_breakpoint(_parse_state, list,
> @@ -550,8 +543,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event_config
>  	struct list_head *list;
>  	int err;
>  
> -	parse_events_unused_value(&$3);
> -
>  	list = alloc_list();
>  	ABORT_ON(!list);
>  	err = parse_events_add_breakpoint(_parse_state, list,
> -- 
> 2.41.0.162.gfafddb0af9-goog
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf parse-events: Avoid string for PE_BP_COLON, PE_BP_SLASH
  2023-06-13 19:41 ` Arnaldo Carvalho de Melo
@ 2023-06-13 20:26   ` Ian Rogers
  0 siblings, 0 replies; 3+ messages in thread
From: Ian Rogers @ 2023-06-13 20:26 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin,
	Jiri Olsa, Namhyung Kim, Adrian Hunter, Rob Herring, Kan Liang,
	linux-perf-users, linux-kernel

On Tue, Jun 13, 2023 at 12:41 PM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> Em Tue, Jun 13, 2023 at 11:26:29AM -0700, Ian Rogers escreveu:
> > There's no need to read the string ':' or '/' for PE_BP_COLON or
> > PE_BP_SLASH and doing so causes parse-events.y to leak memory.
> >
> > The original patch has a committer note about not using these tokens
> > presumably as yacc spotted they were a memory leak because no
> > %destructor could be run. Remove the unused token workaround as there
> > is now no value associated with these tokens.
>
> It looked like the compiler was the one warning (-Wother) about args not
> being used, didn't made it clear those were possible memory leaks :-\
>
>  util/parse-events.y:508.24-34: warning: unused value: $3 [-Wother]
>    508 | PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event_config
>
> Anyway, I'll apply and test your patch.
>
> - Arnaldo

Thanks, I couldn't repro the problem but I know that's because I don't
have your full container set up. Given my ignorance please help me fix
the commit message, or I can update it in a v2 set, or possibly we'll
need to bring back the unused logic.

Ian

>
> > Fixes: f0617f526cb0 ("perf parse: Allow config terms with breakpoints")
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> >  tools/perf/util/parse-events.h | 4 ----
> >  tools/perf/util/parse-events.l | 4 ++--
> >  tools/perf/util/parse-events.y | 9 ---------
> >  3 files changed, 2 insertions(+), 15 deletions(-)
> >
> > diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> > index 5fdc1f33f57e..b0eb95f93e9c 100644
> > --- a/tools/perf/util/parse-events.h
> > +++ b/tools/perf/util/parse-events.h
> > @@ -228,10 +228,6 @@ void parse_events_error__handle(struct parse_events_error *err, int idx,
> >  void parse_events_error__print(struct parse_events_error *err,
> >                              const char *event);
> >
> > -static inline void parse_events_unused_value(const void *x __maybe_unused)
> > -{
> > -}
> > -
> >  #ifdef HAVE_LIBELF_SUPPORT
> >  /*
> >   * If the probe point starts with '%',
> > diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> > index 7629af3d5c7c..99335ec586ae 100644
> > --- a/tools/perf/util/parse-events.l
> > +++ b/tools/perf/util/parse-events.l
> > @@ -315,13 +315,13 @@ r0x{num_raw_hex}        { return str(yyscanner, PE_RAW); }
> >        * are the same, so trailing context can be used disambiguate the two
> >        * cases.
> >        */
> > -":"/{modifier_bp}    { return str(yyscanner, PE_BP_COLON); }
> > +":"/{modifier_bp}    { return PE_BP_COLON; }
> >       /*
> >        * The slash before memory length can get mixed up with the slash before
> >        * config terms. Fortunately config terms do not start with a numeric
> >        * digit, so trailing context can be used disambiguate the two cases.
> >        */
> > -"/"/{digit}          { return str(yyscanner, PE_BP_SLASH); }
> > +"/"/{digit}          { return PE_BP_SLASH; }
> >  "/"/{non_digit}              { BEGIN(config); return '/'; }
> >  {num_dec}            { return value(yyscanner, 10); }
> >  {num_hex}            { return value(yyscanner, 16); }
> > diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> > index 0c3d086cc22a..9f28d4b5502f 100644
> > --- a/tools/perf/util/parse-events.y
> > +++ b/tools/perf/util/parse-events.y
> > @@ -80,8 +80,6 @@ static void free_list_evsel(struct list_head* list_evsel)
> >  %type <str> PE_LEGACY_CACHE
> >  %type <str> PE_MODIFIER_EVENT
> >  %type <str> PE_MODIFIER_BP
> > -%type <str> PE_BP_COLON
> > -%type <str> PE_BP_SLASH
> >  %type <str> PE_EVENT_NAME
> >  %type <str> PE_KERNEL_PMU_EVENT PE_PMU_EVENT_FAKE
> >  %type <str> PE_DRV_CFG_TERM
> > @@ -510,9 +508,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event
> >       struct list_head *list;
> >       int err;
> >
> > -     parse_events_unused_value(&$3);
> > -     parse_events_unused_value(&$5);
> > -
> >       list = alloc_list();
> >       ABORT_ON(!list);
> >       err = parse_events_add_breakpoint(_parse_state, list,
> > @@ -531,8 +526,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_SLASH PE_VALUE opt_event_config
> >       struct list_head *list;
> >       int err;
> >
> > -     parse_events_unused_value(&$3);
> > -
> >       list = alloc_list();
> >       ABORT_ON(!list);
> >       err = parse_events_add_breakpoint(_parse_state, list,
> > @@ -550,8 +543,6 @@ PE_PREFIX_MEM PE_VALUE PE_BP_COLON PE_MODIFIER_BP opt_event_config
> >       struct list_head *list;
> >       int err;
> >
> > -     parse_events_unused_value(&$3);
> > -
> >       list = alloc_list();
> >       ABORT_ON(!list);
> >       err = parse_events_add_breakpoint(_parse_state, list,
> > --
> > 2.41.0.162.gfafddb0af9-goog
> >
>
> --
>
> - Arnaldo

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-06-13 20:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-13 18:26 [PATCH v1] perf parse-events: Avoid string for PE_BP_COLON, PE_BP_SLASH Ian Rogers
2023-06-13 19:41 ` Arnaldo Carvalho de Melo
2023-06-13 20:26   ` Ian Rogers

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.