All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	linux-kernel@vger.kernel.org, David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Mike Galbraith <efault@gmx.de>, Namhyung Kim <namhyung@gmail.com>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Stephane Eranian <eranian@google.com>,
	Ingo Molnar <mingo@kernel.org>
Subject: Re: [PATCH V6 06/12] perf tools: remove unnecessary callchain validation
Date: Wed, 17 Jul 2013 11:02:04 +0300	[thread overview]
Message-ID: <51E64F7C.4040307@intel.com> (raw)
In-Reply-To: <20130716120549.GB9964@krava.brq.redhat.com>

On 16/07/13 15:05, Jiri Olsa wrote:
> On Tue, Jul 16, 2013 at 09:38:12AM +0300, Adrian Hunter wrote:
> 
> SNIP
> 
>>  	}
>>  }
>>  
>> -static int perf_session__preprocess_sample(struct perf_session *session,
>> -					   union perf_event *event, struct perf_sample *sample)
>> -{
>> -	if (event->header.type != PERF_RECORD_SAMPLE ||
>> -	    !sample->callchain)
>> -		return 0;
>> -
>> -	if (!ip_callchain__valid(sample->callchain, event)) {
>> -		pr_debug("call-chain problem with event, skipping it.\n");
>> -		++session->stats.nr_invalid_chains;
>> -		session->stats.total_invalid_chains += sample->period;
> 
> How about the '*invalid_chains' stats here? I dont see
> it incremented in the parsing routine.
> 
> Also the current behaviour is to increments stats for invalid
> callchains, but dont fail. With your changes we fail during the
> parsing.

It would fail during parsing sometimes anyway.  The code was:

	if (type & PERF_SAMPLE_CALLCHAIN) {
		if (sample_overlap(event, array, sizeof(data->callchain->nr)))
			return -EFAULT;

		data->callchain = (struct ip_callchain *)array;

		if (sample_overlap(event, array, data->callchain->nr))
			return -EFAULT;

		array += 1 + data->callchain->nr;
	}

But sample overlap did not handle size being effectively negative
i.e. 'offset + size' overflows

static bool sample_overlap(const union perf_event *event,
			   const void *offset, u64 size)
{
	const void *base = event;

	if (offset + size > base + event->header.size)
		return true;

	return false;
}


> 
> On the other hand.. maybe we should fail ;-) I think that
> invalid callchain data is serious enough to be overlooked
> by not seeing the nr_invalid_chains got incremented.
> 
> let's see other comments and then silently push it :-)
> 
> jirka
> 
> 


  reply	other threads:[~2013-07-17  7:55 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-16  6:38 [PATCH V6 00/12] perf tools: some fixes and tweaks Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 01/12] perf tools: add debug prints Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 02/12] perf tools: allow non-matching sample types Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 03/12] perf tools: add pid to struct thread Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 04/12] perf tools: change machine__findnew_thread() to set thread pid Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 05/12] perf tools: tidy up sample parsing overflow checking Adrian Hunter
2013-07-16 11:53   ` Jiri Olsa
2013-07-17  6:33     ` Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 06/12] perf tools: remove unnecessary callchain validation Adrian Hunter
2013-07-16 12:05   ` Jiri Olsa
2013-07-17  8:02     ` Adrian Hunter [this message]
2013-07-16  6:38 ` [PATCH V6 07/12] perf tools: remove references to struct ip_event Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 08/12] perf tools: move " Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 09/12] perf: make events stream always parsable Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 10/12] perf tools: add support for PERF_SAMPLE_IDENTFIER Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 11/12] perf tools: expand perf_event__synthesize_sample() Adrian Hunter
2013-07-16  6:38 ` [PATCH V6 12/12] perf tools: add a sample parsing test Adrian Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51E64F7C.4040307@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@ghostprotocols.net \
    --cc=dsahern@gmail.com \
    --cc=efault@gmx.de \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@gmail.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.