All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] tracing: Fix seqfile memory leak for .31
@ 2009-07-23  3:28 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Li Zefan @ 2009-07-23  3:28 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

I found some memory leak in tracing code, due to missing
seq_release().

I think those fixes should be queued for .31.

[PATCH 1/3] trace_stack: Fix seqfile memory leak
[PATCH 2/3] function-graph: Fix seqfile memory leak
[PATCH 3/3] tracing/stat: Fix seqfile memory leak
---
 kernel/trace/ftrace.c      |   15 ++++++++++++---
 kernel/trace/trace_stack.c |    7 ++-----
 kernel/trace/trace_stat.c  |   34 ++++++++++++++++++++++------------
 3 files changed, 36 insertions(+), 20 deletions(-)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/3] trace_stack: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
@ 2009-07-23  3:28 ` Li Zefan
  2009-07-30 19:54   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Li Zefan @ 2009-07-23  3:28 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat stack_trace, we leak memory allocated by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/trace_stack.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index a4dc8d9..0da1cff 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -294,17 +294,14 @@ static const struct seq_operations stack_trace_seq_ops = {
 
 static int stack_trace_open(struct inode *inode, struct file *file)
 {
-	int ret;
-
-	ret = seq_open(file, &stack_trace_seq_ops);
-
-	return ret;
+	return seq_open(file, &stack_trace_seq_ops);
 }
 
 static const struct file_operations stack_trace_fops = {
 	.open		= stack_trace_open,
 	.read		= seq_read,
 	.llseek		= seq_lseek,
+	.release	= seq_release,
 };
 
 int
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] function-graph: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
@ 2009-07-23  3:29 ` Li Zefan
  2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
  2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt
  3 siblings, 1 reply; 9+ messages in thread
From: Li Zefan @ 2009-07-23  3:29 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat set_graph_function, we leak memory allocated
by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/ftrace.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 7179bff..fd5cdeb 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2538,6 +2538,14 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 }
 
 static int
+ftrace_graph_release(struct inode *inode, struct file *file)
+{
+	if (file->f_mode & FMODE_READ)
+		seq_release(inode, file);
+	return 0;
+}
+
+static int
 ftrace_set_func(unsigned long *array, int *idx, char *buffer)
 {
 	struct dyn_ftrace *rec;
@@ -2660,9 +2668,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 }
 
 static const struct file_operations ftrace_graph_fops = {
-	.open = ftrace_graph_open,
-	.read = seq_read,
-	.write = ftrace_graph_write,
+	.open		= ftrace_graph_open,
+	.read		= seq_read,
+	.write		= ftrace_graph_write,
+	.release	= ftrace_graph_release,
 };
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] tracing/stat: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
@ 2009-07-23  3:29 ` Li Zefan
  2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt
  3 siblings, 1 reply; 9+ messages in thread
From: Li Zefan @ 2009-07-23  3:29 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat a trace_stat file, we leak memory allocated by
seq_open().

Also fix memory leak in a failure path in tracing_stat_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/trace_stat.c |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index f069461..07c60b0 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -76,7 +76,7 @@ static struct rb_node *release_next(struct tracer_stat *ts,
 	}
 }
 
-static void reset_stat_session(struct stat_session *session)
+static void __reset_stat_session(struct stat_session *session)
 {
 	struct rb_node *node = session->stat_root.rb_node;
 
@@ -86,10 +86,17 @@ static void reset_stat_session(struct stat_session *session)
 	session->stat_root = RB_ROOT;
 }
 
+static void reset_stat_session(struct stat_session *session)
+{
+	mutex_lock(&session->stat_mutex);
+	__reset_stat_session(session);
+	mutex_unlock(&session->stat_mutex);
+}
+
 static void destroy_session(struct stat_session *session)
 {
 	debugfs_remove(session->file);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_destroy(&session->stat_mutex);
 	kfree(session);
 }
@@ -153,7 +160,7 @@ static int stat_seq_init(struct stat_session *session)
 	int i;
 
 	mutex_lock(&session->stat_mutex);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 
 	if (!ts->stat_cmp)
 		ts->stat_cmp = dummy_cmp;
@@ -186,7 +193,7 @@ exit:
 	return ret;
 
 exit_free_rbtree:
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_unlock(&session->stat_mutex);
 	return ret;
 }
@@ -253,16 +260,21 @@ static const struct seq_operations trace_stat_seq_ops = {
 static int tracing_stat_open(struct inode *inode, struct file *file)
 {
 	int ret;
-
+	struct seq_file *m;
 	struct stat_session *session = inode->i_private;
 
+	ret = stat_seq_init(session);
+	if (ret)
+		return ret;
+
 	ret = seq_open(file, &trace_stat_seq_ops);
-	if (!ret) {
-		struct seq_file *m = file->private_data;
-		m->private = session;
-		ret = stat_seq_init(session);
+	if (ret) {
+		reset_stat_session(session);
+		return ret;
 	}
 
+	m = file->private_data;
+	m->private = session;
 	return ret;
 }
 
@@ -273,11 +285,9 @@ static int tracing_stat_release(struct inode *i, struct file *f)
 {
 	struct stat_session *session = i->i_private;
 
-	mutex_lock(&session->stat_mutex);
 	reset_stat_session(session);
-	mutex_unlock(&session->stat_mutex);
 
-	return 0;
+	return seq_release(i, f);
 }
 
 static const struct file_operations tracing_stat_fops = {
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/3] tracing: Fix seqfile memory leak for .31
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
                   ` (2 preceding siblings ...)
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
@ 2009-07-23  3:44 ` Steven Rostedt
  3 siblings, 0 replies; 9+ messages in thread
From: Steven Rostedt @ 2009-07-23  3:44 UTC (permalink / raw)
  To: Li Zefan; +Cc: Ingo Molnar, Frederic Weisbecker, LKML


On Thu, 23 Jul 2009, Li Zefan wrote:

> I found some memory leak in tracing code, due to missing
> seq_release().
> 
> I think those fixes should be queued for .31.

Thanks Li!

I'll get these queued up tomorrow.

-- Steve

> 
> [PATCH 1/3] trace_stack: Fix seqfile memory leak
> [PATCH 2/3] function-graph: Fix seqfile memory leak
> [PATCH 3/3] tracing/stat: Fix seqfile memory leak
> ---
>  kernel/trace/ftrace.c      |   15 ++++++++++++---
>  kernel/trace/trace_stack.c |    7 ++-----
>  kernel/trace/trace_stat.c  |   34 ++++++++++++++++++++++------------
>  3 files changed, 36 insertions(+), 20 deletions(-)
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/3] function-graph: Fix seqfile memory leak
  2009-07-23 14:02 [GIT PULL][2.6.31] tracing: fix of memory leaks Steven Rostedt
@ 2009-07-23 14:03 ` Steven Rostedt
  0 siblings, 0 replies; 9+ messages in thread
