From: Steven Rostedt <rostedt@goodmis.org>
To: linux-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>,
Kees Cook <kees@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Andy Shevchenko <andy@kernel.org>,
linux-hardening@vger.kernel.org
Subject: [for-next][PATCH 14/15] tracing/string: Create and use __free(argv_free) in trace_dynevent.c
Date: Thu, 26 Dec 2024 09:39:28 -0500 [thread overview]
Message-ID: <20241226143937.023136340@goodmis.org> (raw)
In-Reply-To: 20241226143914.397394975@goodmis.org
From: Steven Rostedt <rostedt@goodmis.org>
The function dyn_event_release() uses argv_split() which must be freed via
argv_free(). It contains several error paths that do a goto out to call
argv_free() for cleanup. This makes the code complex and error prone.
Create a new __free() directive __free(argv_free) that will call
argv_free() for data allocated with argv_split(), and use it in the
dyn_event_release() function.
Cc: Kees Cook <kees@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andy Shevchenko <andy@kernel.org>
Cc: linux-hardening@vger.kernel.org
Link: https://lore.kernel.org/20241220103313.4a74ec8e@gandalf.local.home
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
include/linux/string.h | 3 +++
kernel/trace/trace_dynevent.c | 23 +++++++----------------
2 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/include/linux/string.h b/include/linux/string.h
index 493ac4862c77..86d5d352068b 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -4,6 +4,7 @@
#include <linux/args.h>
#include <linux/array_size.h>
+#include <linux/cleanup.h> /* for DEFINE_FREE() */
#include <linux/compiler.h> /* for inline */
#include <linux/types.h> /* for size_t */
#include <linux/stddef.h> /* for NULL */
@@ -312,6 +313,8 @@ extern void *kmemdup_array(const void *src, size_t count, size_t element_size, g
extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
extern void argv_free(char **argv);
+DEFINE_FREE(argv_free, char **, if (!IS_ERR_OR_NULL(_T)) argv_free(_T))
+
/* lib/cmdline.c */
extern int get_option(char **str, int *pint);
extern char *get_options(const char *str, int nints, int *ints);
diff --git a/kernel/trace/trace_dynevent.c b/kernel/trace/trace_dynevent.c
index 4376887e0d8a..a322e4f249a5 100644
--- a/kernel/trace/trace_dynevent.c
+++ b/kernel/trace/trace_dynevent.c
@@ -74,24 +74,19 @@ int dyn_event_release(const char *raw_command, struct dyn_event_operations *type
struct dyn_event *pos, *n;
char *system = NULL, *event, *p;
int argc, ret = -ENOENT;
- char **argv;
+ char **argv __free(argv_free) = argv_split(GFP_KERNEL, raw_command, &argc);
- argv = argv_split(GFP_KERNEL, raw_command, &argc);
if (!argv)
return -ENOMEM;
if (argv[0][0] == '-') {
- if (argv[0][1] != ':') {
- ret = -EINVAL;
- goto out;
- }
+ if (argv[0][1] != ':')
+ return -EINVAL;
event = &argv[0][2];
} else {
event = strchr(argv[0], ':');
- if (!event) {
- ret = -EINVAL;
- goto out;
- }
+ if (!event)
+ return -EINVAL;
event++;
}
@@ -101,10 +96,8 @@ int dyn_event_release(const char *raw_command, struct dyn_event_operations *type
event = p + 1;
*p = '\0';
}
- if (!system && event[0] == '\0') {
- ret = -EINVAL;
- goto out;
- }
+ if (!system && event[0] == '\0')
+ return -EINVAL;
mutex_lock(&event_mutex);
for_each_dyn_event_safe(pos, n) {
@@ -120,8 +113,6 @@ int dyn_event_release(const char *raw_command, struct dyn_event_operations *type
}
tracing_reset_all_online_cpus();
mutex_unlock(&event_mutex);
-out:
- argv_free(argv);
return ret;
}
--
2.45.2
next prev parent reply other threads:[~2024-12-26 14:38 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-26 14:39 [for-next][PATCH 00/15] tracing: Updates for v6.14 Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 01/15] tracing: Switch trace.c code over to use guard() Steven Rostedt
2024-12-28 10:40 ` Markus Elfring
2024-12-26 14:39 ` [for-next][PATCH 02/15] tracing: Return -EINVAL if a boot tracer tries to enable the mmiotracer at boot Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 03/15] tracing: Have event_enable_write() just return error on error Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 04/15] tracing: Simplify event_enable_func() goto out_free logic Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 05/15] tracing: Simplify event_enable_func() goto_reg logic Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 06/15] tracing: Switch trace_events.c code over to use guard() Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 07/15] tracing: Switch trace_events_hist.c " Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 08/15] tracing: Switch trace_events_trigger.c " Steven Rostedt
2024-12-28 13:52 ` Markus Elfring
2024-12-26 14:39 ` [for-next][PATCH 09/15] tracing: Switch trace_events_filter.c " Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 10/15] tracing: Switch trace_events_synth.c " Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 11/15] tracing: Switch trace_osnoise.c code over to use guard() and __free() Steven Rostedt
2024-12-28 14:01 ` Markus Elfring
2024-12-26 14:39 ` [for-next][PATCH 12/15] tracing: Switch trace_stack.c code over to use guard() Steven Rostedt
2024-12-26 14:39 ` [for-next][PATCH 13/15] tracing: Switch trace_stat.c " Steven Rostedt
2024-12-26 14:39 ` Steven Rostedt [this message]
2024-12-26 14:39 ` [for-next][PATCH 15/15] tracepoint: Reduce duplication of __DO_TRACE_CALL 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=20241226143937.023136340@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=andy@kernel.org \
--cc=kees@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-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 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.