Loading arch/alpha/kernel/osf_sys.c +14 −37 Original line number Original line Diff line number Diff line Loading @@ -1178,46 +1178,23 @@ SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru) SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, struct rusage32 __user *, ur) struct rusage32 __user *, ur) { { struct rusage r; long ret, err; unsigned int status = 0; unsigned int status = 0; mm_segment_t old_fs; struct rusage r; long err = kernel_wait4(pid, &status, options, &r); if (err <= 0) return err; if (put_user(status, ustatus)) return -EFAULT; if (!ur) if (!ur) return sys_wait4(pid, ustatus, options, NULL); return err; if (put_tv32(&ur->ru_utime, &r.ru_utime)) old_fs = get_fs(); set_fs (KERNEL_DS); ret = sys_wait4(pid, (unsigned int __user *) &status, options, (struct rusage __user *) &r); set_fs (old_fs); if (!access_ok(VERIFY_WRITE, ur, sizeof(*ur))) return -EFAULT; return -EFAULT; if (put_tv32(&ur->ru_stime, &r.ru_stime)) err = 0; return -EFAULT; err |= put_user(status, ustatus); if (copy_to_user(&ur->ru_maxrss, &r.ru_maxrss, err |= __put_user(r.ru_utime.tv_sec, &ur->ru_utime.tv_sec); sizeof(struct rusage32) - offsetof(struct rusage32, ru_maxrss))) err |= __put_user(r.ru_utime.tv_usec, &ur->ru_utime.tv_usec); return -EFAULT; err |= __put_user(r.ru_stime.tv_sec, &ur->ru_stime.tv_sec); return err; err |= __put_user(r.ru_stime.tv_usec, &ur->ru_stime.tv_usec); err |= __put_user(r.ru_maxrss, &ur->ru_maxrss); err |= __put_user(r.ru_ixrss, &ur->ru_ixrss); err |= __put_user(r.ru_idrss, &ur->ru_idrss); err |= __put_user(r.ru_isrss, &ur->ru_isrss); err |= __put_user(r.ru_minflt, &ur->ru_minflt); err |= __put_user(r.ru_majflt, &ur->ru_majflt); err |= __put_user(r.ru_nswap, &ur->ru_nswap); err |= __put_user(r.ru_inblock, &ur->ru_inblock); err |= __put_user(r.ru_oublock, &ur->ru_oublock); err |= __put_user(r.ru_msgsnd, &ur->ru_msgsnd); err |= __put_user(r.ru_msgrcv, &ur->ru_msgrcv); err |= __put_user(r.ru_nsignals, &ur->ru_nsignals); err |= __put_user(r.ru_nvcsw, &ur->ru_nvcsw); err |= __put_user(r.ru_nivcsw, &ur->ru_nivcsw); return err ? err : ret; } } /* /* Loading arch/x86/include/asm/uaccess.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -703,7 +703,7 @@ extern struct movsl_mask { #define unsafe_put_user(x, ptr, err_label) \ #define unsafe_put_user(x, ptr, err_label) \ do { \ do { \ int __pu_err; \ int __pu_err; \ __put_user_size((x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \ __put_user_size((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \ if (unlikely(__pu_err)) goto err_label; \ if (unlikely(__pu_err)) goto err_label; \ } while (0) } while (0) Loading include/linux/resource.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,7 @@ struct task_struct; struct task_struct; int getrusage(struct task_struct *p, int who, struct rusage __user *ru); void getrusage(struct task_struct *p, int who, struct rusage *ru); int do_prlimit(struct task_struct *tsk, unsigned int resource, int do_prlimit(struct task_struct *tsk, unsigned int resource, struct rlimit *new_rlim, struct rlimit *old_rlim); struct rlimit *new_rlim, struct rlimit *old_rlim); Loading include/linux/sched/task.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <linux/sched.h> #include <linux/sched.h> struct task_struct; struct task_struct; struct rusage; union thread_union; union thread_union; /* /* Loading Loading @@ -74,6 +75,7 @@ extern long _do_fork(unsigned long, unsigned long, unsigned long, int __user *, extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); struct task_struct *fork_idle(int); struct task_struct *fork_idle(int); extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); extern long kernel_wait4(pid_t, int *, int, struct rusage *); extern void free_task(struct task_struct *tsk); extern void free_task(struct task_struct *tsk); Loading kernel/compat.c +0 −66 Original line number Original line Diff line number Diff line Loading @@ -543,72 +543,6 @@ int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru) return 0; return 0; } } COMPAT_SYSCALL_DEFINE4(wait4, compat_pid_t, pid, compat_uint_t __user *, stat_addr, int, options, struct compat_rusage __user *, ru) { if (!ru) { return sys_wait4(pid, stat_addr, options, NULL); } else { struct rusage r; int ret; unsigned int status; mm_segment_t old_fs = get_fs(); set_fs (KERNEL_DS); ret = sys_wait4(pid, (stat_addr ? (unsigned int __user *) &status : NULL), options, (struct rusage __user *) &r); set_fs (old_fs); if (ret > 0) { if (put_compat_rusage(&r, ru)) return -EFAULT; if (stat_addr && put_user(status, stat_addr)) return -EFAULT; } return ret; } } COMPAT_SYSCALL_DEFINE5(waitid, int, which, compat_pid_t, pid, struct compat_siginfo __user *, uinfo, int, options, struct compat_rusage __user *, uru) { siginfo_t info; struct rusage ru; long ret; mm_segment_t old_fs = get_fs(); memset(&info, 0, sizeof(info)); set_fs(KERNEL_DS); ret = sys_waitid(which, pid, (siginfo_t __user *)&info, options, uru ? (struct rusage __user *)&ru : NULL); set_fs(old_fs); if ((ret < 0) || (info.si_signo == 0)) return ret; if (uru) { /* sys_waitid() overwrites everything in ru */ if (COMPAT_USE_64BIT_TIME) ret = copy_to_user(uru, &ru, sizeof(ru)); else ret = put_compat_rusage(&ru, uru); if (ret) return -EFAULT; } BUG_ON(info.si_code & __SI_MASK); info.si_code |= __SI_CHLD; return copy_siginfo_to_user32(uinfo, &info); } static int compat_get_user_cpu_mask(compat_ulong_t __user *user_mask_ptr, static int compat_get_user_cpu_mask(compat_ulong_t __user *user_mask_ptr, unsigned len, struct cpumask *new_mask) unsigned len, struct cpumask *new_mask) { { Loading Loading
arch/alpha/kernel/osf_sys.c +14 −37 Original line number Original line Diff line number Diff line Loading @@ -1178,46 +1178,23 @@ SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru) SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, struct rusage32 __user *, ur) struct rusage32 __user *, ur) { { struct rusage r; long ret, err; unsigned int status = 0; unsigned int status = 0; mm_segment_t old_fs; struct rusage r; long err = kernel_wait4(pid, &status, options, &r); if (err <= 0) return err; if (put_user(status, ustatus)) return -EFAULT; if (!ur) if (!ur) return sys_wait4(pid, ustatus, options, NULL); return err; if (put_tv32(&ur->ru_utime, &r.ru_utime)) old_fs = get_fs(); set_fs (KERNEL_DS); ret = sys_wait4(pid, (unsigned int __user *) &status, options, (struct rusage __user *) &r); set_fs (old_fs); if (!access_ok(VERIFY_WRITE, ur, sizeof(*ur))) return -EFAULT; return -EFAULT; if (put_tv32(&ur->ru_stime, &r.ru_stime)) err = 0; return -EFAULT; err |= put_user(status, ustatus); if (copy_to_user(&ur->ru_maxrss, &r.ru_maxrss, err |= __put_user(r.ru_utime.tv_sec, &ur->ru_utime.tv_sec); sizeof(struct rusage32) - offsetof(struct rusage32, ru_maxrss))) err |= __put_user(r.ru_utime.tv_usec, &ur->ru_utime.tv_usec); return -EFAULT; err |= __put_user(r.ru_stime.tv_sec, &ur->ru_stime.tv_sec); return err; err |= __put_user(r.ru_stime.tv_usec, &ur->ru_stime.tv_usec); err |= __put_user(r.ru_maxrss, &ur->ru_maxrss); err |= __put_user(r.ru_ixrss, &ur->ru_ixrss); err |= __put_user(r.ru_idrss, &ur->ru_idrss); err |= __put_user(r.ru_isrss, &ur->ru_isrss); err |= __put_user(r.ru_minflt, &ur->ru_minflt); err |= __put_user(r.ru_majflt, &ur->ru_majflt); err |= __put_user(r.ru_nswap, &ur->ru_nswap); err |= __put_user(r.ru_inblock, &ur->ru_inblock); err |= __put_user(r.ru_oublock, &ur->ru_oublock); err |= __put_user(r.ru_msgsnd, &ur->ru_msgsnd); err |= __put_user(r.ru_msgrcv, &ur->ru_msgrcv); err |= __put_user(r.ru_nsignals, &ur->ru_nsignals); err |= __put_user(r.ru_nvcsw, &ur->ru_nvcsw); err |= __put_user(r.ru_nivcsw, &ur->ru_nivcsw); return err ? err : ret; } } /* /* Loading
arch/x86/include/asm/uaccess.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -703,7 +703,7 @@ extern struct movsl_mask { #define unsafe_put_user(x, ptr, err_label) \ #define unsafe_put_user(x, ptr, err_label) \ do { \ do { \ int __pu_err; \ int __pu_err; \ __put_user_size((x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \ __put_user_size((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \ if (unlikely(__pu_err)) goto err_label; \ if (unlikely(__pu_err)) goto err_label; \ } while (0) } while (0) Loading
include/linux/resource.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,7 @@ struct task_struct; struct task_struct; int getrusage(struct task_struct *p, int who, struct rusage __user *ru); void getrusage(struct task_struct *p, int who, struct rusage *ru); int do_prlimit(struct task_struct *tsk, unsigned int resource, int do_prlimit(struct task_struct *tsk, unsigned int resource, struct rlimit *new_rlim, struct rlimit *old_rlim); struct rlimit *new_rlim, struct rlimit *old_rlim); Loading
include/linux/sched/task.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <linux/sched.h> #include <linux/sched.h> struct task_struct; struct task_struct; struct rusage; union thread_union; union thread_union; /* /* Loading Loading @@ -74,6 +75,7 @@ extern long _do_fork(unsigned long, unsigned long, unsigned long, int __user *, extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); struct task_struct *fork_idle(int); struct task_struct *fork_idle(int); extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); extern long kernel_wait4(pid_t, int *, int, struct rusage *); extern void free_task(struct task_struct *tsk); extern void free_task(struct task_struct *tsk); Loading
kernel/compat.c +0 −66 Original line number Original line Diff line number Diff line Loading @@ -543,72 +543,6 @@ int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru) return 0; return 0; } } COMPAT_SYSCALL_DEFINE4(wait4, compat_pid_t, pid, compat_uint_t __user *, stat_addr, int, options, struct compat_rusage __user *, ru) { if (!ru) { return sys_wait4(pid, stat_addr, options, NULL); } else { struct rusage r; int ret; unsigned int status; mm_segment_t old_fs = get_fs(); set_fs (KERNEL_DS); ret = sys_wait4(pid, (stat_addr ? (unsigned int __user *) &status : NULL), options, (struct rusage __user *) &r); set_fs (old_fs); if (ret > 0) { if (put_compat_rusage(&r, ru)) return -EFAULT; if (stat_addr && put_user(status, stat_addr)) return -EFAULT; } return ret; } } COMPAT_SYSCALL_DEFINE5(waitid, int, which, compat_pid_t, pid, struct compat_siginfo __user *, uinfo, int, options, struct compat_rusage __user *, uru) { siginfo_t info; struct rusage ru; long ret; mm_segment_t old_fs = get_fs(); memset(&info, 0, sizeof(info)); set_fs(KERNEL_DS); ret = sys_waitid(which, pid, (siginfo_t __user *)&info, options, uru ? (struct rusage __user *)&ru : NULL); set_fs(old_fs); if ((ret < 0) || (info.si_signo == 0)) return ret; if (uru) { /* sys_waitid() overwrites everything in ru */ if (COMPAT_USE_64BIT_TIME) ret = copy_to_user(uru, &ru, sizeof(ru)); else ret = put_compat_rusage(&ru, uru); if (ret) return -EFAULT; } BUG_ON(info.si_code & __SI_MASK); info.si_code |= __SI_CHLD; return copy_siginfo_to_user32(uinfo, &info); } static int compat_get_user_cpu_mask(compat_ulong_t __user *user_mask_ptr, static int compat_get_user_cpu_mask(compat_ulong_t __user *user_mask_ptr, unsigned len, struct cpumask *new_mask) unsigned len, struct cpumask *new_mask) { { Loading