lkml.org 
[lkml]   [2009]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 4/4] tracing: convert ftrace_graph_write to use copy_word_from_user
From: Steven Rostedt <srostedt@redhat.com>

Impact: clean up

This removes the open coded parsing of a word sent in by the user
and replaces it with copy_word_from_user.

Also removes cnt < 0 check since cnt is unsigned.

Also uses (*ppos) += cnt, instead of file->pos += cnt.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
kernel/trace/ftrace.c | 52 +++++++++++++++++-------------------------------
1 files changed, 19 insertions(+), 33 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index aaa541d..a84915b 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2079,10 +2079,9 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
unsigned long *array;
size_t read = 0;
ssize_t ret;
- int index = 0;
- char ch;
+ int copied;

- if (!cnt || cnt < 0)
+ if (!cnt)
return 0;

mutex_lock(&graph_lock);
@@ -2098,48 +2097,35 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
} else
array = file->private_data;

- ret = get_user(ch, ubuf++);
- if (ret)
- goto out;
- read++;
- cnt--;
+ ret = copy_word_from_user(buffer, ubuf, FTRACE_BUFF_MAX,
+ cnt, &copied, 1);

- /* skip white space */
- while (cnt && isspace(ch)) {
- ret = get_user(ch, ubuf++);
- if (ret)
+ if (ret == -EAGAIN) {
+ if (copied) {
+ /* This do not deal with split words */
+ ret = -EINVAL;
goto out;
- read++;
- cnt--;
- }
+ }

- if (isspace(ch)) {
- *ppos += read;
- ret = read;
+ /* Just white space */
+ (*ppos) += cnt;
+ ret = cnt;
goto out;
}

- while (cnt && !isspace(ch)) {
- if (index < FTRACE_BUFF_MAX)
- buffer[index++] = ch;
- else {
- ret = -EINVAL;
- goto out;
- }
- ret = get_user(ch, ubuf++);
- if (ret)
- goto out;
- read++;
- cnt--;
- }
- buffer[index] = 0;
+ if (ret < 0)
+ goto out;
+
+ read = ret;
+
+ buffer[copied] = 0;

/* we allow only one expression at a time */
ret = ftrace_set_func(array, &ftrace_graph_count, buffer);
if (ret)
goto out;

- file->f_pos += read;
+ (*ppos) += read;

ret = read;
out:
--
1.5.6.5
--


\
 
 \ /
  Last update: 2009-02-25 21:37    [W:0.093 / U:0.692 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site