lkml.org 
[lkml]   [2009]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RFC PATCH tracing/kprobes 4/5] perf: Support perf kprobe command for kprobe-event setup helper
    From
    Date
    On Fri, 2009-09-25 at 12:15 -0700, Masami Hiramatsu wrote:

    > +
    > +#define MAX_CMDLEN 256
    > +
    > +static int synthesize_probepoint(struct probe_point *pp)
    > +{
    > + char *buf;
    > + int i, len, ret;
    > + pp->probes[0] = buf = (char *)calloc(MAX_CMDLEN, sizeof(char));
    > + len = snprintf(buf, MAX_CMDLEN, "%s+%d", pp->function, pp->offset);

    What happens if func and offset is too big for MAX_CMDLEN?

    > + for (i = 0; i < pp->nr_args; i++) {

    Can you have a case where pp->nr_args == 0?

    > + ret = snprintf(&buf[len], MAX_CMDLEN - len, " %s",
    > + pp->args[i]);
    > + if (ret <= 0 || ret >= MAX_CMDLEN - len) {
    > + free(pp->probes[0]);
    > + return -E2BIG;
    > + }
    > + len += ret;
    > + }
    > + return pp->found = 1;
    > +}
    > +
    > +int cmd_kprobe(int argc, const char **argv, const char *prefix __used)
    > +{
    > + int i, j, fd, ret, need_dwarf = 0;
    > + struct probe_point *pp;
    > + char buf[MAX_CMDLEN];
    > +
    > + argc = parse_options(argc, argv, options, kprobe_usage,
    > + PARSE_OPT_STOP_AT_NON_OPTION);
    > + if (argc || session.nr_probe == 0)
    > + usage_with_options(kprobe_usage, options);
    > +
    > + /* Synthesize return probes */
    > + for (j = 0; j < session.nr_probe; j++) {
    > + if (session.events[j][0] != 'r') {
    > + need_dwarf = 1;
    > + continue;
    > + }
    > + ret = synthesize_probepoint(&session.probes[j]);
    > + if (ret < 0)
    > + semantic_error("probe point is too long.");

    If we have no args but the func and offset is too big, then this does
    not catch it. But this depends on if we can have no args.

    -- Steve

    > + }
    > +
    >



    \
     
     \ /
      Last update: 2009-09-26 10:57    [W:0.024 / U:0.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site