lkml.org 
[lkml]   [2020]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 037/222] perf: Correctly handle failed perf_get_aux_event()
    Date
    From: Mark Rutland <mark.rutland@arm.com>

    commit da9ec3d3dd0f1240a48920be063448a2242dbd90 upstream.

    Vince reports a worrying issue:

    | so I was tracking down some odd behavior in the perf_fuzzer which turns
    | out to be because perf_even_open() sometimes returns 0 (indicating a file
    | descriptor of 0) even though as far as I can tell stdin is still open.

    ... and further the cause:

    | error is triggered if aux_sample_size has non-zero value.
    |
    | seems to be this line in kernel/events/core.c:
    |
    | if (perf_need_aux_event(event) && !perf_get_aux_event(event, group_leader))
    | goto err_locked;
    |
    | (note, err is never set)

    This seems to be a thinko in commit:

    ab43762ef010967e ("perf: Allow normal events to output AUX data")

    ... and we should probably return -EINVAL here, as this should only
    happen when the new event is mis-configured or does not have a
    compatible aux_event group leader.

    Fixes: ab43762ef010967e ("perf: Allow normal events to output AUX data")
    Reported-by: Vince Weaver <vincent.weaver@maine.edu>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Tested-by: Vince Weaver <vincent.weaver@maine.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    kernel/events/core.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/kernel/events/core.c
    +++ b/kernel/events/core.c
    @@ -11182,8 +11182,10 @@ SYSCALL_DEFINE5(perf_event_open,
    }
    }

    - if (event->attr.aux_output && !perf_get_aux_event(event, group_leader))
    + if (event->attr.aux_output && !perf_get_aux_event(event, group_leader)) {
    + err = -EINVAL;
    goto err_locked;
    + }

    /*
    * Must be under the same ctx::mutex as perf_install_in_context(),

    \
     
     \ /
      Last update: 2022-09-17 16:07    [W:4.039 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site