lkml.org 
[lkml]   [2009]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v2 5/5] tracing: convert ftrace_graph_write to use copy_strtok_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_strtok_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 4ecce15..6204b3c 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_strtok_from_user(buffer, ubuf, FTRACE_BUFF_MAX,
    + cnt, &copied, 1, SPACES);

    - /* 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-26 06:43    [W:0.021 / U:31.252 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site