lkml.org 
[lkml]   [2017]   [Feb]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 31/32] perf tests: Avoid possible truncation with dirent->d_name + snprintf
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    Addressing a few cases spotted by a new warning in gcc 7:

    tests/parse-events.c: In function 'test_pmu_events':
    tests/parse-events.c:1790:39: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 90 [-Werror=format-truncation=]
    snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name);
    ^~
    In file included from /usr/include/stdio.h:939:0,
    from /git/linux/tools/perf/util/map.h:9,
    from /git/linux/tools/perf/util/symbol.h:7,
    from /git/linux/tools/perf/util/evsel.h:10,
    from tests/parse-events.c:3:
    /usr/include/bits/stdio2.h:64:10: note: '__builtin___snprintf_chk' output between 13 and 268 bytes into a destination of size 100
    return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    __bos (__s), __fmt, __va_arg_pack ());
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    tests/parse-events.c:1798:29: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 100 [-Werror=format-truncation=]
    snprintf(name, MAX_NAME, "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Fixes: 945aea220bb8 ("perf tests: Move test objects into 'tests' directory")
    Link: http://lkml.kernel.org/n/tip-ty4q2p8zp1dp3mskvubxskm5@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/tests/parse-events.c | 8 +++-----
    1 file changed, 3 insertions(+), 5 deletions(-)

    diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
    index 20c2e641c422..aa9276bfe3e9 100644
    --- a/tools/perf/tests/parse-events.c
    +++ b/tools/perf/tests/parse-events.c
    @@ -1779,15 +1779,14 @@ static int test_pmu_events(void)
    }

    while (!ret && (ent = readdir(dir))) {
    -#define MAX_NAME 100
    struct evlist_test e;
    - char name[MAX_NAME];
    + char name[2 * NAME_MAX + 1 + 12 + 3];

    /* Names containing . are special and cannot be used directly */
    if (strchr(ent->d_name, '.'))
    continue;

    - snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name);
    + snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);

    e.name = name;
    e.check = test__checkevent_pmu_events;
    @@ -1795,11 +1794,10 @@ static int test_pmu_events(void)
    ret = test_event(&e);
    if (ret)
    break;
    - snprintf(name, MAX_NAME, "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
    + snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
    e.name = name;
    e.check = test__checkevent_pmu_events_mix;
    ret = test_event(&e);
    -#undef MAX_NAME
    }

    closedir(dir);
    --
    2.9.3
    \
     
     \ /
      Last update: 2017-02-10 02:42    [W:4.039 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site