From: Steven Rostedt @ 2009-07-23 14:03 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Andrew Morton, Li Zefan, Frederic Weisbecker,
	Thomas Gleixner

[-- Attachment #1: 0002-function-graph-Fix-seqfile-memory-leak.patch --]
[-- Type: text/plain, Size: 1272 bytes --]

From: Li Zefan <lizf@cn.fujitsu.com>

Every time we cat set_graph_function, we leak memory allocated
by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D907.2010500@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/trace/ftrace.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 4521c77..1f3ec2a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2596,6 +2596,14 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 }
 
 static int
+ftrace_graph_release(struct inode *inode, struct file *file)
+{
+	if (file->f_mode & FMODE_READ)
+		seq_release(inode, file);
+	return 0;
+}
+
+static int
 ftrace_set_func(unsigned long *array, int *idx, char *buffer)
 {
 	struct dyn_ftrace *rec;
@@ -2724,9 +2732,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 }
 
 static const struct file_operations ftrace_graph_fops = {
-	.open = ftrace_graph_open,
-	.read = seq_read,
-	.write = ftrace_graph_write,
+	.open		= ftrace_graph_open,
+	.read		= seq_read,
+	.write		= ftrace_graph_write,
+	.release	= ftrace_graph_release,
 };
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 
-- 
1.6.3.3

-- 

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip:tracing/urgent] trace_stack: Fix seqfile memory leak
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
@ 2009-07-30 19:54   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:54 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  d8cc1ab793993c886c62abf77c93287df33ffd8b
Gitweb:     http://git.kernel.org/tip/d8cc1ab793993c886c62abf77c93287df33ffd8b
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:28:40 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:52:09 -0400

trace_stack: Fix seqfile memory leak

Every time we cat stack_trace, we leak memory allocated by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D8E8.3020500@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/trace_stack.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index e644af9..6a2a9d4 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -301,17 +301,14 @@ static const struct seq_operations stack_trace_seq_ops = {
 
 static int stack_trace_open(struct inode *inode, struct file *file)
 {
-	int ret;
-
-	ret = seq_open(file, &stack_trace_seq_ops);
-
-	return ret;
+	return seq_open(file, &stack_trace_seq_ops);
 }
 
 static const struct file_operations stack_trace_fops = {
 	.open		= stack_trace_open,
 	.read		= seq_read,
 	.llseek		= seq_lseek,
+	.release	= seq_release,
 };
 
 int

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip:tracing/urgent] function-graph: Fix seqfile memory leak
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
@ 2009-07-30 19:55   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  87827111a5538633b18e5c641ced673c4c2bb6ce
Gitweb:     http://git.kernel.org/tip/87827111a5538633b18e5c641ced673c4c2bb6ce
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:29:11 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:53:23 -0400

