io_uring: make cached_cq_overflow non atomic_t
[linux-2.6-microblaze.git] / mm / process_vm_access.c
index 29c0520..fd12da8 100644 (file)
 #include <linux/slab.h>
 #include <linux/syscalls.h>
 
-#ifdef CONFIG_COMPAT
-#include <linux/compat.h>
-#endif
-
 /**
  * process_vm_rw_pages - read/write pages from task specified
  * @pages: array of pointers to pages we want to copy
@@ -276,20 +272,17 @@ static ssize_t process_vm_rw(pid_t pid,
        if (rc < 0)
                return rc;
        if (!iov_iter_count(&iter))
-               goto free_iovecs;
-
-       rc = rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, UIO_FASTIOV,
-                                  iovstack_r, &iov_r);
-       if (rc <= 0)
-               goto free_iovecs;
-
+               goto free_iov_l;
+       iov_r = iovec_from_user(rvec, riovcnt, UIO_FASTIOV, iovstack_r, false);
+       if (IS_ERR(iov_r)) {
+               rc = PTR_ERR(iov_r);
+               goto free_iov_l;
+       }
        rc = process_vm_rw_core(pid, &iter, iov_r, riovcnt, flags, vm_write);
-
-free_iovecs:
        if (iov_r != iovstack_r)
                kfree(iov_r);
+free_iov_l:
        kfree(iov_l);
-
        return rc;
 }
 
@@ -307,68 +300,3 @@ SYSCALL_DEFINE6(process_vm_writev, pid_t, pid,
 {
        return process_vm_rw(pid, lvec, liovcnt, rvec, riovcnt, flags, 1);
 }
-
-#ifdef CONFIG_COMPAT
-
-static ssize_t
-compat_process_vm_rw(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, int vm_write)
-{
-       struct iovec iovstack_l[UIO_FASTIOV];
-       struct iovec iovstack_r[UIO_FASTIOV];
-       struct iovec *iov_l = iovstack_l;
-       struct iovec *iov_r = iovstack_r;
-       struct iov_iter iter;
-       ssize_t rc = -EFAULT;
-       int dir = vm_write ? WRITE : READ;
-
-       if (flags != 0)
-               return -EINVAL;
-
-       rc = compat_import_iovec(dir, lvec, liovcnt, UIO_FASTIOV, &iov_l, &iter);
-       if (rc < 0)
-               return rc;
-       if (!iov_iter_count(&iter))
-               goto free_iovecs;
-       rc = compat_rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt,
-                                         UIO_FASTIOV, iovstack_r,
-                                         &iov_r);
-       if (rc <= 0)
-               goto free_iovecs;
-
-       rc = process_vm_rw_core(pid, &iter, iov_r, riovcnt, flags, vm_write);
-
-free_iovecs:
-       if (iov_r != iovstack_r)
-               kfree(iov_r);
-       kfree(iov_l);
-       return rc;
-}
-
-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);
-}
-
-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);
-}
-
-#endif