From nobody Mon Feb 9 15:06:55 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 942622066E6; Sun, 23 Mar 2025 12:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742732951; cv=none; b=kxWyytlYJtPJY8SL2f2/CtGh77UJ2b4FsKsELd0s4I+uCh3es7VxmU2mmxCLxtpuu+H9SHTzjZcgmwyBM4S9lB5ImYYs1+ehNJhIk+9h40Xp72GGTO5ejpWLkyh4lbrRSOOPBGNiNgw3oStEAmW4CyPSDPy08bGv/TXnBhptLJw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742732951; c=relaxed/simple; bh=caJWxZ2qGvBRp3vjbDmGUiLOtxKw98Sfx2PvuoPsUMg=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=cdLPkR3lwFV7P6R9LjsDWySa+COWIuQyVJa7lkeQSVCOCzD08CUAkDPDPwNhc3rX96i20hXL2FuSv9JWFKN1NV7fMtqIIoMXufcoZ5+K1BIXMKGrnrpXezfLqype0T+qWcyqQKl/s0Mbfz1KQJidbAaqEQuwB7mAe79ACsCqvjo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4CA1DC4CEE2; Sun, 23 Mar 2025 12:29:11 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1twKSc-00000001yhh-2xfT; Sun, 23 Mar 2025 08:29:50 -0400 Message-ID: <20250323122950.561440367@goodmis.org> User-Agent: quilt/0.68 Date: Sun, 23 Mar 2025 08:29:42 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , stable@vger.kernel.org, Douglas Raillard Subject: [for-next][PATCH 09/10] tracing: Ensure module defining synth event cannot be unloaded while tracing References: <20250323122933.407277911@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Douglas Raillard Currently, using synth_event_delete() will fail if the event is being used (tracing in progress), but that is normally done in the module exit function. At that stage, failing is problematic as returning a non-zero status means the module will become locked (impossible to unload or reload again). Instead, ensure the module exit function does not get called in the first place by increasing the module refcnt when the event is enabled. Cc: stable@vger.kernel.org Cc: Mathieu Desnoyers Fixes: 35ca5207c2d11 ("tracing: Add synthetic event command generation func= tions") Link: https://lore.kernel.org/20250318180906.226841-1-douglas.raillard@arm.= com Signed-off-by: Douglas Raillard Acked-by: Masami Hiramatsu (Google) Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_events_synth.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_= synth.c index 07ff8be8267e..463b0073629a 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -852,6 +852,34 @@ static struct trace_event_fields synth_event_fields_ar= ray[] =3D { {} }; =20 +static int synth_event_reg(struct trace_event_call *call, + enum trace_reg type, void *data) +{ + struct synth_event *event =3D container_of(call, struct synth_event, call= ); + + switch (type) { + case TRACE_REG_REGISTER: + case TRACE_REG_PERF_REGISTER: + if (!try_module_get(event->mod)) + return -EBUSY; + break; + default: + break; + } + + int ret =3D trace_event_reg(call, type, data); + + switch (type) { + case TRACE_REG_UNREGISTER: + case TRACE_REG_PERF_UNREGISTER: + module_put(event->mod); + break; + default: + break; + } + return ret; +} + static int register_synth_event(struct synth_event *event) { struct trace_event_call *call =3D &event->call; @@ -881,7 +909,7 @@ static int register_synth_event(struct synth_event *eve= nt) goto out; } call->flags =3D TRACE_EVENT_FL_TRACEPOINT; - call->class->reg =3D trace_event_reg; + call->class->reg =3D synth_event_reg; call->class->probe =3D trace_event_raw_event_synth; call->data =3D event; call->tp =3D event->tp; --=20 2.47.2