lkml.org 
[lkml]   [2020]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] compat sysinfo(2): don't bother with field-by-field copyout
    Date
    From: Al Viro <viro@zeniv.linux.org.uk>

    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    ---
    kernel/sys.c | 33 +++++++++++++++++----------------
    1 file changed, 17 insertions(+), 16 deletions(-)

    diff --git a/kernel/sys.c b/kernel/sys.c
    index d325f3ab624a..b4a0324a0699 100644
    --- a/kernel/sys.c
    +++ b/kernel/sys.c
    @@ -2634,6 +2634,7 @@ struct compat_sysinfo {
    COMPAT_SYSCALL_DEFINE1(sysinfo, struct compat_sysinfo __user *, info)
    {
    struct sysinfo s;
    + struct compat_sysinfo s_32;

    do_sysinfo(&s);

    @@ -2658,23 +2659,23 @@ COMPAT_SYSCALL_DEFINE1(sysinfo, struct compat_sysinfo __user *, info)
    s.freehigh >>= bitcount;
    }

    - if (!access_ok(info, sizeof(struct compat_sysinfo)) ||
    - __put_user(s.uptime, &info->uptime) ||
    - __put_user(s.loads[0], &info->loads[0]) ||
    - __put_user(s.loads[1], &info->loads[1]) ||
    - __put_user(s.loads[2], &info->loads[2]) ||
    - __put_user(s.totalram, &info->totalram) ||
    - __put_user(s.freeram, &info->freeram) ||
    - __put_user(s.sharedram, &info->sharedram) ||
    - __put_user(s.bufferram, &info->bufferram) ||
    - __put_user(s.totalswap, &info->totalswap) ||
    - __put_user(s.freeswap, &info->freeswap) ||
    - __put_user(s.procs, &info->procs) ||
    - __put_user(s.totalhigh, &info->totalhigh) ||
    - __put_user(s.freehigh, &info->freehigh) ||
    - __put_user(s.mem_unit, &info->mem_unit))
    + memset(&s_32, 0, sizeof(s_32));
    + s_32.uptime = s.uptime;
    + s_32.loads[0] = s.loads[0];
    + s_32.loads[1] = s.loads[1];
    + s_32.loads[2] = s.loads[2];
    + s_32.totalram = s.totalram;
    + s_32.freeram = s.freeram;
    + s_32.sharedram = s.sharedram;
    + s_32.bufferram = s.bufferram;
    + s_32.totalswap = s.totalswap;
    + s_32.freeswap = s.freeswap;
    + s_32.procs = s.procs;
    + s_32.totalhigh = s.totalhigh;
    + s_32.freehigh = s.freehigh;
    + s_32.mem_unit = s.mem_unit;
    + if (copy_to_user(info, &s_32, sizeof(s_32)))
    return -EFAULT;
    -
    return 0;
    }
    #endif /* CONFIG_COMPAT */
    --
    2.11.0
    \
     
     \ /
      Last update: 2020-05-29 02:12    [W:3.011 / U:0.820 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site