* [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
* [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
* [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
* [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
* [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 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
* [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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox