lkml.org 
[lkml]   [2009]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -tip 4/9] perf probe: Fix argv array size in probe parser
    Date
    Since the syntax had been changed, probe definition needs parameters
    less than MAX_PROBE_ARGS + 1 (probe-point + arguments).

    Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    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>
    ---

    tools/perf/builtin-probe.c | 11 +++++++----
    1 files changed, 7 insertions(+), 4 deletions(-)

    diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
    index 4e418af..510fdd4 100644
    --- a/tools/perf/builtin-probe.c
    +++ b/tools/perf/builtin-probe.c
    @@ -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. */
    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;
    struct probe_point *pp = &session.probes[session.nr_probe];

    @@ -169,6 +169,9 @@ static void parse_probe_event(const char *str)
    /* Add an argument */
    if (*str != '\0') {
    const char *s = str;
    + /* Check the limit number of arguments */
    + if (argc == MAX_PROBE_ARGS + 1)
    + semantic_error("Too many arguments");

    /* Skip the argument */
    while (!isspace(*str) && *str != '\0')
    @@ -178,9 +181,9 @@ static void parse_probe_event(const char *str)
    argv[argc] = strndup(s, str - s);
    if (argv[argc] == NULL)
    die("strndup");
    - if (++argc == MAX_PROBE_ARGS)
    - semantic_error("Too many arguments");
    - pr_debug("argv[%d]=%s\n", argc, argv[argc - 1]);
    + pr_debug("argv[%d]=%s\n", argc, argv[argc]);
    + argc++;
    +
    }
    } while (*str != '\0');
    if (!argc)

    --
    Masami Hiramatsu

    Software Engineer
    Hitachi Computer Products (America), Inc.
    Software Solutions Division

    e-mail: mhiramat@redhat.com


    \
     
     \ /
      Last update: 2009-12-01 01:27    [W:0.025 / U:30.308 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site