lkml.org 
[lkml]   [2018]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/5] proc: more "unsigned int" in /proc/*/cmdline
    access_remote_vm() doesn't return negative errors, it returns number of
    bytes read/written (0 if error occurs). This allows to delete some
    comparisons which never trigger.

    Reuse "nr_read" variable while I'm at it.

    Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
    ---

    fs/proc/base.c | 29 ++++++++++++-----------------
    1 file changed, 12 insertions(+), 17 deletions(-)

    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -280,9 +280,10 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
    * Inherently racy -- command line shares address space
    * with code and data.
    */
    - rv = access_remote_vm(mm, arg_end - 1, &c, 1, 0);
    - if (rv <= 0)
    + if (access_remote_vm(mm, arg_end - 1, &c, 1, 0) != 1) {
    + rv = 0;
    goto out_free_page;
    + }

    rv = 0;

    @@ -294,14 +295,11 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
    p = arg_start + *pos;
    len = len1 - *pos;
    while (count > 0 && len > 0) {
    - unsigned int _count;
    - int nr_read;
    -
    - _count = min3(count, len, PAGE_SIZE);
    - nr_read = access_remote_vm(mm, p, page, _count, 0);
    - if (nr_read < 0)
    - rv = nr_read;
    - if (nr_read <= 0)
    + unsigned int nr_read;
    +
    + nr_read = min3(count, len, PAGE_SIZE);
    + nr_read = access_remote_vm(mm, p, page, nr_read, 0);
    + if (nr_read == 0)
    goto out_free_page;

    if (copy_to_user(buf, page, nr_read)) {
    @@ -339,15 +337,12 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
    p = cmdline[i].p + pos1;
    len = cmdline[i].len - pos1;
    while (count > 0 && len > 0) {
    - unsigned int _count, l;
    - int nr_read;
    + unsigned int nr_read, l;
    bool final;

    - _count = min3(count, len, PAGE_SIZE);
    - nr_read = access_remote_vm(mm, p, page, _count, 0);
    - if (nr_read < 0)
    - rv = nr_read;
    - if (nr_read <= 0)
    + nr_read = min3(count, len, PAGE_SIZE);
    + nr_read = access_remote_vm(mm, p, page, nr_read, 0);
    + if (nr_read == 0)
    goto out_free_page;

    /*
    \
     
     \ /
      Last update: 2018-02-21 20:27    [W:4.693 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site