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@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: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
					parent
					
						
							
								69996df486
							
						
					
				
			
			
				commit
				
					
						62db90681c
					
				
			
		
					 1 changed files with 9 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue