* mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces)
@ 2025-06-07 11:43 kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-06-07 11:43 UTC (permalink / raw)
To: Clément Léger
Cc: oe-kbuild-all, linux-kernel, Palmer Dabbelt, Alexandre Ghiti
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: bdc7f8c5adad50dad2ec762e317f8b212f5782ac
commit: ca1a66cdd685030738cf077e3955fdedfe39fbb9 riscv: uaccess: do not do misaligned accesses in get/put_user()
date: 2 days ago
config: riscv-randconfig-r133-20250607 (https://download.01.org/0day-ci/archive/20250607/202506071929.Ane6iZuz-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 12.4.0
reproduce: (https://download.01.org/0day-ci/archive/20250607/202506071929.Ane6iZuz-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506071929.Ane6iZuz-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned long long [usertype] * @@
mm/maccess.c:41:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:41:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:43:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned int [usertype] * @@
mm/maccess.c:43:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:43:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:45:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned short [usertype] * @@
mm/maccess.c:45:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:45:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:46:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:46:9: sparse: expected void const [noderef] __user *from
mm/maccess.c:46:9: sparse: got unsigned char [usertype] *
>> mm/maccess.c:73:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned long long [usertype] * @@
mm/maccess.c:73:17: sparse: expected void [noderef] __user *to
mm/maccess.c:73:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:75:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned int [usertype] * @@
mm/maccess.c:75:17: sparse: expected void [noderef] __user *to
mm/maccess.c:75:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:77:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned short [usertype] * @@
mm/maccess.c:77:17: sparse: expected void [noderef] __user *to
mm/maccess.c:77:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:78:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned char [usertype] * @@
mm/maccess.c:78:9: sparse: expected void [noderef] __user *to
mm/maccess.c:78:9: sparse: got unsigned char [usertype] *
mm/maccess.c:98:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:98:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:98:17: sparse: got unsigned char [usertype] *
vim +41 mm/maccess.c
eab0c6089b6897 Christoph Hellwig 2020-06-08 15
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 16 /*
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 17 * The below only uses kmsan_check_memory() to ensure uninitialized kernel
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 18 * memory isn't leaked.
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 19 */
fe557319aa06c2 Christoph Hellwig 2020-06-17 20 #define copy_from_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 21 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 22 __get_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 23 kmsan_check_memory(src, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 24 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 25 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 26 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 27 }
b58294ead14cde Christoph Hellwig 2020-06-08 28
fe557319aa06c2 Christoph Hellwig 2020-06-17 29 long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 30 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 31 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 32
2423de2e6f4d86 Arnd Bergmann 2021-08-11 33 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 34 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 35
fe557319aa06c2 Christoph Hellwig 2020-06-17 36 if (!copy_from_kernel_nofault_allowed(src, size))
2a71e81d321987 Christoph Hellwig 2020-06-08 37 return -ERANGE;
b58294ead14cde Christoph Hellwig 2020-06-08 38
b58294ead14cde Christoph Hellwig 2020-06-08 39 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 40 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @41 copy_from_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 42 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @43 copy_from_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 44 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @45 copy_from_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @46 copy_from_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 47 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 48 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 49 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 50 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 51 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 52 }
fe557319aa06c2 Christoph Hellwig 2020-06-17 53 EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 54
fe557319aa06c2 Christoph Hellwig 2020-06-17 55 #define copy_to_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 56 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 57 __put_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 58 instrument_write(dst, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 59 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 60 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 61 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 62 }
b58294ead14cde Christoph Hellwig 2020-06-08 63
fe557319aa06c2 Christoph Hellwig 2020-06-17 64 long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 65 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 66 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 67
2423de2e6f4d86 Arnd Bergmann 2021-08-11 68 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 69 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 70
b58294ead14cde Christoph Hellwig 2020-06-08 71 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 72 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @73 copy_to_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 74 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @75 copy_to_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 76 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @77 copy_to_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @78 copy_to_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 79 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 80 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 81 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 82 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 83 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 84 }
ca79a00bb9a899 Sabyrzhan Tasbolatov 2024-10-16 85 EXPORT_SYMBOL_GPL(copy_to_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 86
:::::: The code at line 41 was first introduced by commit
:::::: fe557319aa06c23cffc9346000f119547e0f289a maccess: rename probe_kernel_{read,write} to copy_{from,to}_kernel_nofault
:::::: TO: Christoph Hellwig <hch@lst.de>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
* mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces)
@ 2025-07-14 12:48 kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-07-14 12:48 UTC (permalink / raw)
To: Clément Léger
Cc: oe-kbuild-all, linux-kernel, Palmer Dabbelt, Alexandre Ghiti
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 347e9f5043c89695b01e66b3ed111755afcf1911
commit: ca1a66cdd685030738cf077e3955fdedfe39fbb9 riscv: uaccess: do not do misaligned accesses in get/put_user()
date: 6 weeks ago
config: riscv-randconfig-r121-20250714 (https://download.01.org/0day-ci/archive/20250714/202507142033.p5lg4D5Q-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 8.5.0
reproduce: (https://download.01.org/0day-ci/archive/20250714/202507142033.p5lg4D5Q-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507142033.p5lg4D5Q-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned long long [usertype] * @@
mm/maccess.c:41:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:41:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:43:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned int [usertype] * @@
mm/maccess.c:43:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:43:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:45:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned short [usertype] * @@
mm/maccess.c:45:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:45:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:46:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:46:9: sparse: expected void const [noderef] __user *from
mm/maccess.c:46:9: sparse: got unsigned char [usertype] *
>> mm/maccess.c:73:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned long long [usertype] * @@
mm/maccess.c:73:17: sparse: expected void [noderef] __user *to
mm/maccess.c:73:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:75:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned int [usertype] * @@
mm/maccess.c:75:17: sparse: expected void [noderef] __user *to
mm/maccess.c:75:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:77:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned short [usertype] * @@
mm/maccess.c:77:17: sparse: expected void [noderef] __user *to
mm/maccess.c:77:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:78:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned char [usertype] * @@
mm/maccess.c:78:9: sparse: expected void [noderef] __user *to
mm/maccess.c:78:9: sparse: got unsigned char [usertype] *
mm/maccess.c:98:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:98:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:98:17: sparse: got unsigned char [usertype] *
vim +41 mm/maccess.c
eab0c6089b6897 Christoph Hellwig 2020-06-08 15
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 16 /*
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 17 * The below only uses kmsan_check_memory() to ensure uninitialized kernel
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 18 * memory isn't leaked.
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 19 */
fe557319aa06c2 Christoph Hellwig 2020-06-17 20 #define copy_from_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 21 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 22 __get_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 23 kmsan_check_memory(src, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 24 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 25 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 26 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 27 }
b58294ead14cde Christoph Hellwig 2020-06-08 28
fe557319aa06c2 Christoph Hellwig 2020-06-17 29 long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 30 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 31 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 32
2423de2e6f4d86 Arnd Bergmann 2021-08-11 33 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 34 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 35
fe557319aa06c2 Christoph Hellwig 2020-06-17 36 if (!copy_from_kernel_nofault_allowed(src, size))
2a71e81d321987 Christoph Hellwig 2020-06-08 37 return -ERANGE;
b58294ead14cde Christoph Hellwig 2020-06-08 38
b58294ead14cde Christoph Hellwig 2020-06-08 39 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 40 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @41 copy_from_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 42 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @43 copy_from_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 44 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @45 copy_from_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @46 copy_from_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 47 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 48 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 49 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 50 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 51 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 52 }
fe557319aa06c2 Christoph Hellwig 2020-06-17 53 EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 54
fe557319aa06c2 Christoph Hellwig 2020-06-17 55 #define copy_to_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 56 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 57 __put_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 58 instrument_write(dst, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 59 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 60 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 61 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 62 }
b58294ead14cde Christoph Hellwig 2020-06-08 63
fe557319aa06c2 Christoph Hellwig 2020-06-17 64 long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 65 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 66 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 67
2423de2e6f4d86 Arnd Bergmann 2021-08-11 68 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 69 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 70
b58294ead14cde Christoph Hellwig 2020-06-08 71 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 72 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @73 copy_to_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 74 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @75 copy_to_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 76 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @77 copy_to_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @78 copy_to_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 79 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 80 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 81 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 82 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 83 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 84 }
ca79a00bb9a899 Sabyrzhan Tasbolatov 2024-10-16 85 EXPORT_SYMBOL_GPL(copy_to_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 86
:::::: The code at line 41 was first introduced by commit
:::::: fe557319aa06c23cffc9346000f119547e0f289a maccess: rename probe_kernel_{read,write} to copy_{from,to}_kernel_nofault
:::::: TO: Christoph Hellwig <hch@lst.de>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
* mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces)
@ 2025-08-16 9:28 kernel test robot
2025-08-16 16:19 ` Al Viro
0 siblings, 1 reply; 5+ messages in thread
From: kernel test robot @ 2025-08-16 9:28 UTC (permalink / raw)
To: Clément Léger
Cc: oe-kbuild-all, linux-kernel, Palmer Dabbelt, Alexandre Ghiti
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: dfd4b508c8c6106083698a0dd5e35aecc7c48725
commit: ca1a66cdd685030738cf077e3955fdedfe39fbb9 riscv: uaccess: do not do misaligned accesses in get/put_user()
date: 2 months ago
config: riscv-randconfig-r122-20250816 (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 93d24b6b7b148c47a2fa228a4ef31524fa1d9f3f)
reproduce: (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508161713.RWu30Lv1-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
WARNING: invalid argument to '-march': '_zacas_zabha'
>> mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned long long [usertype] * @@
mm/maccess.c:41:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:41:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:43:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned int [usertype] * @@
mm/maccess.c:43:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:43:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:45:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned short [usertype] * @@
mm/maccess.c:45:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:45:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:46:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:46:9: sparse: expected void const [noderef] __user *from
mm/maccess.c:46:9: sparse: got unsigned char [usertype] *
>> mm/maccess.c:73:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned long long [usertype] * @@
mm/maccess.c:73:17: sparse: expected void [noderef] __user *to
mm/maccess.c:73:17: sparse: got unsigned long long [usertype] *
>> mm/maccess.c:75:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned int [usertype] * @@
mm/maccess.c:75:17: sparse: expected void [noderef] __user *to
mm/maccess.c:75:17: sparse: got unsigned int [usertype] *
>> mm/maccess.c:77:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned short [usertype] * @@
mm/maccess.c:77:17: sparse: expected void [noderef] __user *to
mm/maccess.c:77:17: sparse: got unsigned short [usertype] *
>> mm/maccess.c:78:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned char [usertype] * @@
mm/maccess.c:78:9: sparse: expected void [noderef] __user *to
mm/maccess.c:78:9: sparse: got unsigned char [usertype] *
mm/maccess.c:98:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
mm/maccess.c:98:17: sparse: expected void const [noderef] __user *from
mm/maccess.c:98:17: sparse: got unsigned char [usertype] *
vim +41 mm/maccess.c
eab0c6089b6897 Christoph Hellwig 2020-06-08 15
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 16 /*
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 17 * The below only uses kmsan_check_memory() to ensure uninitialized kernel
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 18 * memory isn't leaked.
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 19 */
fe557319aa06c2 Christoph Hellwig 2020-06-17 20 #define copy_from_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 21 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 22 __get_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 23 kmsan_check_memory(src, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 24 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 25 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 26 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 27 }
b58294ead14cde Christoph Hellwig 2020-06-08 28
fe557319aa06c2 Christoph Hellwig 2020-06-17 29 long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 30 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 31 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 32
2423de2e6f4d86 Arnd Bergmann 2021-08-11 33 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 34 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 35
fe557319aa06c2 Christoph Hellwig 2020-06-17 36 if (!copy_from_kernel_nofault_allowed(src, size))
2a71e81d321987 Christoph Hellwig 2020-06-08 37 return -ERANGE;
b58294ead14cde Christoph Hellwig 2020-06-08 38
b58294ead14cde Christoph Hellwig 2020-06-08 39 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 40 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @41 copy_from_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 42 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @43 copy_from_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 44 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @45 copy_from_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @46 copy_from_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 47 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 48 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 49 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 50 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 51 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 52 }
fe557319aa06c2 Christoph Hellwig 2020-06-17 53 EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 54
fe557319aa06c2 Christoph Hellwig 2020-06-17 55 #define copy_to_kernel_nofault_loop(dst, src, len, type, err_label) \
b58294ead14cde Christoph Hellwig 2020-06-08 56 while (len >= sizeof(type)) { \
b58294ead14cde Christoph Hellwig 2020-06-08 57 __put_kernel_nofault(dst, src, type, err_label); \
e4137f08816bbf Sabyrzhan Tasbolatov 2024-10-11 58 instrument_write(dst, sizeof(type)); \
b58294ead14cde Christoph Hellwig 2020-06-08 59 dst += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 60 src += sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 61 len -= sizeof(type); \
b58294ead14cde Christoph Hellwig 2020-06-08 62 }
b58294ead14cde Christoph Hellwig 2020-06-08 63
fe557319aa06c2 Christoph Hellwig 2020-06-17 64 long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
b58294ead14cde Christoph Hellwig 2020-06-08 65 {
2423de2e6f4d86 Arnd Bergmann 2021-08-11 66 unsigned long align = 0;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 67
2423de2e6f4d86 Arnd Bergmann 2021-08-11 68 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
2423de2e6f4d86 Arnd Bergmann 2021-08-11 69 align = (unsigned long)dst | (unsigned long)src;
2423de2e6f4d86 Arnd Bergmann 2021-08-11 70
b58294ead14cde Christoph Hellwig 2020-06-08 71 pagefault_disable();
2423de2e6f4d86 Arnd Bergmann 2021-08-11 72 if (!(align & 7))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @73 copy_to_kernel_nofault_loop(dst, src, size, u64, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 74 if (!(align & 3))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @75 copy_to_kernel_nofault_loop(dst, src, size, u32, Efault);
2423de2e6f4d86 Arnd Bergmann 2021-08-11 76 if (!(align & 1))
fe557319aa06c2 Christoph Hellwig 2020-06-17 @77 copy_to_kernel_nofault_loop(dst, src, size, u16, Efault);
fe557319aa06c2 Christoph Hellwig 2020-06-17 @78 copy_to_kernel_nofault_loop(dst, src, size, u8, Efault);
b58294ead14cde Christoph Hellwig 2020-06-08 79 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 80 return 0;
b58294ead14cde Christoph Hellwig 2020-06-08 81 Efault:
b58294ead14cde Christoph Hellwig 2020-06-08 82 pagefault_enable();
b58294ead14cde Christoph Hellwig 2020-06-08 83 return -EFAULT;
b58294ead14cde Christoph Hellwig 2020-06-08 84 }
ca79a00bb9a899 Sabyrzhan Tasbolatov 2024-10-16 85 EXPORT_SYMBOL_GPL(copy_to_kernel_nofault);
b58294ead14cde Christoph Hellwig 2020-06-08 86
:::::: The code at line 41 was first introduced by commit
:::::: fe557319aa06c23cffc9346000f119547e0f289a maccess: rename probe_kernel_{read,write} to copy_{from,to}_kernel_nofault
:::::: TO: Christoph Hellwig <hch@lst.de>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces)
2025-08-16 9:28 mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) kernel test robot
@ 2025-08-16 16:19 ` Al Viro
2025-08-16 16:54 ` Palmer Dabbelt
0 siblings, 1 reply; 5+ messages in thread
From: Al Viro @ 2025-08-16 16:19 UTC (permalink / raw)
To: kernel test robot
Cc: Clément Léger, oe-kbuild-all, linux-kernel,
Palmer Dabbelt, Alexandre Ghiti
On Sat, Aug 16, 2025 at 05:28:29PM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: dfd4b508c8c6106083698a0dd5e35aecc7c48725
> commit: ca1a66cdd685030738cf077e3955fdedfe39fbb9 riscv: uaccess: do not do misaligned accesses in get/put_user()
> date: 2 months ago
> config: riscv-randconfig-r122-20250816 (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/config)
> compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 93d24b6b7b148c47a2fa228a4ef31524fa1d9f3f)
> reproduce: (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202508161713.RWu30Lv1-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
> WARNING: invalid argument to '-march': '_zacas_zabha'
> >> mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned long long [usertype] * @@
> mm/maccess.c:41:17: sparse: expected void const [noderef] __user *from
> mm/maccess.c:41:17: sparse: got unsigned long long [usertype] *
> >> mm/maccess.c:43:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned int [usertype] * @@
> mm/maccess.c:43:17: sparse: expected void const [noderef] __user *from
> mm/maccess.c:43:17: sparse: got unsigned int [usertype] *
> >> mm/maccess.c:45:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned short [usertype] * @@
> mm/maccess.c:45:17: sparse: expected void const [noderef] __user *from
> mm/maccess.c:45:17: sparse: got unsigned short [usertype] *
> >> mm/maccess.c:46:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
> mm/maccess.c:46:9: sparse: expected void const [noderef] __user *from
> mm/maccess.c:46:9: sparse: got unsigned char [usertype] *
> >> mm/maccess.c:73:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned long long [usertype] * @@
> mm/maccess.c:73:17: sparse: expected void [noderef] __user *to
> mm/maccess.c:73:17: sparse: got unsigned long long [usertype] *
> >> mm/maccess.c:75:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned int [usertype] * @@
> mm/maccess.c:75:17: sparse: expected void [noderef] __user *to
> mm/maccess.c:75:17: sparse: got unsigned int [usertype] *
> >> mm/maccess.c:77:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned short [usertype] * @@
> mm/maccess.c:77:17: sparse: expected void [noderef] __user *to
> mm/maccess.c:77:17: sparse: got unsigned short [usertype] *
> >> mm/maccess.c:78:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned char [usertype] * @@
> mm/maccess.c:78:9: sparse: expected void [noderef] __user *to
> mm/maccess.c:78:9: sparse: got unsigned char [usertype] *
> mm/maccess.c:98:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
> mm/maccess.c:98:17: sparse: expected void const [noderef] __user *from
> mm/maccess.c:98:17: sparse: got unsigned char [usertype] *
... and that clearly has fuck-all to do with mm/maccess.c.
The problem is in
#define __get_kernel_nofault(dst, src, type, err_label) \
__get_user_nocheck(*((type *)(dst)), (type *)(src), err_label)
Make that
__get_user_nocheck(*((type *)(dst)), (__force __user type *)(src), err_label)
and similar in
#define __put_kernel_nofault(dst, src, type, err_label) \
__put_user_nocheck(*((type *)(src)), (type *)(dst), err_label)
(cast also on the second argument) and see how much noise will go away.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces)
2025-08-16 16:19 ` Al Viro
@ 2025-08-16 16:54 ` Palmer Dabbelt
0 siblings, 0 replies; 5+ messages in thread
From: Palmer Dabbelt @ 2025-08-16 16:54 UTC (permalink / raw)
To: viro; +Cc: lkp, cleger, oe-kbuild-all, linux-kernel, alexghiti
On Sat, 16 Aug 2025 09:19:28 PDT (-0700), viro@zeniv.linux.org.uk wrote:
> On Sat, Aug 16, 2025 at 05:28:29PM +0800, kernel test robot wrote:
>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
>> head: dfd4b508c8c6106083698a0dd5e35aecc7c48725
>> commit: ca1a66cdd685030738cf077e3955fdedfe39fbb9 riscv: uaccess: do not do misaligned accesses in get/put_user()
>> date: 2 months ago
>> config: riscv-randconfig-r122-20250816 (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/config)
>> compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 93d24b6b7b148c47a2fa228a4ef31524fa1d9f3f)
>> reproduce: (https://download.01.org/0day-ci/archive/20250816/202508161713.RWu30Lv1-lkp@intel.com/reproduce)
>>
>> If you fix the issue in a separate patch/commit (i.e. not just a new version of
>> the same patch/commit), kindly add following tags
>> | Reported-by: kernel test robot <lkp@intel.com>
>> | Closes: https://lore.kernel.org/oe-kbuild-all/202508161713.RWu30Lv1-lkp@intel.com/
>>
>> sparse warnings: (new ones prefixed by >>)
>> WARNING: invalid argument to '-march': '_zacas_zabha'
>> >> mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned long long [usertype] * @@
>> mm/maccess.c:41:17: sparse: expected void const [noderef] __user *from
>> mm/maccess.c:41:17: sparse: got unsigned long long [usertype] *
>> >> mm/maccess.c:43:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned int [usertype] * @@
>> mm/maccess.c:43:17: sparse: expected void const [noderef] __user *from
>> mm/maccess.c:43:17: sparse: got unsigned int [usertype] *
>> >> mm/maccess.c:45:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned short [usertype] * @@
>> mm/maccess.c:45:17: sparse: expected void const [noderef] __user *from
>> mm/maccess.c:45:17: sparse: got unsigned short [usertype] *
>> >> mm/maccess.c:46:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
>> mm/maccess.c:46:9: sparse: expected void const [noderef] __user *from
>> mm/maccess.c:46:9: sparse: got unsigned char [usertype] *
>> >> mm/maccess.c:73:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned long long [usertype] * @@
>> mm/maccess.c:73:17: sparse: expected void [noderef] __user *to
>> mm/maccess.c:73:17: sparse: got unsigned long long [usertype] *
>> >> mm/maccess.c:75:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned int [usertype] * @@
>> mm/maccess.c:75:17: sparse: expected void [noderef] __user *to
>> mm/maccess.c:75:17: sparse: got unsigned int [usertype] *
>> >> mm/maccess.c:77:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned short [usertype] * @@
>> mm/maccess.c:77:17: sparse: expected void [noderef] __user *to
>> mm/maccess.c:77:17: sparse: got unsigned short [usertype] *
>> >> mm/maccess.c:78:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got unsigned char [usertype] * @@
>> mm/maccess.c:78:9: sparse: expected void [noderef] __user *to
>> mm/maccess.c:78:9: sparse: got unsigned char [usertype] *
>> mm/maccess.c:98:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got unsigned char [usertype] * @@
>> mm/maccess.c:98:17: sparse: expected void const [noderef] __user *from
>> mm/maccess.c:98:17: sparse: got unsigned char [usertype] *
>
> ... and that clearly has fuck-all to do with mm/maccess.c.
Ya, sorry, looks like something's just broken on the RISC-V side of
things. We lost the __user annotations when moving around the
misaligned access handling.
> The problem is in
> #define __get_kernel_nofault(dst, src, type, err_label) \
> __get_user_nocheck(*((type *)(dst)), (type *)(src), err_label)
>
> Make that
> __get_user_nocheck(*((type *)(dst)), (__force __user type *)(src), err_label)
> and similar in
> #define __put_kernel_nofault(dst, src, type, err_label) \
> __put_user_nocheck(*((type *)(src)), (type *)(dst), err_label)
> (cast also on the second argument) and see how much noise will go away.
Thanks, I'll go clean it up.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-08-16 16:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-16 9:28 mm/maccess.c:41:17: sparse: sparse: incorrect type in argument 2 (different address spaces) kernel test robot
2025-08-16 16:19 ` Al Viro
2025-08-16 16:54 ` Palmer Dabbelt
-- strict thread matches above, loose matches on Subject: below --
2025-07-14 12:48 kernel test robot
2025-06-07 11:43 kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).