All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Masami Hiramatsu <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: namhyung@kernel.org, peterz@infradead.org,
	linux-kernel@vger.kernel.org, hpa@zytor.com, jolsa@redhat.com,
	hemant@linux.vnet.ibm.com, acme@redhat.com, mingo@kernel.org,
	dsahern@gmail.com, ananth@in.ibm.com, tglx@linutronix.de,
	masami.hiramatsu.pt@hitachi.com
Subject: [tip:perf/core] perf probe: Make --line checks validate C-style function name
Date: Sun, 10 May 2015 00:04:56 -0700	[thread overview]
Message-ID: <tip-573709fdfd668423ba4202c4f1016e3cd7bdd134@git.kernel.org> (raw)
In-Reply-To: <20150506124647.4961.99473.stgit@localhost.localdomain>

Commit-ID:  573709fdfd668423ba4202c4f1016e3cd7bdd134
Gitweb:     http://git.kernel.org/tip/573709fdfd668423ba4202c4f1016e3cd7bdd134
Author:     Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
AuthorDate: Wed, 6 May 2015 21:46:47 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 8 May 2015 16:05:02 -0300

perf probe: Make --line checks validate C-style function name

Fix --line to check valid C-style function name and returns
a semantic error if it is not.

For example, previously, --line doesn't support lazy pattern
but it doesn't recognized as a semantic error.

  ----
  # perf probe -L 'func;return*:0-10'
  Specified source line is not found.
    Error: Failed to show lines.
  ----

With this patch, it is correctly handled as a semantic error.
  ----
  # perf probe -L 'func;return*:0-10'
  Semantic error :'func;return*' is not a valid function name.
  ...
  ----

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20150506124647.4961.99473.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 63cb7c5..4265f2e 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -980,6 +980,18 @@ static int parse_line_num(char **ptr, int *val, const char *what)
 	return 0;
 }
 
+/* Check the name is good for event, group or function */
+static bool is_c_func_name(const char *name)
+{
+	if (!isalpha(*name) && *name != '_')
+		return false;
+	while (*++name != '\0') {
+		if (!isalpha(*name) && !isdigit(*name) && *name != '_')
+			return false;
+	}
+	return true;
+}
+
 /*
  * Stuff 'lr' according to the line range described by 'arg'.
  * The line range syntax is described by:
@@ -1048,10 +1060,15 @@ int parse_line_range_desc(const char *arg, struct line_range *lr)
 			goto err;
 		}
 		lr->function = name;
-	} else if (strchr(name, '.'))
+	} else if (strchr(name, '/') || strchr(name, '.'))
 		lr->file = name;
-	else
+	else if (is_c_func_name(name))/* We reuse it for checking funcname */
 		lr->function = name;
+	else {	/* Invalid name */
+		semantic_error("'%s' is not a valid function name.\n", name);
+		err = -EINVAL;
+		goto err;
+	}
 
 	return 0;
 err:
@@ -1059,18 +1076,6 @@ err:
 	return err;
 }
 
-/* Check the name is good for event/group */
-static bool check_event_name(const char *name)
-{
-	if (!isalpha(*name) && *name != '_')
-		return false;
-	while (*++name != '\0') {
-		if (!isalpha(*name) && !isdigit(*name) && *name != '_')
-			return false;
-	}
-	return true;
-}
-
 /* Parse probepoint definition. */
 static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 {
@@ -1094,7 +1099,7 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 			semantic_error("Group name is not supported yet.\n");
 			return -ENOTSUP;
 		}
-		if (!check_event_name(arg)) {
+		if (!is_c_func_name(arg)) {
 			semantic_error("%s is bad for event name -it must "
 				       "follow C symbol-naming rule.\n", arg);
 			return -EINVAL;

  reply	other threads:[~2015-05-10  7:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-06 12:46 [PATCH perf/core 0/8] perf-probe bugfixes and support wildcard for probe points Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 1/8] [BUGFIX] perf probe: Fix to close probe_events file in error Masami Hiramatsu
2015-05-10  7:04   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 2/8] [BUGFIX] perf probe: Fix a typo for the flags of open Masami Hiramatsu
2015-05-10  7:04   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 3/8] [BUGFIX] perf probe: Fix to return 0 when positive value returned Masami Hiramatsu
2015-05-10  7:04   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 4/8] [BUGFIX] perf probe: --line checks valid C-style function name Masami Hiramatsu
2015-05-10  7:04   ` tip-bot for Masami Hiramatsu [this message]
2015-05-06 12:46 ` [PATCH perf/core 5/8] perf probe: Skip kernel symbols which is out of .text Masami Hiramatsu
2015-05-10  7:05   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 6/8] perf-probe: Add --no-inlines option to avoid searching inline functions Masami Hiramatsu
2015-05-06 15:52   ` Arnaldo Carvalho de Melo
2015-05-06 23:22     ` Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 7/8] perf-probe: Support $params special probe argument Masami Hiramatsu
2015-05-10  7:05   ` [tip:perf/core] perf probe: " tip-bot for Masami Hiramatsu
2015-05-06 12:46 ` [PATCH perf/core 8/8] perf-probe: Support glob wildcards for function name Masami Hiramatsu
2015-05-06 16:19 ` [PATCH perf/core 0/8] perf-probe bugfixes and support wildcard for probe points Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-573709fdfd668423ba4202c4f1016e3cd7bdd134@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=ananth@in.ibm.com \
    --cc=dsahern@gmail.com \
    --cc=hemant@linux.vnet.ibm.com \
    --cc=hpa@zytor.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.