lkml.org 
[lkml]   [2016]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 5/8] perf header: Make topology checkers to check return value of strbuf
    Date
    Make topology checkers to check the return value of strbuf
    APIs so that it can detect errors in it.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    ---
    tools/perf/util/header.c | 31 ++++++++++++++++++++-----------
    1 file changed, 20 insertions(+), 11 deletions(-)

    diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
    index 90680ec..5ab74e4 100644
    --- a/tools/perf/util/header.c
    +++ b/tools/perf/util/header.c
    @@ -1819,7 +1819,8 @@ static int process_cpu_topology(struct perf_file_section *section,

    ph->env.nr_sibling_cores = nr;
    size += sizeof(u32);
    - strbuf_init(&sb, 128);
    + if (strbuf_init(&sb, 128) < 0)
    + goto free_cpu;

    for (i = 0; i < nr; i++) {
    str = do_read_string(fd, ph);
    @@ -1827,7 +1828,8 @@ static int process_cpu_topology(struct perf_file_section *section,
    goto error;

    /* include a NULL character at the end */
    - strbuf_add(&sb, str, strlen(str) + 1);
    + if (strbuf_add(&sb, str, strlen(str) + 1) < 0)
    + goto error;
    size += string_size(str);
    free(str);
    }
    @@ -1849,7 +1851,8 @@ static int process_cpu_topology(struct perf_file_section *section,
    goto error;

    /* include a NULL character at the end */
    - strbuf_add(&sb, str, strlen(str) + 1);
    + if (strbuf_add(&sb, str, strlen(str) + 1) < 0)
    + goto error;
    size += string_size(str);
    free(str);
    }
    @@ -1907,7 +1910,7 @@ static int process_numa_topology(struct perf_file_section *section __maybe_unuse
    u32 nr, node, i;
    char *str;
    uint64_t mem_total, mem_free;
    - struct strbuf sb;
    + struct strbuf sb = STRBUF_INIT;

    /* nr nodes */
    ret = readn(fd, &nr, sizeof(nr));
    @@ -1918,7 +1921,8 @@ static int process_numa_topology(struct perf_file_section *section __maybe_unuse
    nr = bswap_32(nr);

    ph->env.nr_numa_nodes = nr;
    - strbuf_init(&sb, 256);
    + if (strbuf_init(&sb, 256) < 0)
    + goto error;

    for (i = 0; i < nr; i++) {
    /* node number */
    @@ -1940,15 +1944,17 @@ static int process_numa_topology(struct perf_file_section *section __maybe_unuse
    mem_free = bswap_64(mem_free);
    }

    - strbuf_addf(&sb, "%u:%"PRIu64":%"PRIu64":",
    - node, mem_total, mem_free);
    + if (strbuf_addf(&sb, "%u:%"PRIu64":%"PRIu64":",
    + node, mem_total, mem_free) < 0)
    + goto error;

    str = do_read_string(fd, ph);
    if (!str)
    goto error;

    /* include a NULL character at the end */
    - strbuf_add(&sb, str, strlen(str) + 1);
    + if (strbuf_add(&sb, str, strlen(str) + 1) < 0)
    + goto error;
    free(str);
    }
    ph->env.numa_nodes = strbuf_detach(&sb, NULL);
    @@ -1982,7 +1988,8 @@ static int process_pmu_mappings(struct perf_file_section *section __maybe_unused
    }

    ph->env.nr_pmu_mappings = pmu_num;
    - strbuf_init(&sb, 128);
    + if (strbuf_init(&sb, 128) < 0)
    + return -1;

    while (pmu_num) {
    if (readn(fd, &type, sizeof(type)) != sizeof(type))
    @@ -1994,9 +2001,11 @@ static int process_pmu_mappings(struct perf_file_section *section __maybe_unused
    if (!name)
    goto error;

    - strbuf_addf(&sb, "%u:%s", type, name);
    + if (strbuf_addf(&sb, "%u:%s", type, name) < 0)
    + goto error;
    /* include a NULL character at the end */
    - strbuf_add(&sb, "", 1);
    + if (strbuf_add(&sb, "", 1) < 0)
    + goto error;

    if (!strcmp(name, "msr"))
    ph->env.msr_pmu_type = type;
    \
     
     \ /
      Last update: 2016-04-29 17:01    [W:2.369 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site