lkml.org 
[lkml]   [2022]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 106/124] arm_pmu: Validate single/group leader events
    Date
    From: Rob Herring <robh@kernel.org>

    commit e5c23779f93d45e39a52758ca593bd7e62e9b4be upstream.

    In the case where there is only a cycle counter available (i.e.
    PMCR_EL0.N is 0) and an event other than CPU cycles is opened, the open
    should fail as the event can never possibly be scheduled. However, the
    event validation when an event is opened is skipped when the group
    leader is opened. Fix this by always validating the group leader events.

    Reported-by: Al Grant <al.grant@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Rob Herring <robh@kernel.org>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20220408203330.4014015-1-robh@kernel.org
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/perf/arm_pmu.c | 10 ++++------
    1 file changed, 4 insertions(+), 6 deletions(-)

    --- a/drivers/perf/arm_pmu.c
    +++ b/drivers/perf/arm_pmu.c
    @@ -398,6 +398,9 @@ validate_group(struct perf_event *event)
    if (!validate_event(event->pmu, &fake_pmu, leader))
    return -EINVAL;

    + if (event == leader)
    + return 0;
    +
    for_each_sibling_event(sibling, leader) {
    if (!validate_event(event->pmu, &fake_pmu, sibling))
    return -EINVAL;
    @@ -487,12 +490,7 @@ __hw_perf_event_init(struct perf_event *
    local64_set(&hwc->period_left, hwc->sample_period);
    }

    - if (event->group_leader != event) {
    - if (validate_group(event) != 0)
    - return -EINVAL;
    - }
    -
    - return 0;
    + return validate_group(event);
    }

    static int armpmu_event_init(struct perf_event *event)

    \
     
     \ /
      Last update: 2022-04-26 11:16    [W:3.855 / U:0.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site