• A
    perf session: Fix perf_session__peek_event() · 554e92ed
    Adrian Hunter 提交于
    perf_session__peek_event() generally leverages there being a single mmap
    of the perf.data file, however on 32-bit platforms when there is more
    that 32MiB of data, then there are multiple mmaps, so
    perf_session__peek_event() reads from the file.
    
    In that case a couple of bugs were exposed (note how the seg. fault
    appears with >32M of data):
    
       $ perf record --per-thread -e intel_bts// ../rtit-tests/loopy 1000000
       [ perf record: Woken up 13 times to write data ]
       [ perf record: Captured and wrote 24.568 MB perf.data ]
       $ perf script > /dev/null
       $ perf record --per-thread -e intel_bts// ../rtit-tests/loopy 10000000
       [ perf record: Woken up 136 times to write data ]
       [ perf record: Captured and wrote 270.794 MB perf.data ]
       $ perf script > /dev/null
       Segmentation fault (core dumped)
    
    The wrong address was being passed to the readn() function and the
    buffer size was not being checked.
    Signed-off-by: NAdrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@gmail.com>
    Link: http://lkml.kernel.org/r/1432040746-1755-5-git-send-email-adrian.hunter@intel.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    554e92ed
session.c 51.6 KB