diff options
author | OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> | 2009-12-06 06:10:49 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-06 12:15:02 -0500 |
commit | 7691b1ec2e4a8d4bd88dcf88b29792399ebe1c91 (patch) | |
tree | 3b232372d2bd2a3aae58ccb37b36155d9917ab73 /tools/perf/util/header.c | |
parent | 180f95e29aa8782c019caa64ede2a28d8ab62564 (diff) |
perf tools: Misc small fixes
- util/header.c
"len" is aligned to 64. So, it tries to write the out of
long_name buffer.
So, this use "zero_buf" to write aligned area.
- util/trace-event-read.c
"size" is not including nul byte. So, this allocates it, and set '\0'.
- util/trace-event-parse.c
It needs parens to calc correct size.
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <87d42s8iiu.fsf_-_@devron.myhome.or.jp>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r-- | tools/perf/util/header.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 4805e6dfd23c..08b6759287f5 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -187,7 +187,9 @@ static int do_write(int fd, const void *buf, size_t size) | |||
187 | 187 | ||
188 | static int __dsos__write_buildid_table(struct list_head *head, int fd) | 188 | static int __dsos__write_buildid_table(struct list_head *head, int fd) |
189 | { | 189 | { |
190 | #define NAME_ALIGN 64 | ||
190 | struct dso *pos; | 191 | struct dso *pos; |
192 | static const char zero_buf[NAME_ALIGN]; | ||
191 | 193 | ||
192 | list_for_each_entry(pos, head, node) { | 194 | list_for_each_entry(pos, head, node) { |
193 | int err; | 195 | int err; |
@@ -197,14 +199,17 @@ static int __dsos__write_buildid_table(struct list_head *head, int fd) | |||
197 | if (!pos->has_build_id) | 199 | if (!pos->has_build_id) |
198 | continue; | 200 | continue; |
199 | len = pos->long_name_len + 1; | 201 | len = pos->long_name_len + 1; |
200 | len = ALIGN(len, 64); | 202 | len = ALIGN(len, NAME_ALIGN); |
201 | memset(&b, 0, sizeof(b)); | 203 | memset(&b, 0, sizeof(b)); |
202 | memcpy(&b.build_id, pos->build_id, sizeof(pos->build_id)); | 204 | memcpy(&b.build_id, pos->build_id, sizeof(pos->build_id)); |
203 | b.header.size = sizeof(b) + len; | 205 | b.header.size = sizeof(b) + len; |
204 | err = do_write(fd, &b, sizeof(b)); | 206 | err = do_write(fd, &b, sizeof(b)); |
205 | if (err < 0) | 207 | if (err < 0) |
206 | return err; | 208 | return err; |
207 | err = do_write(fd, pos->long_name, len); | 209 | err = do_write(fd, pos->long_name, pos->long_name_len + 1); |
210 | if (err < 0) | ||
211 | return err; | ||
212 | err = do_write(fd, zero_buf, len - pos->long_name_len + 1); | ||
208 | if (err < 0) | 213 | if (err < 0) |
209 | return err; | 214 | return err; |
210 | } | 215 | } |