From nobody Mon Feb 9 01:44:01 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 EB2CA2BAF7 for ; Thu, 26 Dec 2024 14:38:36 +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=1735223917; cv=none; b=HHYM+rWNyTuMkWY52aYiIvtHnDdrmKL9ZV2Q1QcALFkWpQX/xn/sBltXrfm0nmITZRSfj/O7idN4gafu8rex8jhzruIwrqqAVYh3WlNv8HwhK9EyfoJDf+OJLq2vanH42FSKFUVTPUnS8/s8x6mq+h1eK+UQVRcnN9dRKrC3DTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735223917; c=relaxed/simple; bh=FRSkVm+j6vd/r++/lj+183yBOz1KWSl4LdRiCab2EGY=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=HLtM20u/gL46U7RcPgsJkUhwLQIzAc73UCsEV+zz5uzwJExaxxfivLLB7YVS+Q9y4k6dlSNL/ho9uJgcbzkVilL0p23HqKYMeZzgaYKqqj7bI/K5gsIEGdyOkSeZu70pDxBsm6qlWW7cljwhYwMTi3VGuHgWVvayEOQozzurltg= 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 92C46C4CEE7; Thu, 26 Dec 2024 14:38:36 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1tQp1T-0000000G1qm-1zcO; Thu, 26 Dec 2024 09:39:35 -0500 Message-ID: <20241226143935.327242546@goodmis.org> User-Agent: quilt/0.68 Date: Thu, 26 Dec 2024 09:39:18 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Peter Zijlstra Subject: [for-next][PATCH 04/15] tracing: Simplify event_enable_func() goto out_free logic References: <20241226143914.397394975@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: Steven Rostedt The event_enable_func() function allocates the data descriptor early in the function just to assign its data->count value via: kstrtoul(number, 0, &data->count); This makes the code more complex as there are several error paths before the data descriptor is actually used. This means there needs to be a goto out_free; to clean it up. Use a local variable "count" to do the update and move the data allocation just before it is used. This removes the "out_free" label as the data can be freed on the failure path of where it is used. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Cc: Peter Zijlstra Link: https://lore.kernel.org/20241219201345.190820140@goodmis.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_events.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index f4eff49faef6..43e9545b5cf3 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -3758,6 +3758,7 @@ event_enable_func(struct trace_array *tr, struct ftra= ce_hash *hash, struct trace_event_file *file; struct ftrace_probe_ops *ops; struct event_probe_data *data; + unsigned long count =3D -1; const char *system; const char *event; char *number; @@ -3798,14 +3799,6 @@ event_enable_func(struct trace_array *tr, struct ftr= ace_hash *hash, =20 ret =3D -ENOMEM; =20 - data =3D kzalloc(sizeof(*data), GFP_KERNEL); - if (!data) - goto out; - - data->enable =3D enable; - data->count =3D -1; - data->file =3D file; - if (!param) goto out_reg; =20 @@ -3813,28 +3806,36 @@ event_enable_func(struct trace_array *tr, struct ft= race_hash *hash, =20 ret =3D -EINVAL; if (!strlen(number)) - goto out_free; + goto out; =20 /* * We use the callback data field (which is a pointer) * as our counter. */ - ret =3D kstrtoul(number, 0, &data->count); + ret =3D kstrtoul(number, 0, &count); if (ret) - goto out_free; + goto out; =20 out_reg: /* Don't let event modules unload while probe registered */ ret =3D trace_event_try_get_ref(file->event_call); if (!ret) { ret =3D -EBUSY; - goto out_free; + goto out; } =20 ret =3D __ftrace_event_enable_disable(file, 1, 1); if (ret < 0) goto out_put; =20 + data =3D kzalloc(sizeof(*data), GFP_KERNEL); + if (!data) + goto out_put; + + data->enable =3D enable; + data->count =3D count; + data->file =3D file; + ret =3D register_ftrace_function_probe(glob, tr, ops, data); /* * The above returns on success the # of functions enabled, @@ -3853,11 +3854,10 @@ event_enable_func(struct trace_array *tr, struct ft= race_hash *hash, return ret; =20 out_disable: + kfree(data); __ftrace_event_enable_disable(file, 0, 1); out_put: trace_event_put_ref(file->event_call); - out_free: - kfree(data); goto out; } =20 --=20 2.45.2