mm/compat: convert to COMPAT_SYSCALL_DEFINE with changing parameter types
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 4 Mar 2014 16:18:23 +0000 (17:18 +0100)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 6 Mar 2014 15:30:47 +0000 (16:30 +0100)
In order to allow the COMPAT_SYSCALL_DEFINE macro generate code that
performs proper zero and sign extension convert all 64 bit parameters
to their corresponding 32 bit compat counterparts.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
include/linux/compat.h
kernel/compat.c
mm/process_vm_access.c

index ef4834c..7c76562 100644 (file)
@@ -469,7 +469,7 @@ asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
 asmlinkage long compat_sys_timerfd_gettime(int ufd,
                                   struct compat_itimerspec __user *otmr);
 
-asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
+asmlinkage long compat_sys_move_pages(pid_t pid, compat_ulong_t nr_pages,
                                      __u32 __user *pages,
                                      const int __user *nodes,
                                      int __user *status,
@@ -674,12 +674,12 @@ extern void __user *compat_alloc_user_space(unsigned long len);
 
 asmlinkage ssize_t compat_sys_process_vm_readv(compat_pid_t pid,
                const struct compat_iovec __user *lvec,
-               unsigned long liovcnt, const struct compat_iovec __user *rvec,
-               unsigned long riovcnt, unsigned long flags);
+               compat_ulong_t liovcnt, const struct compat_iovec __user *rvec,
+               compat_ulong_t riovcnt, compat_ulong_t flags);
 asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid,
                const struct compat_iovec __user *lvec,
-               unsigned long liovcnt, const struct compat_iovec __user *rvec,
-               unsigned long riovcnt, unsigned long flags);
+               compat_ulong_t liovcnt, const struct compat_iovec __user *rvec,
+               compat_ulong_t riovcnt, compat_ulong_t flags);
 
 asmlinkage long compat_sys_sendfile(int out_fd, int in_fd,
                                    compat_off_t __user *offset, compat_size_t count);
index 2622011..488ff8c 100644 (file)
@@ -1065,11 +1065,11 @@ COMPAT_SYSCALL_DEFINE1(adjtimex, struct compat_timex __user *, utp)
 }
 
 #ifdef CONFIG_NUMA
-asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages,
-               compat_uptr_t __user *pages32,
-               const int __user *nodes,
-               int __user *status,
-               int flags)
+COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages,
+                      compat_uptr_t __user *, pages32,
+                      const int __user *, nodes,
+                      int __user *, status,
+                      int, flags)
 {
        const void __user * __user *pages;
        int i;
index fd26d04..3c5cf68 100644 (file)
@@ -456,25 +456,23 @@ free_iovecs:
        return rc;
 }
 
-asmlinkage ssize_t
-compat_sys_process_vm_readv(compat_pid_t pid,
-                           const struct compat_iovec __user *lvec,
-                           unsigned long liovcnt,
-                           const struct compat_iovec __user *rvec,
-                           unsigned long riovcnt,
-                           unsigned long flags)
+COMPAT_SYSCALL_DEFINE6(process_vm_readv, compat_pid_t, pid,
+                      const struct compat_iovec __user *, lvec,
+                      compat_ulong_t, liovcnt,
+                      const struct compat_iovec __user *, rvec,
+                      compat_ulong_t, riovcnt,
+                      compat_ulong_t, flags)
 {
        return compat_process_vm_rw(pid, lvec, liovcnt, rvec,
                                    riovcnt, flags, 0);
 }
 
-asmlinkage ssize_t
-compat_sys_process_vm_writev(compat_pid_t pid,
-                            const struct compat_iovec __user *lvec,
-                            unsigned long liovcnt,
-                            const struct compat_iovec __user *rvec,
-                            unsigned long riovcnt,
-                            unsigned long flags)
+COMPAT_SYSCALL_DEFINE6(process_vm_writev, compat_pid_t, pid,
+                      const struct compat_iovec __user *, lvec,
+                      compat_ulong_t, liovcnt,
+                      const struct compat_iovec __user *, rvec,
+                      compat_ulong_t, riovcnt,
+                      compat_ulong_t, flags)
 {
        return compat_process_vm_rw(pid, lvec, liovcnt, rvec,
                                    riovcnt, flags, 1);