]>
Commit | Line | Data |
---|---|---|
64c3403a GKH |
1 | From bdf23a9a190d7ecea092fd5c4aabb7d4bd0a9980 Mon Sep 17 00:00:00 2001 |
2 | From: Arnaldo Carvalho de Melo <acme@redhat.com> | |
3 | Date: Wed, 8 Feb 2017 17:01:46 -0300 | |
4 | Subject: perf thread_map: Correctly size buffer used with dirent->dt_name | |
5 | ||
6 | From: Arnaldo Carvalho de Melo <acme@redhat.com> | |
7 | ||
8 | commit bdf23a9a190d7ecea092fd5c4aabb7d4bd0a9980 upstream. | |
9 | ||
10 | The size of dirent->dt_name is NAME_MAX + 1, but the size for the 'path' | |
11 | buffer is hard coded at 256, which may truncate it because we also | |
12 | prepend "/proc/", so that all that into account and thank gcc 7 for this | |
13 | warning: | |
14 | ||
15 | /git/linux/tools/perf/util/thread_map.c: In function 'thread_map__new_by_uid': | |
16 | /git/linux/tools/perf/util/thread_map.c:119:39: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 250 [-Werror=format-truncation=] | |
17 | snprintf(path, sizeof(path), "/proc/%s", dirent->d_name); | |
18 | ^~ | |
19 | In file included from /usr/include/stdio.h:939:0, | |
20 | from /git/linux/tools/perf/util/thread_map.c:5: | |
21 | /usr/include/bits/stdio2.h:64:10: note: '__builtin___snprintf_chk' output between 7 and 262 bytes into a destination of size 256 | |
22 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, | |
23 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
24 | __bos (__s), __fmt, __va_arg_pack ()); | |
25 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
26 | ||
27 | Cc: Adrian Hunter <adrian.hunter@intel.com> | |
28 | Cc: David Ahern <dsahern@gmail.com> | |
29 | Cc: Jiri Olsa <jolsa@kernel.org> | |
30 | Cc: Namhyung Kim <namhyung@kernel.org> | |
31 | Cc: Wang Nan <wangnan0@huawei.com> | |
32 | Link: http://lkml.kernel.org/n/tip-csy0r8zrvz5efccgd4k12c82@git.kernel.org | |
33 | Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> | |
34 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
35 | ||
36 | --- | |
37 | tools/perf/util/thread_map.c | 2 +- | |
38 | 1 file changed, 1 insertion(+), 1 deletion(-) | |
39 | ||
40 | --- a/tools/perf/util/thread_map.c | |
41 | +++ b/tools/perf/util/thread_map.c | |
42 | @@ -92,7 +92,7 @@ struct thread_map *thread_map__new_by_ui | |
43 | { | |
44 | DIR *proc; | |
45 | int max_threads = 32, items, i; | |
46 | - char path[256]; | |
47 | + char path[NAME_MAX + 1 + 6]; | |
48 | struct dirent dirent, *next, **namelist = NULL; | |
49 | struct thread_map *threads = thread_map__alloc(max_threads); | |
50 |