lkml.org 
[lkml]   [2011]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/26] dynamic_debug: enlarge command/query write buffer
    Date
    From: Jim Cromie <jim.cromie@gmail.com>

    Current write buffer is 256 bytes, on stack. Allocate it off heap,
    and enlarge it to 4096 bytes, big enough for ~100 queries (at 40 bytes
    each), and error out if not. This should be enough for most uses, and
    others can be split into 2 writes.

    This makes it play nicely with:
    $> cat debug-queries-file > /dbg/dynamic_debug/control

    Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
    ---
    lib/dynamic_debug.c | 16 ++++++++++++----
    1 files changed, 12 insertions(+), 4 deletions(-)

    diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
    index 4bf27f3..2b3393f 100644
    --- a/lib/dynamic_debug.c
    +++ b/lib/dynamic_debug.c
    @@ -590,24 +590,32 @@ __setup("ddebug_query=", ddebug_setup_query);
    * File_ops->write method for <debugfs>/dynamic_debug/conrol. Gathers the
    * command text from userspace, parses and executes it.
    */
    +#define USER_BUF_PAGE 4095
    static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf,
    size_t len, loff_t *offp)
    {
    - char tmpbuf[256];
    + char *tmpbuf;
    int ret;

    if (len == 0)
    return 0;
    - /* we don't check *offp -- multiple writes() are allowed */
    - if (len > sizeof(tmpbuf)-1)
    + if (len > USER_BUF_PAGE - 1) {
    + pr_warn("expected <%d bytes into control \n", USER_BUF_PAGE);
    return -E2BIG;
    - if (copy_from_user(tmpbuf, ubuf, len))
    + }
    + tmpbuf = kmalloc(len + 1, GFP_KERNEL);
    + if (!tmpbuf)
    + return -ENOMEM;
    + if (copy_from_user(tmpbuf, ubuf, len)) {
    + kfree(tmpbuf);
    return -EFAULT;
    + }
    tmpbuf[len] = '\0';
    if (verbose)
    pr_info("read %d bytes from userspace\n", (int)len);

    ret = ddebug_exec_queries(tmpbuf);
    + kfree(tmpbuf);
    if (ret)
    return ret;

    --
    1.7.4.4


    \
     
     \ /
      Last update: 2011-09-21 23:59    [W:0.022 / U:179.700 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site