function-graph: Fix seqfile memory leak

Every time we cat set_graph_function, we leak memory allocated
by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D907.2010500@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/ftrace.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 4521c77..1f3ec2a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2596,6 +2596,14 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 }
 
 static int
+ftrace_graph_release(struct inode *inode, struct file *file)
+{
+	if (file->f_mode & FMODE_READ)
+		seq_release(inode, file);
+	return 0;
+}
+
+static int
 ftrace_set_func(unsigned long *array, int *idx, char *buffer)
 {
 	struct dyn_ftrace *rec;
@@ -2724,9 +2732,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 }
 
 static const struct file_operations ftrace_graph_fops = {
-	.open = ftrace_graph_open,
-	.read = seq_read,
-	.write = ftrace_graph_write,
+	.open		= ftrace_graph_open,
+	.read		= seq_read,
+	.write		= ftrace_graph_write,
+	.release	= ftrace_graph_release,
 };
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip:tracing/urgent] tracing/stat: Fix seqfile memory leak
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
@ 2009-07-30 19:55   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  636eacee3b0c76915151db37203cc624becb6d7b
Gitweb:     http://git.kernel.org/tip/636eacee3b0c76915151db37203cc624becb6d7b
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:29:47 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:53:55 -0400

tracing/stat: Fix seqfile memory leak

Every time we cat a trace_stat file, we leak memory allocated by
seq_open().

Also fix memory leak in a failure path in tracing_stat_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D92B.4060704@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/trace_stat.c |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index e66f5e4..aea321c 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -73,7 +73,7 @@ static struct rb_node *release_next(struct rb_node *node)
 	}
 }
 
-static void reset_stat_session(struct stat_session *session)
+static void __reset_stat_session(struct stat_session *session)
 {
 	struct rb_node *node = session->stat_root.rb_node;
 
@@ -83,10 +83,17 @@ static void reset_stat_session(struct stat_session *session)
 	session->stat_root = RB_ROOT;
 }
 
+static void reset_stat_session(struct stat_session *session)
+{
+	mutex_lock(&session->stat_mutex);
+	__reset_stat_session(session);
+	mutex_unlock(&session->stat_mutex);
+}
+
 static void destroy_session(struct stat_session *session)
 {
 	debugfs_remove(session->file);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_destroy(&session->stat_mutex);
 	kfree(session);
 }
@@ -150,7 +157,7 @@ static int stat_seq_init(struct stat_session *session)
 	int i;
 
 	mutex_lock(&session->stat_mutex);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 
 	if (!ts->stat_cmp)
 		ts->stat_cmp = dummy_cmp;
@@ -183,7 +190,7 @@ exit:
 	return ret;
 
 exit_free_rbtree:
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_unlock(&session->stat_mutex);
 	return ret;
 }
@@ -250,16 +257,21 @@ static const struct seq_operations trace_stat_seq_ops = {
 static int tracing_stat_open(struct inode *inode, struct file *file)
 {
 	int ret;
-
+	struct seq_file *m;
 	struct stat_session *session = inode->i_private;
 
+	ret = stat_seq_init(session);
+	if (ret)
+		return ret;
+
 	ret = seq_open(file, &trace_stat_seq_ops);
-	if (!ret) {
-		struct seq_file *m = file->private_data;
-		m->private = session;
-		ret = stat_seq_init(session);
+	if (ret) {
+		reset_stat_session(session);
+		return ret;
 	}
 
+	m = file->private_data;
+	m->private = session;
 	return ret;
 }
 
@@ -270,11 +282,9 @@ static int tracing_stat_release(struct inode *i, struct file *f)
 {
 	struct stat_session *session = i->i_private;
 
-	mutex_lock(&session->stat_mutex);
 	reset_stat_session(session);
-	mutex_unlock(&session->stat_mutex);
 
-	return 0;
+	return seq_release(i, f);
 }
 
 static const struct file_operations tracing_stat_fops = {

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-07-30 19:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
2009-07-30 19:54   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt
  -- strict thread matches above, loose matches on Subject: below --
2009-07-23 14:02 [GIT PULL][2.6.31] tracing: fix of memory leaks Steven Rostedt
2009-07-23 14:03 ` [PATCH 2/3] function-graph: Fix seqfile memory leak Steven Rostedt

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.