sound/core/hwdep_compat.c:43:31: sparse: incorrect type in argument 2 (different address spaces)

From: kbuild test robot
Date: Tue May 09 2017 - 01:17:03 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: bf5f89463f5b3109a72ed13ca62b57e90213387d
commit: beba3a20bf90ce1b93e24592c3ebf0d0bb581bbe x86: switch to RAW_COPY_USER
date: 6 weeks ago
reproduce:
# apt-get install sparse
git checkout beba3a20bf90ce1b93e24592c3ebf0d0bb581bbe
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
>> sound/core/hwdep_compat.c:43:31: sparse: incorrect type in argument 2 (different address spaces)
sound/core/hwdep_compat.c:43:31: expected void const *from
sound/core/hwdep_compat.c:43:31: got struct snd_hwdep_dsp_image32 [noderef] <asn:1>*src
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
--
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
sound/core/control.c:1299:17: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control.c:1299:26: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control.c:1300:17: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control.c:1300:26: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control.c:1306:48: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control.c:1310:40: sparse: restricted snd_ctl_elem_type_t degrades to integer
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
>> sound/core/control_compat.c:45:32: sparse: incorrect type in argument 2 (different address spaces)
sound/core/control_compat.c:45:32: expected void const *from
sound/core/control_compat.c:45:32: got struct snd_ctl_elem_list32 [noderef] <asn:1>*data32
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> sound/core/control_compat.c:55:34: sparse: incorrect type in argument 2 (different address spaces)
sound/core/control_compat.c:55:34: expected void const *from
sound/core/control_compat.c:55:34: got struct snd_ctl_elem_list [noderef] <asn:1>*[assigned] data
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
sound/core/control_compat.c:210:21: sparse: incorrect type in assignment (different base types)
sound/core/control_compat.c:210:21: expected int [signed] [assigned] err
sound/core/control_compat.c:210:21: got restricted snd_ctl_elem_type_t [usertype] type
sound/core/control_compat.c:220:14: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:222:14: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:224:14: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:226:14: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:254:21: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:255:21: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:286:21: sparse: restricted snd_ctl_elem_type_t degrades to integer
sound/core/control_compat.c:287:21: sparse: restricted snd_ctl_elem_type_t degrades to integer
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
sound/core/control_compat.c:404:13: sparse: incorrect type in assignment (different base types)
sound/core/control_compat.c:404:13: expected restricted snd_ctl_elem_type_t [usertype] type
sound/core/control_compat.c:404:13: got signed int [signed] [explicitly-signed] <noident>
--
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
net/socket.c:1871:13: sparse: incorrect type in assignment (different address spaces)
net/socket.c:1871:13: expected void *msg_control
net/socket.c:1871:13: got void [noderef] <asn:1>*<noident>
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
>> net/socket.c:2637:32: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2637:32: expected void const *from
net/socket.c:2637:32: got struct compat_ifreq [noderef] <asn:1>*uifr32
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2644:34: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2644:34: expected void const *from
net/socket.c:2644:34: got struct ifreq [noderef] <asn:1>*[assigned] uifr
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2677:47: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2677:47: expected void const *from
net/socket.c:2677:47: got struct compat_ifreq [noderef] <asn:1>*[assigned] ifr32
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
net/socket.c:2698:41: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2698:41: expected void const *from
net/socket.c:2698:41: got struct ifreq [noderef] <asn:1>*[assigned] ifr
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
>> net/socket.c:2769:43: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2769:43: expected void const *from
net/socket.c:2769:43: got char [noderef] <asn:1>( *<noident> )[16]
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2790:41: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2790:41: expected void const *from
net/socket.c:2790:41: got struct compat_ethtool_rxnfc [noderef] <asn:1>*[assigned] compat_rxnfc
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2794:35: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2794:35: expected void const *from
net/socket.c:2794:35: got unsigned long long [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2797:53: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2797:53: expected void const *from
net/socket.c:2797:53: got unsigned int [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
>> net/socket.c:2807:48: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2807:48: expected void const *from
net/socket.c:2807:48: got struct ethtool_rxnfc [noderef] <asn:1>*[assigned] rxnfc
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
net/socket.c:2811:35: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2811:35: expected void const *from
net/socket.c:2811:35: got unsigned long long [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
net/socket.c:2814:60: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2814:60: expected void const *from
net/socket.c:2814:60: got unsigned int [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
net/socket.c:2832:59: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2832:59: expected void const *from
net/socket.c:2832:59: got unsigned int [noderef] <asn:1>*
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
net/socket.c:2848:32: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2848:32: expected void const *from
net/socket.c:2848:32: got struct compat_ifreq [noderef] <asn:1>*uifr32
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
net/socket.c:2923:32: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2923:32: expected void const *from
net/socket.c:2923:32: got struct compat_ifreq [noderef] <asn:1>*uifr32
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
net/socket.c:2944:50: sparse: incorrect type in argument 2 (different address spaces)
net/socket.c:2944:50: expected void const *from
net/socket.c:2944:50: got struct ifreq [noderef] <asn:1>*[assigned] uifr
include/linux/uaccess.h:194:47: sparse: incorrect type in argument 1 (different address spaces)
include/linux/uaccess.h:194:47: expected void const volatile [noderef] <asn:1>*<noident>
include/linux/uaccess.h:194:47: got void const *from
include/linux/uaccess.h:195:42: sparse: incorrect type in argument 2 (different address spaces)
include/linux/uaccess.h:195:42: expected void const [noderef] <asn:1>*src
include/linux/uaccess.h:195:42: got void const *from
include/linux/uaccess.h:168:18: sparse: incorrect type in argument 1 (different modifiers)
include/linux/uaccess.h:168:18: expected void *<noident>
include/linux/uaccess.h:168:18: got void const *from
--
>> lib/usercopy.c:21:13: sparse: incorrect type in argument 1 (different address spaces)
lib/usercopy.c:21:13: expected void const volatile [noderef] <asn:1>*<noident>
lib/usercopy.c:21:13: got void *to
>> lib/usercopy.c:22:38: sparse: incorrect type in argument 1 (different address spaces)
lib/usercopy.c:22:38: expected void [noderef] <asn:1>*dst
lib/usercopy.c:22:38: got void *to
>> lib/usercopy.c:22:42: sparse: incorrect type in argument 2 (different address spaces)
lib/usercopy.c:22:42: expected void const *src
lib/usercopy.c:22:42: got void const [noderef] <asn:1>*from
lib/usercopy.c:19:15: sparse: symbol '_copy_to_user' redeclared with different type (originally declared at include/linux/uaccess.h:135) - incompatible argument 1 (different address spaces)

vim +43 sound/core/hwdep_compat.c

^1da177e Linus Torvalds 2005-04-16 27 unsigned char name[64];
^1da177e Linus Torvalds 2005-04-16 28 u32 image; /* pointer */
^1da177e Linus Torvalds 2005-04-16 29 u32 length;
^1da177e Linus Torvalds 2005-04-16 30 u32 driver_data;
^1da177e Linus Torvalds 2005-04-16 31 } /* don't set packed attribute here */;
^1da177e Linus Torvalds 2005-04-16 32
d9a98de2 Takashi Iwai 2005-11-17 33 static int snd_hwdep_dsp_load_compat(struct snd_hwdep *hw,
d9a98de2 Takashi Iwai 2005-11-17 34 struct snd_hwdep_dsp_image32 __user *src)
^1da177e Linus Torvalds 2005-04-16 35 {
cb04e6b6 Al Viro 2006-10-10 36 struct snd_hwdep_dsp_image __user *dst;
^1da177e Linus Torvalds 2005-04-16 37 compat_caddr_t ptr;
^1da177e Linus Torvalds 2005-04-16 38 u32 val;
^1da177e Linus Torvalds 2005-04-16 39
^1da177e Linus Torvalds 2005-04-16 40 dst = compat_alloc_user_space(sizeof(*dst));
^1da177e Linus Torvalds 2005-04-16 41
^1da177e Linus Torvalds 2005-04-16 42 /* index and name */
^1da177e Linus Torvalds 2005-04-16 @43 if (copy_in_user(dst, src, 4 + 64))
^1da177e Linus Torvalds 2005-04-16 44 return -EFAULT;
^1da177e Linus Torvalds 2005-04-16 45 if (get_user(ptr, &src->image) ||
^1da177e Linus Torvalds 2005-04-16 46 put_user(compat_ptr(ptr), &dst->image))
^1da177e Linus Torvalds 2005-04-16 47 return -EFAULT;
^1da177e Linus Torvalds 2005-04-16 48 if (get_user(val, &src->length) ||
^1da177e Linus Torvalds 2005-04-16 49 put_user(val, &dst->length))
^1da177e Linus Torvalds 2005-04-16 50 return -EFAULT;
^1da177e Linus Torvalds 2005-04-16 51 if (get_user(val, &src->driver_data) ||

:::::: The code at line 43 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation