From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Andrew Morton <akpm@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH 04/14] tracing: Simplify event_enable_func() goto out_free logic
Date: Thu, 19 Dec 2024 15:12:02 -0500 [thread overview]
Message-ID: <20241219201345.190820140@goodmis.org> (raw)
In-Reply-To: 20241219201158.193821672@goodmis.org
From: Steven Rostedt <rostedt@goodmis.org>
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.
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
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 ftrace_hash *hash,
struct trace_event_file *file;
struct ftrace_probe_ops *ops;
struct event_probe_data *data;
+ unsigned long count = -1;
const char *system;
const char *event;
char *number;
@@ -3798,14 +3799,6 @@ event_enable_func(struct trace_array *tr, struct ftrace_hash *hash,
ret = -ENOMEM;
- data = kzalloc(sizeof(*data), GFP_KERNEL);
- if (!data)
- goto out;
-
- data->enable = enable;
- data->count = -1;
- data->file = file;
-
if (!param)
goto out_reg;
@@ -3813,28 +3806,36 @@ event_enable_func(struct trace_array *tr, struct ftrace_hash *hash,
ret = -EINVAL;
if (!strlen(number))
- goto out_free;
+ goto out;
/*
* We use the callback data field (which is a pointer)
* as our counter.
*/
- ret = kstrtoul(number, 0, &data->count);
+ ret = kstrtoul(number, 0, &count);
if (ret)
- goto out_free;
+ goto out;
out_reg:
/* Don't let event modules unload while probe registered */
ret = trace_event_try_get_ref(file->event_call);
if (!ret) {
ret = -EBUSY;
- goto out_free;
+ goto out;
}
ret = __ftrace_event_enable_disable(file, 1, 1);
if (ret < 0)
goto out_put;
+ data = kzalloc(sizeof(*data), GFP_KERNEL);
+ if (!data)
+ goto out_put;
+
+ data->enable = enable;
+ data->count = count;
+ data->file = file;
+
ret = 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 ftrace_hash *hash,
return ret;
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;
}
--
2.45.2
next prev parent reply other threads:[~2024-12-19 20:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-19 20:11 [PATCH 00/14] tracing: Convert over to guard() and __free() infrastructure Steven Rostedt
2024-12-19 20:11 ` [PATCH 01/14] tracing: Switch trace.c code over to use guard() Steven Rostedt
2024-12-20 16:33 ` Markus Elfring
2024-12-19 20:12 ` [PATCH 02/14] tracing: Return -EINVAL if a boot tracer tries to enable the mmiotracer at boot Steven Rostedt
2024-12-19 20:12 ` [PATCH 03/14] tracing: Have event_enable_write() just return error on error Steven Rostedt
2024-12-19 20:12 ` Steven Rostedt [this message]
2024-12-19 20:12 ` [PATCH 05/14] tracing: Simplify event_enable_func() goto_reg logic Steven Rostedt
2024-12-19 20:12 ` [PATCH 06/14] tracing: Switch trace_events.c code over to use guard() Steven Rostedt
2024-12-19 20:12 ` [PATCH 07/14] tracing: Switch trace_events_hist.c " Steven Rostedt
2024-12-19 20:12 ` [PATCH 08/14] tracing: Switch trace_events_trigger.c " Steven Rostedt
2024-12-20 13:38 ` Steven Rostedt
2024-12-20 16:56 ` Markus Elfring
2024-12-19 20:12 ` [PATCH 09/14] tracing/string: Create and use __free(argv_free) in trace_dynevent.c Steven Rostedt
[not found] ` <CAHp75Vc2t_yppC85dnYrzDEEkFBF=NnoCna_PA=8fFFtusg7Ow@mail.gmail.com>
2024-12-20 13:31 ` Steven Rostedt
[not found] ` <CAHp75VeWpS8ZUct5MJBbCkpPGmg0=9_t_-RhV5DD4-L4wRnvxQ@mail.gmail.com>
2024-12-20 15:28 ` Steven Rostedt
2024-12-19 20:12 ` [PATCH 10/14] tracing: Switch trace_events_filter.c code over to use guard() Steven Rostedt
2024-12-19 20:12 ` [PATCH 11/14] tracing: Switch trace_events_synth.c " Steven Rostedt
2024-12-19 20:12 ` [PATCH 12/14] tracing: Switch trace_osnoise.c code over to use guard() and __free() Steven Rostedt
2024-12-20 17:08 ` Markus Elfring
2024-12-19 20:12 ` [PATCH 13/14] tracing: Switch trace_stack.c code over to use guard() Steven Rostedt
2024-12-19 20:12 ` [PATCH 14/14] tracing: Switch trace_stat.c " Steven Rostedt
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=20241219201345.190820140@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=peterz@infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox