* [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 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.