All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@redhat.com>
To: Ingo Molnar <mingo@elte.hu>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	lkml <linux-kernel@vger.kernel.org>
Cc: systemtap <systemtap@sources.redhat.com>,
	DLE <dle-develop@lists.sourceforge.net>,
	Masami Hiramatsu <mhiramat@redhat.com>,
	Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
	Jim Keniston <jkenisto@us.ibm.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Christoph Hellwig <hch@infradead.org>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Jason Baron <jbaron@redhat.com>,
	"K.Prasad" <prasad@linux.vnet.ibm.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH -tip 1/9] trace_kprobes: Fix a memory leak bug and check kstrdup return value
Date: Mon, 30 Nov 2009 19:19:20 -0500	[thread overview]
Message-ID: <20091201001919.10235.56455.stgit@harusame> (raw)
In-Reply-To: <20091201001912.10235.79411.stgit@harusame>

Fix a memory leak case in create_trace_probe(). When an argument is
too long (> MAX_ARGSTR_LEN), it just jumps to error path. In that case
tp->args[i].name is not released.
This also fixes a bug to check kstrdup()'s return value.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
---

 kernel/trace/trace_kprobe.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 72d0c65..aff5f80 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -483,7 +483,8 @@ static int parse_probe_vars(char *arg, struct fetch_func *ff, int is_return)
 	return ret;
 }
 
-static int parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
+/* Recursive argument parser */
+static int __parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
 {
 	int ret = 0;
 	unsigned long param;
@@ -543,7 +544,7 @@ static int parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
 			if (!id)
 				return -ENOMEM;
 			id->offset = offset;
-			ret = parse_probe_arg(arg, &id->orig, is_return);
+			ret = __parse_probe_arg(arg, &id->orig, is_return);
 			if (ret)
 				kfree(id);
 			else {
@@ -560,6 +561,16 @@ static int parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
 	return ret;
 }
 
+/* String length checking wrapper */
+static int parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
+{
+	if (strlen(arg) > MAX_ARGSTR_LEN) {
+		pr_info("Argument is too long.: %s\n",  arg);
+		return -ENOSPC;
+	}
+	return __parse_probe_arg(arg, ff, is_return);
+}
+
 /* Return 1 if name is reserved or already used by another argument */
 static int conflict_field_name(const char *name,
 			       struct probe_arg *args, int narg)
@@ -698,13 +709,14 @@ static int create_trace_probe(int argc, char **argv)
 		}
 
 		tp->args[i].name = kstrdup(argv[i], GFP_KERNEL);
-
-		/* Parse fetch argument */
-		if (strlen(arg) > MAX_ARGSTR_LEN) {
-			pr_info("Argument%d(%s) is too long.\n", i, arg);
-			ret = -ENOSPC;
+		if (!tp->args[i].name) {
+			pr_info("Failed to allocate argument%d name '%s'.\n",
+				i, argv[i]);
+			ret = -ENOMEM;
 			goto error;
 		}
+
+		/* Parse fetch argument */
 		ret = parse_probe_arg(arg, &tp->args[i].fetch, is_return);
 		if (ret) {
 			pr_info("Parse error at argument%d. (%d)\n", i, ret);


-- 
Masami Hiramatsu

Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division

e-mail: mhiramat@redhat.com

  reply	other threads:[~2009-12-01  0:19 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-01  0:19 [PATCH -tip 0/9] perf-probe updates Masami Hiramatsu
2009-12-01  0:19 ` Masami Hiramatsu [this message]
2009-12-01  7:31   ` [tip:perf/core] trace_kprobes: Fix a memory leak bug and check kstrdup() return value tip-bot for Masami Hiramatsu
2009-12-01  0:19 ` [PATCH -tip 2/9] perf probe: Fix to change a debugging message from pr_info to pr_debug Masami Hiramatsu
2009-12-01  7:31   ` [tip:perf/core] perf probe: Change " tip-bot for Masami Hiramatsu
2009-12-01  0:19 ` [PATCH -tip 3/9] perf probe: Fix to add probe-finder.h without libdwarf Masami Hiramatsu
2009-12-01  7:31   ` [tip:perf/core] perf probe: Add " tip-bot for Masami Hiramatsu
2009-12-01  0:19 ` [PATCH -tip 4/9] perf probe: Fix argv array size in probe parser Masami Hiramatsu
2009-12-01  7:32   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2009-12-01  0:19 ` [PATCH -tip 5/9] perf probe: Fix probe array index for multiple probe point Masami Hiramatsu
2009-12-01  7:32   ` [tip:perf/core] perf probe: Fix probe array index for multiple probe points tip-bot for Masami Hiramatsu
2009-12-01  0:19 ` [PATCH -tip 6/9] perf probe: Move probe event utility functions to probe-event.c Masami Hiramatsu
2009-12-01  7:32   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2009-12-01  0:20 ` [PATCH -tip 7/9] perf probe: Add argv_split() from lib/argv_split.c Masami Hiramatsu
2009-12-01  7:32   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2009-12-02  5:44     ` Wang Liming
2009-12-02  5:51       ` Frederic Weisbecker
2009-12-01  0:20 ` [PATCH -tip 8/9] perf probe: Add --list option for listing current probe events Masami Hiramatsu
2009-12-01  7:32   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2009-12-02  4:12     ` Wang Liming
2009-12-02  4:56       ` Masami Hiramatsu
2009-12-02  5:35         ` Wang Liming
2009-12-02  6:06           ` Frederic Weisbecker
2009-12-02  6:21             ` Wang Liming
2009-12-02  8:31             ` Ingo Molnar
2009-12-02  8:42               ` [PATCH] perf tools: replace %m with %a in sscanf Liming Wang
2009-12-02 10:44                 ` [tip:perf/core] perf tools: Replace " tip-bot for Liming Wang
2009-12-02 16:45                 ` [PATCH] perf tools: replace " Masami Hiramatsu
2009-12-01  0:20 ` [PATCH -tip 9/9] perf probe: Simplify event naming Masami Hiramatsu
2009-12-01  7:33   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2009-12-01  7:29 ` [PATCH -tip 0/9] perf-probe updates Ingo Molnar
2009-12-02 21:53   ` Masami Hiramatsu

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=20091201001919.10235.56455.stgit@harusame \
    --to=mhiramat@redhat.com \
    --cc=acme@redhat.com \
    --cc=ananth@in.ibm.com \
    --cc=dle-develop@lists.sourceforge.net \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=jbaron@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=prasad@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=systemtap@sources.redhat.com \
    /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.