| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Date: Thu, 6 Dec 2018 13:52:13 -0300 |
| Subject: perf parse-events: Fix unchecked usage of strncpy() |
| |
| commit bd8d57fb7e25e9fcf67a9eef5fa13aabe2016e07 upstream. |
| |
| The strncpy() function may leave the destination string buffer |
| unterminated, better use strlcpy() that we have a __weak fallback |
| implementation for systems without it. |
| |
| This fixes this warning on an Alpine Linux Edge system with gcc 8.2: |
| |
| util/parse-events.c: In function 'print_symbol_events': |
| util/parse-events.c:2465:4: error: 'strncpy' specified bound 100 equals destination size [-Werror=stringop-truncation] |
| strncpy(name, syms->symbol, MAX_NAME_LEN); |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| In function 'print_symbol_events.constprop', |
| inlined from 'print_events' at util/parse-events.c:2508:2: |
| util/parse-events.c:2465:4: error: 'strncpy' specified bound 100 equals destination size [-Werror=stringop-truncation] |
| strncpy(name, syms->symbol, MAX_NAME_LEN); |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| In function 'print_symbol_events.constprop', |
| inlined from 'print_events' at util/parse-events.c:2511:2: |
| util/parse-events.c:2465:4: error: 'strncpy' specified bound 100 equals destination size [-Werror=stringop-truncation] |
| strncpy(name, syms->symbol, MAX_NAME_LEN); |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| cc1: all warnings being treated as errors |
| |
| Cc: Adrian Hunter <adrian.hunter@intel.com> |
| Cc: Jiri Olsa <jolsa@kernel.org> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Fixes: 947b4ad1d198 ("perf list: Fix max event string size") |
| Link: https://lkml.kernel.org/n/tip-b663e33bm6x8hrkie4uxh7u2@git.kernel.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| tools/perf/util/parse-events.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/tools/perf/util/parse-events.c |
| +++ b/tools/perf/util/parse-events.c |
| @@ -1217,7 +1217,7 @@ static void print_symbol_events(const ch |
| if (strlen(syms->alias)) |
| snprintf(name, MAX_NAME_LEN, "%s OR %s", syms->symbol, syms->alias); |
| else |
| - strncpy(name, syms->symbol, MAX_NAME_LEN); |
| + strlcpy(name, syms->symbol, MAX_NAME_LEN); |
| |
| printf(" %-50s [%s]\n", name, event_type_descriptors[type]); |
| |