mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
perf probe: Fix argv array size in probe parser
Since the syntax has been changed, probe definition needs parameters less than MAX_PROBE_ARGS + 1 (probe-point + arguments). Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Jim Keniston <jkenisto@us.ibm.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Frank Ch. Eigler <fche@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jason Baron <jbaron@redhat.com> Cc: K.Prasad <prasad@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20091201001943.10235.80367.stgit@harusame> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
57d250df7d
commit
74ca4c0ece
1 changed files with 7 additions and 4 deletions
|
@ -151,7 +151,7 @@ static void parse_probe_point(char *arg, struct probe_point *pp)
|
||||||
/* Parse an event definition. Note that any error must die. */
|
/* Parse an event definition. Note that any error must die. */
|
||||||
static void parse_probe_event(const char *str)
|
static void parse_probe_event(const char *str)
|
||||||
{
|
{
|
||||||
char *argv[MAX_PROBE_ARGS + 2]; /* Event + probe + args */
|
char *argv[MAX_PROBE_ARGS + 1]; /* probe + args */
|
||||||
int argc, i;
|
int argc, i;
|
||||||
struct probe_point *pp = &session.probes[session.nr_probe];
|
struct probe_point *pp = &session.probes[session.nr_probe];
|
||||||
|
|
||||||
|
@ -169,6 +169,9 @@ static void parse_probe_event(const char *str)
|
||||||
/* Add an argument */
|
/* Add an argument */
|
||||||
if (*str != '\0') {
|
if (*str != '\0') {
|
||||||
const char *s = str;
|
const char *s = str;
|
||||||
|
/* Check the limit number of arguments */
|
||||||
|
if (argc == MAX_PROBE_ARGS + 1)
|
||||||
|
semantic_error("Too many arguments");
|
||||||
|
|
||||||
/* Skip the argument */
|
/* Skip the argument */
|
||||||
while (!isspace(*str) && *str != '\0')
|
while (!isspace(*str) && *str != '\0')
|
||||||
|
@ -178,9 +181,9 @@ static void parse_probe_event(const char *str)
|
||||||
argv[argc] = strndup(s, str - s);
|
argv[argc] = strndup(s, str - s);
|
||||||
if (argv[argc] == NULL)
|
if (argv[argc] == NULL)
|
||||||
die("strndup");
|
die("strndup");
|
||||||
if (++argc == MAX_PROBE_ARGS)
|
pr_debug("argv[%d]=%s\n", argc, argv[argc]);
|
||||||
semantic_error("Too many arguments");
|
argc++;
|
||||||
pr_debug("argv[%d]=%s\n", argc, argv[argc - 1]);
|
|
||||||
}
|
}
|
||||||
} while (*str != '\0');
|
} while (*str != '\0');
|
||||||
if (!argc)
|
if (!argc)
|
||||||
|
|
Loading…
Reference in a new issue