* [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints
@ 2020-03-02 14:55 Arnaldo Carvalho de Melo
2020-03-02 15:27 ` Jiri Olsa
2020-03-04 11:01 ` [tip: perf/urgent] perf parse-events: Use asprintf() instead of strncpy() to read tracepoint files tip-bot2 for Arnaldo Carvalho de Melo
0 siblings, 2 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-03-02 14:55 UTC (permalink / raw)
To: Jiri Olsa; +Cc: Namhyung Kim, Linux Kernel Mailing List
Hi,
Noticed this with gcc 10 on fedora rawhide:
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
So I replaced it with asprintf to make the code shorter, use a bit less
memory and deal with the above problem, ok?
- Arnaldo
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index c01ba6f8fdad..a14995835d85 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
path = zalloc(sizeof(*path));
if (!path)
return NULL;
- path->system = malloc(MAX_EVENT_LENGTH);
- if (!path->system) {
+ 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;
}
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints
2020-03-02 14:55 [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints Arnaldo Carvalho de Melo
@ 2020-03-02 15:27 ` Jiri Olsa
2020-03-02 18:27 ` Arnaldo Carvalho de Melo
2020-03-04 11:01 ` [tip: perf/urgent] perf parse-events: Use asprintf() instead of strncpy() to read tracepoint files tip-bot2 for Arnaldo Carvalho de Melo
1 sibling, 1 reply; 4+ messages in thread
From: Jiri Olsa @ 2020-03-02 15:27 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List
On Mon, Mar 02, 2020 at 11:55:35AM -0300, Arnaldo Carvalho de Melo wrote:
SNIP
> | ^~~~~~
> CC /tmp/build/perf/util/call-path.o
>
> So I replaced it with asprintf to make the code shorter, use a bit less
> memory and deal with the above problem, ok?
>
> - Arnaldo
>
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index c01ba6f8fdad..a14995835d85 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
> path = zalloc(sizeof(*path));
> if (!path)
> return NULL;
> - path->system = malloc(MAX_EVENT_LENGTH);
> - if (!path->system) {
> + 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);
looks good to me, and we can probably remove MAX_EVENT_LENGTH as well?
jirka
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints
2020-03-02 15:27 ` Jiri Olsa
@ 2020-03-02 18:27 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-03-02 18:27 UTC (permalink / raw)
To: Jiri Olsa; +Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List
Em Mon, Mar 02, 2020 at 04:27:41PM +0100, Jiri Olsa escreveu:
> On Mon, Mar 02, 2020 at 11:55:35AM -0300, Arnaldo Carvalho de Melo wrote:
>
> SNIP
>
> > | ^~~~~~
> > CC /tmp/build/perf/util/call-path.o
> >
> > So I replaced it with asprintf to make the code shorter, use a bit less
> > memory and deal with the above problem, ok?
> >
> > - Arnaldo
> >
> > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > index c01ba6f8fdad..a14995835d85 100644
> > --- a/tools/perf/util/parse-events.c
> > +++ b/tools/perf/util/parse-events.c
> > @@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
> > path = zalloc(sizeof(*path));
> > if (!path)
> > return NULL;
> > - path->system = malloc(MAX_EVENT_LENGTH);
> > - if (!path->system) {
> > + 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);
>
> looks good to me, and we can probably remove MAX_EVENT_LENGTH as well?
I left it there, we can remove it if the need arises, this code is not
that exercised from what I could look.
- Arnaldo
^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip: perf/urgent] perf parse-events: Use asprintf() instead of strncpy() to read tracepoint files
2020-03-02 14:55 [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints Arnaldo Carvalho de Melo
2020-03-02 15:27 ` Jiri Olsa
@ 2020-03-04 11:01 ` tip-bot2 for Arnaldo Carvalho de Melo
1 sibling, 0 replies; 4+ messages in thread
From: tip-bot2 for Arnaldo Carvalho de Melo @ 2020-03-04 11:01 UTC (permalink / raw)
To: linux-tip-commits
Cc: Adrian Hunter, Jiri Olsa, Namhyung Kim, Arnaldo Carvalho de Melo,
x86, LKML
The following commit has been merged into the perf/urgent branch of tip:
Commit-ID: 7125f204501ed55493593209c6c71ac7c38f6b6c
Gitweb: https://git.kernel.org/tip/7125f204501ed55493593209c6c71ac7c38f6b6c
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
AuthorDate: Mon, 02 Mar 2020 11:55:47 -03:00
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitterDate: Mon, 02 Mar 2020 11:55:47 -03:00
perf parse-events: Use asprintf() instead of strncpy() to read tracepoint files
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>
---
tools/perf/util/parse-events.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index c01ba6f..a149958 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
path = zalloc(sizeof(*path));
if (!path)
return NULL;
- path->system = malloc(MAX_EVENT_LENGTH);
- if (!path->system) {
+ 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;
}
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-03-04 11:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-02 14:55 [PATCH] perf parse-events: Use asprintf() instead of strncpy() for tracepoints Arnaldo Carvalho de Melo
2020-03-02 15:27 ` Jiri Olsa
2020-03-02 18:27 ` Arnaldo Carvalho de Melo
2020-03-04 11:01 ` [tip: perf/urgent] perf parse-events: Use asprintf() instead of strncpy() to read tracepoint files tip-bot2 for Arnaldo Carvalho de Melo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.