lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <3f3b67de-4807-f87a-3861-db4a0f908add@intel.com>
Date:   Wed, 7 Mar 2018 10:06:50 +0200
From:   Adrian Hunter <adrian.hunter@...el.com>
To:     Arnaldo Carvalho de Melo <acme@...nel.org>
Cc:     Jiri Olsa <jolsa@...hat.com>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer()
 allocate struct buffer

On 06/03/18 22:25, Arnaldo Carvalho de Melo wrote:
> Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
>> In preparation for supporting AUX area sampling buffers,
>> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
>> memory allocation for struct buffer into it.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@...el.com>
>> ---
>>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
>>  1 file changed, 24 insertions(+), 30 deletions(-)
>>
>> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
>> index fb357a00dd86..e1aff91c54a8 100644
>> --- a/tools/perf/util/auxtrace.c
>> +++ b/tools/perf/util/auxtrace.c
>> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>>  				       struct auxtrace_buffer *buffer,
>>  				       struct auxtrace_buffer **buffer_ptr)
>>  {
>> -	int err;
>> +	int err = -ENOMEM;
>> +
>> +	buffer = memdup(buffer, sizeof(*buffer));
> 
> this is a bit strange, why not make buffer a local variable in this
> function then?

Do you mean the following?

	struct auxtrace_buffer *new_buf;

	new_buf = memdup(buffer, sizeof(*buffer));

> 
>> +	if (!buffer)
>> +		return -ENOMEM;
>>  
>>  	if (session->one_mmap) {
>>  		buffer->data = buffer->data_offset - session->one_mmap_offset +
>> @@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>>  	} else if (perf_data__is_pipe(session->data)) {
>>  		buffer->data = auxtrace_copy_data(buffer->size, session);
>>  		if (!buffer->data)
>> -			return -ENOMEM;
>> +			goto out_free;
>>  		buffer->data_needs_freeing = true;
>>  	} else if (BITS_PER_LONG == 32 &&
>>  		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
>>  		err = auxtrace_queues__split_buffer(queues, idx, buffer);
>>  		if (err)
>> -			return err;
>> +			goto out_free;
>>  	}
>>  
>>  	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
>>  	if (err)
>> -		return err;
>> +		goto out_free;
>>  
>>  	/* FIXME: Doesn't work for split buffer */
>>  	if (buffer_ptr)
>>  		*buffer_ptr = buffer;
>>  
>>  	return 0;
>> +
>> +out_free:
>> +	auxtrace_buffer__free(buffer);
>> +	return err;
>>  }
>>  
>>  static bool filter_cpu(struct perf_session *session, int cpu)
>> @@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
>>  			       union perf_event *event, off_t data_offset,
>>  			       struct auxtrace_buffer **buffer_ptr)
>>  {
>> -	struct auxtrace_buffer *buffer;
>> -	unsigned int idx;
>> -	int err;
>> +	struct auxtrace_buffer buffer = {
>> +		.pid = -1,
>> +		.tid = event->auxtrace.tid,
>> +		.cpu = event->auxtrace.cpu,
>> +		.data_offset = data_offset,
>> +		.offset = event->auxtrace.offset,
>> +		.reference = event->auxtrace.reference,
>> +		.size = event->auxtrace.size,
>> +	};
>> +	unsigned int idx = event->auxtrace.idx;
>>  
>>  	if (filter_cpu(session, event->auxtrace.cpu))
>>  		return 0;
>>  
>> -	buffer = zalloc(sizeof(struct auxtrace_buffer));
>> -	if (!buffer)
>> -		return -ENOMEM;
>> -
>> -	buffer->pid = -1;
>> -	buffer->tid = event->auxtrace.tid;
>> -	buffer->cpu = event->auxtrace.cpu;
>> -	buffer->data_offset = data_offset;
>> -	buffer->offset = event->auxtrace.offset;
>> -	buffer->reference = event->auxtrace.reference;
>> -	buffer->size = event->auxtrace.size;
>> -	idx = event->auxtrace.idx;
>> -
>> -	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
>> -					  buffer_ptr);
>> -	if (err)
>> -		goto out_err;
>> -
>> -	return 0;
>> -
>> -out_err:
>> -	auxtrace_buffer__free(buffer);
>> -	return err;
>> +	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
>> +					   buffer_ptr);
>>  }
>>  
>>  static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
>> -- 
>> 1.9.1
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