Commit-ID: 62db90681c0db8c76e5db006b929a2edd5d12ae6 Gitweb: http://git.kernel.org/tip/62db90681c0db8c76e5db006b929a2edd5d12ae6 Author: Stephane Eranian <eranian@xxxxxxxxxx> AuthorDate: Thu, 9 Feb 2012 23:21:07 +0100 Committer: Ingo Molnar <mingo@xxxxxxx> CommitDate: Fri, 9 Mar 2012 08:26:06 +0100 perf tools: Fix ABI compatibility bug in print_event_desc() This patches cleans up local variable types for msz and ret. They need to be size_t and ssize_t respectively. It also fixes a bug whereby perf would not read attr struct with a different size than what it knows about. Signed-off-by: Stephane Eranian <eranian@xxxxxxxxxx> Cc: peterz@xxxxxxxxxxxxx Cc: acme@xxxxxxxxxx Cc: robert.richter@xxxxxxx Cc: ming.m.lin@xxxxxxxxx Cc: andi@xxxxxxxxxxxxxx Cc: asharma@xxxxxx Cc: ravitillo@xxxxxxx Cc: vweaver1@xxxxxxxxxxxx Cc: khandual@xxxxxxxxxxxxxxxxxx Cc: dsahern@xxxxxxxxx Link: http://lkml.kernel.org/r/1328826068-11713-18-git-send-email-eranian@xxxxxxxxxx Signed-off-by: Ingo Molnar <mingo@xxxxxxx> --- tools/perf/util/header.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 666f189..6d58026 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -1144,8 +1144,9 @@ static void print_event_desc(struct perf_header *ph, int fd, FILE *fp) uint64_t id; void *buf = NULL; char *str; - u32 nre, sz, nr, i, j, msz; - int ret; + u32 nre, sz, nr, i, j; + ssize_t ret; + size_t msz; /* number of events */ ret = read(fd, &nre, sizeof(nre)); @@ -1162,25 +1163,23 @@ static void print_event_desc(struct perf_header *ph, int fd, FILE *fp) if (ph->needs_swap) sz = bswap_32(sz); - /* - * ensure it is at least to our ABI rev - */ - if (sz < (u32)sizeof(attr)) - goto error; - memset(&attr, 0, sizeof(attr)); - /* read entire region to sync up to next field */ + /* buffer to hold on file attr struct */ buf = malloc(sz); if (!buf) goto error; msz = sizeof(attr); - if (sz < msz) + if (sz < (ssize_t)msz) msz = sz; for (i = 0 ; i < nre; i++) { + /* + * must read entire on-file attr struct to + * sync up with layout. + */ ret = read(fd, buf, sz); if (ret != (ssize_t)sz) goto error; -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html