lkml.org 
[lkml]   [2011]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv3 1/2] perf tools: Fix raw sample reading
    Date
    Wrong pointer is being passed for raw data sanity checking,
    when parsing sample event.

    This ends up with invalid event and perf record being stuck in
    __perf_session__process_events function during processing
    build IDs (process_buildids function).

    Following command hangs up in my setup:
    ./perf record -e raw_syscalls:sys_enter ls

    The fix is to use proper pointer to the raw data instead
    of the 'u' union.

    CC: David Ahern <dsahern@gmail.com>
    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    ---
    tools/perf/util/evsel.c | 7 +++++--
    1 files changed, 5 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index c5748c5..e389815 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -449,6 +449,8 @@ int perf_event__parse_sample(const union perf_event *event, u64 type,
    }

    if (type & PERF_SAMPLE_RAW) {
    + const u64 *pdata;
    +
    u.val64 = *array;
    if (WARN_ONCE(swapped,
    "Endianness of raw data not corrected!\n")) {
    @@ -462,11 +464,12 @@ int perf_event__parse_sample(const union perf_event *event, u64 type,
    return -EFAULT;

    data->raw_size = u.val32[0];
    + pdata = (void *) array + sizeof(u32);

    - if (sample_overlap(event, &u.val32[1], data->raw_size))
    + if (sample_overlap(event, pdata, data->raw_size))
    return -EFAULT;

    - data->raw_data = &u.val32[1];
    + data->raw_data = (void *) pdata;
    }

    return 0;
    --
    1.7.4


    \
     
     \ /
      Last update: 2011-09-29 17:07    [W:0.021 / U:0.760 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site