All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>, Andi Kleen <ak@linux.intel.com>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v1] perf session: fix decompression of PERF_RECORD_COMPRESSED records
Date: Fri, 15 Nov 2019 16:11:24 +0100	[thread overview]
Message-ID: <20191115151124.GA25246@krava> (raw)
In-Reply-To: <237222f1-9765-dce1-601c-60530a7fc844@linux.intel.com>

On Fri, Nov 15, 2019 at 12:05:14PM +0300, Alexey Budankov wrote:
> 
> Avoid termination of trace loading in case the last record in 
> the decompressed buffer partly resides in the following 
> mmaped PERF_RECORD_COMPRESSED record. In this case NULL value
> returned by fetch_mmaped_event() means to proceed to the next 
> mmaped record then decompress it and load compressed events. 
> 
> The issue can be reproduced like this:
> 
>   $ perf record -z -- some_long_running_workload
>   $ perf report --stdio -vv
>   decomp (B): 44519 to 163000
>   decomp (B): 48119 to 174800
>   decomp (B): 65527 to 131072
>   fetch_mmaped_event: head=0x1ffe0 event->header_size=0x28, mmap_size=0x20000: fuzzed perf.data?
>   Error:
>   failed to process sample
>   ...
> 
> Testing:
> 71: Zstd perf.data compression/decompression              : Ok
> 
> Fixes: 57fc032ad643 ("perf session: Avoid infinite loop when seeing invalid header.size")
> Link: https://marc.info/?l=linux-kernel&m=156580812427554&w=2
> Co-developed-by: Jiri Olsa <jolsa@kernel.org>
> Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
> ---
>  tools/perf/util/session.c | 47 +++++++++++++++++++++++++++++++++--------------
>  1 file changed, 33 insertions(+), 14 deletions(-)
> 
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index f07b8ecb91bc..3f6f812ec4ed 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -1957,9 +1957,31 @@ static int __perf_session__process_pipe_events(struct perf_session *session)
>  	return err;
>  }
>  
> +static union perf_event *
> +prefetch_event(char *buf, u64 head, size_t mmap_size,
> +	       bool needs_swap, union perf_event *ret);

why not move prefetch_event definition in here?
I don't see any need for the static declaration..

> +
>  static union perf_event *
>  fetch_mmaped_event(struct perf_session *session,
>  		   u64 head, size_t mmap_size, char *buf)
> +{
> +	return prefetch_event(buf, head, mmap_size,
> +			      session->header.needs_swap,
> +			      ERR_PTR(-EINVAL));
> +}
> +
> +static union perf_event *
> +fetch_decomp_event(struct perf_session *session,
> +		   u64 head, size_t mmap_size, char *buf)
> +{

if this is decomp specific, it could take 'struct decomp*' as argument

> +	return prefetch_event(buf, head, mmap_size,
> +			      session->header.needs_swap,
> +			      NULL);
> +}
> +
> +static union perf_event *
> +prefetch_event(char *buf, u64 head, size_t mmap_size,
> +	       bool needs_swap, union perf_event *ret)
>  {

'error' might be more suitable then ret in here

thanks,
jirka


  reply	other threads:[~2019-11-15 15:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-15  9:05 [PATCH v1] perf session: fix decompression of PERF_RECORD_COMPRESSED records Alexey Budankov
2019-11-15 15:11 ` Jiri Olsa [this message]
2019-11-15 17:09   ` Alexey Budankov
2019-11-18 10:46     ` Jiri Olsa

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=20191115151124.GA25246@krava \
    --to=jolsa@redhat.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.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.