Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62db9068 authored by Stephane Eranian's avatar Stephane Eranian Committed by Ingo Molnar
Browse files

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: default avatarStephane Eranian <eranian@google.com>
Cc: peterz@infradead.org
Cc: acme@redhat.com
Cc: robert.richter@amd.com
Cc: ming.m.lin@intel.com
Cc: andi@firstfloor.org
Cc: asharma@fb.com
Cc: ravitillo@lbl.gov
Cc: vweaver1@eecs.utk.edu
Cc: khandual@linux.vnet.ibm.com
Cc: dsahern@gmail.com
Link: http://lkml.kernel.org/r/1328826068-11713-18-git-send-email-eranian@google.com


Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 69996df4
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -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;