OSDN Git Service

xtensa: switch to providing csum_and_copy_from_user()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Feb 2020 18:12:08 +0000 (13:12 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 29 May 2020 20:11:49 +0000 (16:11 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/xtensa/include/asm/checksum.h

index 8b68717..d8292cc 100644 (file)
@@ -44,8 +44,6 @@ asmlinkage __wsum csum_partial_copy_generic(const void *src, void *dst,
 /*
  *     Note: when you get a NULL pointer exception here this means someone
  *     passed in an incorrect kernel address to one of these functions.
- *
- *     If you use these functions directly please don't forget the access_ok().
  */
 static inline
 __wsum csum_partial_copy_nocheck(const void *src, void *dst,
@@ -54,12 +52,17 @@ __wsum csum_partial_copy_nocheck(const void *src, void *dst,
        return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL);
 }
 
+#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER
 static inline
-__wsum csum_partial_copy_from_user(const void __user *src, void *dst,
+__wsum csum_and_copy_from_user(const void __user *src, void *dst,
                                   int len, __wsum sum, int *err_ptr)
 {
-       return csum_partial_copy_generic((__force const void *)src, dst,
+       if (access_ok(dst, len))
+               return csum_partial_copy_generic((__force const void *)src, dst,
                                        len, sum, err_ptr, NULL);
+       if (len)
+               *err_ptr = -EFAULT;
+       return sum;
 }
 
 /*