[tip:perf/hw-branch-sampling] perf tools: Fix ABI compatibility bug in print_event_desc()
From: tip-bot for Stephane Eranian
Date: Fri Mar 09 2012 - 08:32:02 EST
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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/