All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Mi, Dapeng" <dapeng1.mi@linux.intel.com>
To: sashiko-reviews@lists.linux.dev
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [PATCH 14/15] perf/core: Add event_caps dependency flags
Date: Tue, 29 Sep 2026 14:34:45 +0800	[thread overview]
Message-ID: <b0d68c0e-3787-4a98-be13-408d84daafb7@linux.intel.com> (raw)
In-Reply-To: <20260928080537.5212D1F000FF@smtp.kernel.org>


On 9/28/2026 4:05 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] perf/core: Userspace-triggerable WARN_ON_ONCE via retained event_caps in promoted group leader
> --
>
> commit ee7032954fb61d16c3b9fceb7931ce04cf4b8852
> Author: Dapeng Mi <dapeng1.mi@linux.intel.com>
>     
> perf/core: Add event_caps dependency flags
>     
> This commit adds two new event capability flags, PERF_EV_CAP_RELIED_ON and
> PERF_EV_CAP_RELIANT, to track dependencies between perf events in a group.
> When a relied-on event is detached, all reliant events are scheduled out
> and transitioned to an ERROR state.
>
>> diff --git a/kernel/events/core.c b/kernel/events/core.c
>> index de05df65ab3d0..55db0ad8b93a0 100644
>> --- a/kernel/events/core.c
>> +++ b/kernel/events/core.c
>> @@ -2349,13 +2349,12 @@ static void perf_promote_sibling_to_leader(struct perf_event *sibling,
>>  					   int group_caps)
>>  {
>>  	/*
>> -	 * Events that have PERF_EV_CAP_SIBLING require being part of
>> -	 * a group and cannot exist on their own, schedule them out
>> -	 * and move them into the ERROR state. Also see
>> -	 * _perf_event_enable(), it will not be able to recover this
>> -	 * ERROR state.
>> +	 * Events with PERF_EV_CAP_SIBLING or PERF_EV_CAP_RELIANT
>> +	 * must stay in a group or depend on another event in the
>> +	 * group; otherwise schedule them out and move them to ERROR.
>> +	 * _perf_event_enable() cannot recover from this state.
>>  	 */
>> -	if (sibling->event_caps & PERF_EV_CAP_SIBLING)
>> +	if (sibling->event_caps & (PERF_EV_CAP_SIBLING | PERF_EV_CAP_RELIANT))
>>  		__event_disable(sibling, ctx, PERF_EVENT_STATE_ERROR);
>>  
>>  	sibling->group_leader = sibling;
>>  	sibling->group_caps = group_caps;
> [Severity: High]
> Does this code need to clear PERF_EV_CAP_RELIED_ON and PERF_EV_CAP_RELIANT
> from sibling->event_caps when promoting the sibling to a singleton group
> leader?
>
> Since the flags are retained, a newly promoted leader can still carry
> PERF_EV_CAP_RELIANT.

Per my understanding, the event->event_caps should only be initialized at
the event creation and can't be modified from then. The event->event_caps
carries the specific capabilities of the event, it should not be changed or
cleared.

Besides, if PERF_EV_CAP_RELIANT is cleared for the metric events, the
metric events could be incorrectly enabled in _perf_event_enable().



>
>> @@ -2371,6 +2370,43 @@ static void perf_promote_sibling_to_leader(struct perf_event *sibling,
>>  	perf_event__header_size(sibling);
>>  }
>>  
>> +static void perf_group_disable_reliants(struct perf_event *event)
>> +{
>> +	struct perf_event *leader = event->group_leader;
>> +	struct perf_event *sibling, *tmp;
>> +	struct perf_event_context *ctx = event->ctx;
>> +	u32 mask = PERF_EV_CAP_RELIED_ON | PERF_EV_CAP_RELIANT;
>> +
>> +	if (!(event->event_caps & PERF_EV_CAP_RELIED_ON))
>> +		return;
>> +
>> +	/* Group leader should not carry PERF_EV_CAP_RELIED_ON. */
>> +	WARN_ON_ONCE(leader->event_caps & PERF_EV_CAP_RELIED_ON);
>> +	/* Group leader should not carry PERF_EV_CAP_RELIANT. */
>> +	WARN_ON_ONCE(leader->event_caps & PERF_EV_CAP_RELIANT);
> [Severity: High]
> Can userspace trigger this WARN_ON_ONCE because of the retained caps when
> siblings are promoted to leaders?
>
> If a user creates a perf event group with a non-slots leader, a slots
> sibling, and a metric sibling, the metric sibling can acquire
> PERF_EV_CAP_RELIANT.
>
> When the user closes the leader, the metric sibling is promoted to its
> own group leader, retaining PERF_EV_CAP_RELIANT and entering
> PERF_EVENT_STATE_ERROR.
>
> If the user then opens a new slots sibling and a new metric sibling under
> this promoted leader, and finally closes the new slots sibling, won't
> perf_group_disable_reliants() hit this WARN_ON_ONCE because the leader
> still holds the reliant flag? On systems with panic_on_warn enabled,
> this could cause a kernel panic.

It's a possible case, but won't it justify why the WARN_ON_ONCE() is
needed? Once such incorrect cases occur, users would be warned.

Thanks.


>

  reply	other threads:[~2026-09-29  6:34 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-28  7:42 [PATCH 00/15] perf/x86: Fix sampling bugs and relax slots-event grouping Dapeng Mi
2026-09-28  7:42 ` [PATCH 01/15] perf/x86/intel: Guard leader sibling walk on nr_siblings Dapeng Mi
2026-09-28  8:00   ` sashiko-bot
2026-09-28  7:42 ` [PATCH 02/15] perf/x86/intel: Reset active_fixed_ctrl_val on CPU teardown Dapeng Mi
2026-09-28  8:02   ` sashiko-bot
2026-09-28  7:42 ` [PATCH 03/15] perf/x86/intel: Reset active_pebs_data_cfg " Dapeng Mi
2026-09-28  8:07   ` sashiko-bot
2026-09-28  7:42 ` [PATCH 04/15] perf/x86/intel: Reset cached acr_cfg_b[] and cfg_c_val[] " Dapeng Mi
2026-09-28  8:01   ` sashiko-bot
2026-09-28  7:42 ` [PATCH 05/15] perf/x86/intel: Pass correct PEBS counter mask to no-drain update path Dapeng Mi
2026-09-28  7:58   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 06/15] perf/x86/intel: Limit PEBS counter iteration to valid array bounds Dapeng Mi
2026-09-28  8:00   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 07/15] perf/x86/intel: Reject SAMPLE_READ for no-counter-snapshot ACR events Dapeng Mi
2026-09-28  8:04   ` sashiko-bot
2026-09-29  6:08     ` Mi, Dapeng
2026-09-29 19:02   ` Falcon, Thomas
2026-09-30  1:12     ` Mi, Dapeng
2026-09-28  7:43 ` [PATCH 08/15] perf/x86/intel: Fix stale PEBS count without counter-group support Dapeng Mi
2026-09-28  8:02   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 09/15] perf/x86/intel: Refactor intel_pmu_drain_arch_pebs() Dapeng Mi
2026-09-28  7:57   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 10/15] perf/x86/intel: Refactor intel_pmu_drain_pebs_icl() Dapeng Mi
2026-09-28  7:59   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 11/15] perf/x86/intel: Fix invalid PEBS counts with counter-group support Dapeng Mi
2026-09-28  8:00   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 12/15] perf/x86/intel: Make ACR static_call update architectural Dapeng Mi
2026-09-28  8:02   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 13/15] perf/x86: Validate event type before topdown/mem-loads classification Dapeng Mi
2026-09-28  8:01   ` sashiko-bot
2026-09-28  7:43 ` [PATCH 14/15] perf/core: Add event_caps dependency flags Dapeng Mi
2026-09-28  8:05   ` sashiko-bot
2026-09-29  6:34     ` Mi, Dapeng [this message]
2026-09-28  7:43 ` [PATCH 15/15] perf/x86/intel: Allow Topdown metrics with a non-leader slots event Dapeng Mi
2026-09-28  8:12   ` sashiko-bot
2026-09-29  7:04     ` Mi, Dapeng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b0d68c0e-3787-4a98-be13-408d84daafb7@linux.intel.com \
    --to=dapeng1.mi@linux.intel.com \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.