* [PATCH 1/4] tracing: fix off-by-one in trace_get_user()
@ 2009-09-22 5:51 Li Zefan
2009-09-22 5:52 ` [PATCH 2/4] tracing: check the return value of trace_get_user() Li Zefan
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Li Zefan @ 2009-09-22 5:51 UTC (permalink / raw)
To: Steven Rostedt; +Cc: Frederic Weisbecker, Jiri Olsa, Ingo Molnar, LKML
Leave the last slot for the tailing '\0'.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
I spent some time reviewing the trace parser patchset,
and found a few small bugs in it, and here are the fixes.
---
kernel/trace/trace.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index a35925d..ae17453 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -415,7 +415,7 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
/* read the non-space input */
while (cnt && !isspace(ch)) {
- if (parser->idx < parser->size)
+ if (parser->idx < parser->size - 1)
parser->buffer[parser->idx++] = ch;
else {
ret = -EINVAL;
--
1.6.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] tracing: check the return value of trace_get_user()
2009-09-22 5:51 [PATCH 1/4] tracing: fix off-by-one in trace_get_user() Li Zefan
@ 2009-09-22 5:52 ` Li Zefan
2009-09-22 8:39 ` [tip:tracing/urgent] tracing: Check " tip-bot for Li Zefan
2009-09-22 5:52 ` [PATCH 3/4] tracing: fix failure path in ftrace_graph_write() Li Zefan
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-09-22 5:52 UTC (permalink / raw)
To: Steven Rostedt; +Cc: Frederic Weisbecker, Jiri Olsa, Ingo Molnar, LKML
Return immediately if trace_get_user() returned failure.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/ftrace.c | 9 ++++-----
kernel/trace/trace_events.c | 7 +++----
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index c71e91b..a8fe478 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2202,7 +2202,7 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
struct trace_parser *parser;
ssize_t ret, read;
- if (!cnt || cnt < 0)
+ if (!cnt)
return 0;
mutex_lock(&ftrace_regex_lock);
@@ -2216,7 +2216,7 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
parser = &iter->parser;
read = trace_get_user(parser, ubuf, cnt, ppos);
- if (trace_parser_loaded(parser) &&
+ if (read >= 0 && trace_parser_loaded(parser) &&
!trace_parser_cont(parser)) {
ret = ftrace_process_regex(parser->buffer,
parser->idx, enable);
@@ -2552,8 +2552,7 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
struct trace_parser parser;
- size_t read = 0;
- ssize_t ret;
+ ssize_t read, ret;
if (!cnt || cnt < 0)
return 0;
@@ -2572,7 +2571,7 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
read = trace_get_user(&parser, ubuf, cnt, ppos);
- if (trace_parser_loaded((&parser))) {
+ if (read >= 0 && trace_parser_loaded((&parser))) {
parser.buffer[parser.idx] = 0;
/* we allow only one expression at a time */
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 6f03c8a..d128f65 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -232,10 +232,9 @@ ftrace_event_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
struct trace_parser parser;
- size_t read = 0;
- ssize_t ret;
+ ssize_t read, ret;
- if (!cnt || cnt < 0)
+ if (!cnt)
return 0;
ret = tracing_update_buffers();
@@ -247,7 +246,7 @@ ftrace_event_write(struct file *file, const char __user *ubuf,
read = trace_get_user(&parser, ubuf, cnt, ppos);
- if (trace_parser_loaded((&parser))) {
+ if (read >= 0 && trace_parser_loaded((&parser))) {
int set = 1;
if (*parser.buffer == '!')
--
1.6.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] tracing: fix failure path in ftrace_graph_write()
2009-09-22 5:51 [PATCH 1/4] tracing: fix off-by-one in trace_get_user() Li Zefan
2009-09-22 5:52 ` [PATCH 2/4] tracing: check the return value of trace_get_user() Li Zefan
@ 2009-09-22 5:52 ` Li Zefan
2009-09-22 8:40 ` [tip:tracing/urgent] tracing: Fix " tip-bot for Li Zefan
2009-09-22 5:54 ` [PATCH 4/4] tracing: fix failure path in ftrace_regex_open() Li Zefan
2009-09-22 8:39 ` [tip:tracing/urgent] tracing: Fix off-by-one in trace_get_user() tip-bot for Li Zefan
3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-09-22 5:52 UTC (permalink / raw)
To: Steven Rostedt; +Cc: Frederic Weisbecker, Jiri Olsa, Ingo Molnar, LKML
Don't call trace_parser_put() on uninitialized trace_parser.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/ftrace.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index a8fe478..5c5cb9b 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2561,12 +2561,12 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
if (ftrace_graph_count >= FTRACE_GRAPH_MAX_FUNCS) {
ret = -EBUSY;
- goto out;
+ goto out_unlock;
}
if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) {
ret = -ENOMEM;
- goto out;
+ goto out_unlock;
}
read = trace_get_user(&parser, ubuf, cnt, ppos);
@@ -2578,12 +2578,14 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count,
parser.buffer);
if (ret)
- goto out;
+ goto out_free;
}
ret = read;
- out:
+
+out_free:
trace_parser_put(&parser);
+out_unlock:
mutex_unlock(&graph_lock);
return ret;
--
1.6.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] tracing: fix failure path in ftrace_regex_open()
2009-09-22 5:51 [PATCH 1/4] tracing: fix off-by-one in trace_get_user() Li Zefan
2009-09-22 5:52 ` [PATCH 2/4] tracing: check the return value of trace_get_user() Li Zefan
2009-09-22 5:52 ` [PATCH 3/4] tracing: fix failure path in ftrace_graph_write() Li Zefan
@ 2009-09-22 5:54 ` Li Zefan
2009-09-22 8:40 ` [tip:tracing/urgent] tracing: Fix " tip-bot for Li Zefan
2009-09-22 8:39 ` [tip:tracing/urgent] tracing: Fix off-by-one in trace_get_user() tip-bot for Li Zefan
3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-09-22 5:54 UTC (permalink / raw)
To: Steven Rostedt; +Cc: Frederic Weisbecker, Jiri Olsa, Ingo Molnar, LKML
Don't forget to free trace_parser if seq_open() returned failure.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/ftrace.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 5c5cb9b..e70af98 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -1621,8 +1621,10 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable)
if (!ret) {
struct seq_file *m = file->private_data;
m->private = iter;
- } else
+ } else {
+ trace_parser_put(&iter->parser);
kfree(iter);
+ }
} else
file->private_data = iter;
mutex_unlock(&ftrace_regex_lock);
--
1.6.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip:tracing/urgent] tracing: Fix off-by-one in trace_get_user()
2009-09-22 5:51 [PATCH 1/4] tracing: fix off-by-one in trace_get_user() Li Zefan
` (2 preceding siblings ...)
2009-09-22 5:54 ` [PATCH 4/4] tracing: fix failure path in ftrace_regex_open() Li Zefan
@ 2009-09-22 8:39 ` tip-bot for Li Zefan
3 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-09-22 8:39 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, lizf, jolsa, fweisbec, rostedt, tglx,
mingo
Commit-ID: 3c235a337e205da0f614e456be72881483dcde6e
Gitweb: http://git.kernel.org/tip/3c235a337e205da0f614e456be72881483dcde6e
Author: Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Tue, 22 Sep 2009 13:51:54 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 22 Sep 2009 10:28:53 +0200
tracing: Fix off-by-one in trace_get_user()
Leave the last slot for the tailing '\0'.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <4AB865FA.5080801@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/trace/trace.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index a35925d..ae17453 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -415,7 +415,7 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
/* read the non-space input */
while (cnt && !isspace(ch)) {
- if (parser->idx < parser->size)
+ if (parser->idx < parser->size - 1)
parser->buffer[parser->idx++] = ch;
else {
ret = -EINVAL;
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip:tracing/urgent] tracing: Check the return value of trace_get_user()
2009-09-22 5:52 ` [PATCH 2/4] tracing: check the return value of trace_get_user() Li Zefan
@ 2009-09-22 8:39 ` tip-bot for Li Zefan
0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-09-22 8:39 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, lizf, jolsa, fweisbec, rostedt, tglx,
mingo
Commit-ID: 4ba7978e98a3ff92cebfb0f31a02c309e3ffa1fe
Gitweb: http://git.kernel.org/tip/4ba7978e98a3ff92cebfb0f31a02c309e3ffa1fe
Author: Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Tue, 22 Sep 2009 13:52:20 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 22 Sep 2009 10:28:55 +0200
tracing: Check the return value of trace_get_user()
Return immediately if trace_get_user() returned failure.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <4AB86614.7020803@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/trace/ftrace.c | 9 ++++-----
kernel/trace/trace_events.c | 7 +++----
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index c71e91b..a8fe478 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2202,7 +2202,7 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
struct trace_parser *parser;
ssize_t ret, read;
- if (!cnt || cnt < 0)
+ if (!cnt)
return 0;
mutex_lock(&ftrace_regex_lock);
@@ -2216,7 +2216,7 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
parser = &iter->parser;
read = trace_get_user(parser, ubuf, cnt, ppos);
- if (trace_parser_loaded(parser) &&
+ if (read >= 0 && trace_parser_loaded(parser) &&
!trace_parser_cont(parser)) {
ret = ftrace_process_regex(parser->buffer,
parser->idx, enable);
@@ -2552,8 +2552,7 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
struct trace_parser parser;
- size_t read = 0;
- ssize_t ret;
+ ssize_t read, ret;
if (!cnt || cnt < 0)
return 0;
@@ -2572,7 +2571,7 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
read = trace_get_user(&parser, ubuf, cnt, ppos);
- if (trace_parser_loaded((&parser))) {
+ if (read >= 0 && trace_parser_loaded((&parser))) {
parser.buffer[parser.idx] = 0;
/* we allow only one expression at a time */
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 6f03c8a..d128f65 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -232,10 +232,9 @@ ftrace_event_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
struct trace_parser parser;
- size_t read = 0;
- ssize_t ret;
+ ssize_t read, ret;
- if (!cnt || cnt < 0)
+ if (!cnt)
return 0;
ret = tracing_update_buffers();
@@ -247,7 +246,7 @@ ftrace_event_write(struct file *file, const char __user *ubuf,
read = trace_get_user(&parser, ubuf, cnt, ppos);
- if (trace_parser_loaded((&parser))) {
+ if (read >= 0 && trace_parser_loaded((&parser))) {
int set = 1;
if (*parser.buffer == '!')
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip:tracing/urgent] tracing: Fix failure path in ftrace_graph_write()
2009-09-22 5:52 ` [PATCH 3/4] tracing: fix failure path in ftrace_graph_write() Li Zefan
@ 2009-09-22 8:40 ` tip-bot for Li Zefan
0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-09-22 8:40 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, lizf, jolsa, fweisbec, rostedt, tglx,
mingo
Commit-ID: 1eb90f138b3fb4cc15f3acec94aa788e846269f7
Gitweb: http://git.kernel.org/tip/1eb90f138b3fb4cc15f3acec94aa788e846269f7
Author: Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Tue, 22 Sep 2009 13:52:57 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 22 Sep 2009 10:28:56 +0200
tracing: Fix failure path in ftrace_graph_write()
Don't call trace_parser_put() on uninitialized trace_parser.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <4AB86639.3000003@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/trace/ftrace.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index a8fe478..5c5cb9b 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2561,12 +2561,12 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
if (ftrace_graph_count >= FTRACE_GRAPH_MAX_FUNCS) {
ret = -EBUSY;
- goto out;
+ goto out_unlock;
}
if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) {
ret = -ENOMEM;
- goto out;
+ goto out_unlock;
}
read = trace_get_user(&parser, ubuf, cnt, ppos);
@@ -2578,12 +2578,14 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count,
parser.buffer);
if (ret)
- goto out;
+ goto out_free;
}
ret = read;
- out:
+
+out_free:
trace_parser_put(&parser);
+out_unlock:
mutex_unlock(&graph_lock);
return ret;
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip:tracing/urgent] tracing: Fix failure path in ftrace_regex_open()
2009-09-22 5:54 ` [PATCH 4/4] tracing: fix failure path in ftrace_regex_open() Li Zefan
@ 2009-09-22 8:40 ` tip-bot for Li Zefan
0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-09-22 8:40 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, lizf, jolsa, fweisbec, rostedt, tglx,
mingo
Commit-ID: 79fe249c8368be35c9ca05982e80c68e959505e1
Gitweb: http://git.kernel.org/tip/79fe249c8368be35c9ca05982e80c68e959505e1
Author: Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Tue, 22 Sep 2009 13:54:28 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 22 Sep 2009 10:28:57 +0200
tracing: Fix failure path in ftrace_regex_open()
Don't forget to free trace_parser if seq_open() returned failure.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <4AB86694.4040803@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/trace/ftrace.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 5c5cb9b..e70af98 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -1621,8 +1621,10 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable)
if (!ret) {
struct seq_file *m = file->private_data;
m->private = iter;
- } else
+ } else {
+ trace_parser_put(&iter->parser);
kfree(iter);
+ }
} else
file->private_data = iter;
mutex_unlock(&ftrace_regex_lock);
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-09-22 8:40 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-22 5:51 [PATCH 1/4] tracing: fix off-by-one in trace_get_user() Li Zefan
2009-09-22 5:52 ` [PATCH 2/4] tracing: check the return value of trace_get_user() Li Zefan
2009-09-22 8:39 ` [tip:tracing/urgent] tracing: Check " tip-bot for Li Zefan
2009-09-22 5:52 ` [PATCH 3/4] tracing: fix failure path in ftrace_graph_write() Li Zefan
2009-09-22 8:40 ` [tip:tracing/urgent] tracing: Fix " tip-bot for Li Zefan
2009-09-22 5:54 ` [PATCH 4/4] tracing: fix failure path in ftrace_regex_open() Li Zefan
2009-09-22 8:40 ` [tip:tracing/urgent] tracing: Fix " tip-bot for Li Zefan
2009-09-22 8:39 ` [tip:tracing/urgent] tracing: Fix off-by-one in trace_get_user() tip-bot for Li Zefan
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.