lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 405/452] xtensa/simdisk: fix proc_read_simdisk()
    Date
    From: Yi Yang <yiyang13@huawei.com>

    commit b011946d039d66bbc7102137e98cc67e1356aa87 upstream.

    The commit a69755b18774 ("xtensa simdisk: switch to proc_create_data()")
    split read operation into two parts, first retrieving the path when it's
    non-null and second retrieving the trailing '\n'. However when the path
    is non-null the first simple_read_from_buffer updates ppos, and the
    second simple_read_from_buffer returns 0 if ppos is greater than 1 (i.e.
    almost always). As a result reading from that proc file is almost always
    empty.

    Fix it by making a temporary copy of the path with the trailing '\n' and
    using simple_read_from_buffer on that copy.

    Cc: stable@vger.kernel.org
    Fixes: a69755b18774 ("xtensa simdisk: switch to proc_create_data()")
    Signed-off-by: Yi Yang <yiyang13@huawei.com>
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/xtensa/platforms/iss/simdisk.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    --- a/arch/xtensa/platforms/iss/simdisk.c
    +++ b/arch/xtensa/platforms/iss/simdisk.c
    @@ -213,12 +213,18 @@ static ssize_t proc_read_simdisk(struct
    struct simdisk *dev = PDE_DATA(file_inode(file));
    const char *s = dev->filename;
    if (s) {
    - ssize_t n = simple_read_from_buffer(buf, size, ppos,
    - s, strlen(s));
    - if (n < 0)
    - return n;
    - buf += n;
    - size -= n;
    + ssize_t len = strlen(s);
    + char *temp = kmalloc(len + 2, GFP_KERNEL);
    +
    + if (!temp)
    + return -ENOMEM;
    +
    + len = scnprintf(temp, len + 2, "%s\n", s);
    + len = simple_read_from_buffer(buf, size, ppos,
    + temp, len);
    +
    + kfree(temp);
    + return len;
    }
    return simple_read_from_buffer(buf, size, ppos, "\n", 1);
    }

    \
     
     \ /
      Last update: 2022-06-07 20:08    [W:4.845 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site