lkml.org 
[lkml]   [2012]   [May]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 2/5] perf tools: fix piped mode read code
    On 5/15/12 5:28 AM, Stephane Eranian wrote:
    > In __perf_session__process_pipe_events(), there was a risk
    > we would read more than what a union perf_event struct can
    > hold. this could happen in case, perf is reading a file which
    > contains new record types it does not know about and which are
    > larger than anything it knows about.
    >
    > In general, perf is supposed to skip records it does not
    > understand, but in pipe mode, those have to be read and ignored.
    > The fixed size header contains the size of the record, but that
    > size may be larger than union perf_event, yet it was used as
    > the backing to the read in:
    >
    > union perf_event event;
    > void *p;
    >
    > size = event->header.size;
    >
    > p =&event;
    > p += sizeof(struct perf_event_header);
    > if (size - sizeof(struct perf_event_header)) {
    > err = readn(self->fd, p, size - sizeof(struct perf_event_header));
    >
    > We fix this by allocating a buffer based on the size reported in
    > the header. We reuse the buffer as much as we can. We realloc in
    > case it becomes too small. In the common case, the performance
    > impact is negligible.
    >
    > Signed-off-by: Stephane Eranian<eranian@google.com>
    > ---
    > tools/perf/util/session.c | 34 ++++++++++++++++++++++++++--------
    > 1 files changed, 26 insertions(+), 8 deletions(-)
    >

    I don't have a file/perf with different sized events, but the change
    makes sense.

    Reviewed-and-tested-by: David Ahern <dsahern@gmail.com>



    \
     
     \ /
      Last update: 2012-05-16 05:01    [W:0.028 / U:0.512 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site