From fb9aafc06efbf20aea4cf656b5db8cb5b11fdfcc Mon Sep 17 00:00:00 2001
|
From: Arnaldo Carvalho de Melo <acme@redhat.com>
|
Date: Mon, 2 Mar 2020 11:55:47 -0300
|
Subject: [PATCH 4/7] perf parse-events: Use asprintf() instead of strncpy() to
|
read tracepoint files
|
MIME-Version: 1.0
|
Content-Type: text/plain; charset=UTF-8
|
Content-Transfer-Encoding: 8bit
|
|
Make the code more compact by using asprintf() instead of malloc()+strncpy() which also uses
|
less memory and avoids these warnings with gcc 10:
|
|
CC /tmp/build/perf/util/cloexec.o
|
In file included from /usr/include/string.h:495,
|
from util/parse-events.h:12,
|
from util/parse-events.c:18:
|
In function ‘strncpy’,
|
inlined from ‘tracepoint_id_to_path’ at util/parse-events.c:271:5:
|
/usr/include/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ offset [275, 511] from the object at ‘sys_dirent’ is out of the bounds of referenced subobject ‘d_name’ with type ‘char[256]’ at offset 19 [-Werror=array-bounds]
|
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
In file included from /usr/include/dirent.h:61,
|
from util/parse-events.c:5:
|
util/parse-events.c: In function ‘tracepoint_id_to_path’:
|
/usr/include/bits/dirent.h:33:10: note: subobject ‘d_name’ declared here
|
33 | char d_name[256]; /* We must not include limits.h! */
|
| ^~~~~~
|
In file included from /usr/include/string.h:495,
|
from util/parse-events.h:12,
|
from util/parse-events.c:18:
|
In function ‘strncpy’,
|
inlined from ‘tracepoint_id_to_path’ at util/parse-events.c:273:5:
|
/usr/include/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ offset [275, 511] from the object at ‘evt_dirent’ is out of the bounds of referenced subobject ‘d_name’ with type ‘char[256]’ at offset 19 [-Werror=array-bounds]
|
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
In file included from /usr/include/dirent.h:61,
|
from util/parse-events.c:5:
|
util/parse-events.c: In function ‘tracepoint_id_to_path’:
|
/usr/include/bits/dirent.h:33:10: note: subobject ‘d_name’ declared here
|
33 | char d_name[256]; /* We must not include limits.h! */
|
| ^~~~~~
|
CC /tmp/build/perf/util/call-path.o
|
|
Cc: Adrian Hunter <adrian.hunter@intel.com>
|
Cc: Jiri Olsa <jolsa@kernel.org>
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
Link: http://lore.kernel.org/lkml/20200302145535.GA28183@kernel.org
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
(cherry picked from commit 7125f204501ed55493593209c6c71ac7c38f6b6c)
|
|
Conflicts:
|
tools/perf/util/parse-events.c
|
|
Change-Id: I37d5f3d9dfac3a1bf3c8be9dfab24a875da4944a
|
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
---
|
tools/perf/util/parse-events.c | 12 ++++--------
|
1 file changed, 4 insertions(+), 8 deletions(-)
|
|
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
|
index 4a7e0132294f..251b0139e0c8 100644
|
--- a/tools/perf/util/parse-events.c
|
+++ b/tools/perf/util/parse-events.c
|
@@ -209,21 +209,17 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
|
closedir(evt_dir);
|
closedir(sys_dir);
|
path = zalloc(sizeof(*path));
|
- path->system = malloc(MAX_EVENT_LENGTH);
|
- if (!path->system) {
|
+ if (!path)
|
+ return NULL;
|
+ if (asprintf(&path->system, "%.*s", MAX_EVENT_LENGTH, sys_dirent->d_name) < 0) {
|
free(path);
|
return NULL;
|
}
|
- path->name = malloc(MAX_EVENT_LENGTH);
|
- if (!path->name) {
|
+ if (asprintf(&path->name, "%.*s", MAX_EVENT_LENGTH, evt_dirent->d_name) < 0) {
|
zfree(&path->system);
|
free(path);
|
return NULL;
|
}
|
- strncpy(path->system, sys_dirent->d_name,
|
- MAX_EVENT_LENGTH);
|
- strncpy(path->name, evt_dirent->d_name,
|
- MAX_EVENT_LENGTH);
|
return path;
|
}
|
}
|
--
|
2.20.1
|