xtensa: add missing __user annotations to __{get,put}_user_check
authorMax Filippov <jcmvbkbc@gmail.com>
Fri, 22 May 2020 17:54:32 +0000 (10:54 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Fri, 22 May 2020 21:32:13 +0000 (14:32 -0700)
__get_user_check and __put_user_check use temporary pointer but don't
mark it as __user, resulting in sparse warnings:

  sparse: warning: incorrect type in initializer (different address spaces)
  sparse:    expected long *__pu_addr
  sparse:    got long [noderef] <asn:1> *ret

  sparse: warning: incorrect type in argument 1 (different address spaces)
  sparse:    expected void [noderef] <asn:1> *to
  sparse:    got long *__pu_addr

Add __user annotation to temporary pointer in __get_user_check and
__put_user_check.

Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/include/asm/uaccess.h

index 47b7702..754a7c9 100644 (file)
@@ -84,7 +84,7 @@ extern long __put_user_bad(void);
 #define __put_user_check(x, ptr, size)                                 \
 ({                                                                     \
        long __pu_err = -EFAULT;                                        \
-       __typeof__(*(ptr)) *__pu_addr = (ptr);                          \
+       __typeof__(*(ptr)) __user *__pu_addr = (ptr);                   \
        if (access_ok(__pu_addr, size))                 \
                __put_user_size((x), __pu_addr, (size), __pu_err);      \
        __pu_err;                                                       \
@@ -180,7 +180,7 @@ __asm__ __volatile__(                                       \
 #define __get_user_check(x, ptr, size)                                 \
 ({                                                                     \
        long __gu_err = -EFAULT;                                        \
-       const __typeof__(*(ptr)) *__gu_addr = (ptr);                    \
+       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);             \
        if (access_ok(__gu_addr, size))                                 \
                __get_user_size((x), __gu_addr, (size), __gu_err);      \
        else                                                            \