tree:
git://git.infradead.org/users/hch/misc.git sockopt-cleanups
head: c7b33f366ac60f1213a4ff71675dc62c56f171d3
commit: 24541f10128971b7634776778bce4c6b5c8d7e10 [21/22] net/ipv6: remove
compat_ipv6_{get,set}sockopt
config: openrisc-randconfig-s031-20200717 (attached as .config)
compiler: or1k-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-49-g707c5017-dirty
git checkout 24541f10128971b7634776778bce4c6b5c8d7e10
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=openrisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
net/ipv6/ipv6_sockglue.c:331:29: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int const *__gu_addr @@ got int [noderef]
__user * @@
net/ipv6/ipv6_sockglue.c:331:29: sparse: expected int const *__gu_addr
net/ipv6/ipv6_sockglue.c:331:29: sparse: got int [noderef] __user *
net/ipv6/ipv6_sockglue.c:1059:21: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1059:21: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1059:21: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1077:13: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int const *__gu_addr @@ got int [noderef]
__user *optlen @@
net/ipv6/ipv6_sockglue.c:1077:13: sparse: expected int const *__gu_addr
net/ipv6/ipv6_sockglue.c:1077:13: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1100:13: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1100:13: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1100:13: sparse: got int [noderef] __user *optlen
> net/ipv6/ipv6_sockglue.c:1101:13: sparse: sparse: incorrect type
in initializer (different address spaces) @@ expected unsigned int *__pu_addr @@
got unsigned int [noderef] __user * @@
> net/ipv6/ipv6_sockglue.c:1101:13: sparse: expected unsigned int *__pu_addr
net/ipv6/ipv6_sockglue.c:1101:13: sparse: got unsigned int [noderef] __user *
net/ipv6/ipv6_sockglue.c:1102:13: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected unsigned int *__pu_addr @@ got unsigned int
[noderef] __user * @@
net/ipv6/ipv6_sockglue.c:1102:13: sparse: expected unsigned int *__pu_addr
net/ipv6/ipv6_sockglue.c:1102:13: sparse: got unsigned int [noderef] __user *
net/ipv6/ipv6_sockglue.c:1117:13: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int const *__gu_addr @@ got int [noderef]
__user *optlen @@
net/ipv6/ipv6_sockglue.c:1117:13: sparse: expected int const *__gu_addr
net/ipv6/ipv6_sockglue.c:1117:13: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1141:33: sparse: sparse: incorrect type in assignment
(different address spaces) @@ expected void *msg_control @@ got char [noderef]
__user *optval @@
net/ipv6/ipv6_sockglue.c:1141:33: sparse: expected void *msg_control
net/ipv6/ipv6_sockglue.c:1141:33: sparse: got char [noderef] __user *optval
net/ipv6/ipv6_sockglue.c:1187:24: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1187:24: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1187:24: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1247:24: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1247:24: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1247:24: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1301:21: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1301:21: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1301:21: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1395:21: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1395:21: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1395:21: sparse: got int [noderef] __user *optlen
net/ipv6/ipv6_sockglue.c:1445:13: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected int *__pu_addr @@ got int [noderef] __user
*optlen @@
net/ipv6/ipv6_sockglue.c:1445:13: sparse: expected int *__pu_addr
net/ipv6/ipv6_sockglue.c:1445:13: sparse: got int [noderef] __user *optlen
arch/openrisc/include/asm/cmpxchg.h:101:29: sparse: sparse: shift too big (32) for type
int
arch/openrisc/include/asm/cmpxchg.h:101:29: sparse: sparse: shift too big (32) for type
int
arch/openrisc/include/asm/cmpxchg.h:101:29: sparse: sparse: shift too big (32) for type
int
arch/openrisc/include/asm/cmpxchg.h:101:29: sparse: sparse: shift too big (32) for type
int
include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void *to @@ got void [noderef] __user *to @@
include/linux/uaccess.h:131:38: sparse: expected void *to
include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to
include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void const [noderef] __user *from @@ got void const
*from @@
include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from
include/linux/uaccess.h:131:42: sparse: got void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const *from @@ got void const
[noderef] __user *from @@
arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user
*from
include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void *to @@ got void [noderef] __user *to @@
include/linux/uaccess.h:131:38: sparse: expected void *to
include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to
include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void const [noderef] __user *from @@ got void const
*from @@
include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from
include/linux/uaccess.h:131:42: sparse: got void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const *from @@ got void const
[noderef] __user *from @@
arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user
*from
include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void *to @@ got void [noderef] __user *to @@
include/linux/uaccess.h:131:38: sparse: expected void *to
include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to
include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void const [noderef] __user *from @@ got void const
*from @@
include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from
include/linux/uaccess.h:131:42: sparse: got void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const *from @@ got void const
[noderef] __user *from @@
arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user
*from
include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void *to @@ got void [noderef] __user *to @@
include/linux/uaccess.h:131:38: sparse: expected void *to
include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to
include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void const [noderef] __user *from @@ got void const
*from @@
include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from
include/linux/uaccess.h:131:42: sparse: got void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const *from @@ got void const
[noderef] __user *from @@
arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user
*from
include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void *to @@ got void [noderef] __user *to @@
include/linux/uaccess.h:131:38: sparse: expected void *to
include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to
include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void const [noderef] __user *from @@ got void const
*from @@
include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from
include/linux/uaccess.h:131:42: sparse: got void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const *from @@ got void const
[noderef] __user *from @@
arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from
arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user
*from
vim +1101 net/ipv6/ipv6_sockglue.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 1066
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1067 static int
compat_ipv6_get_msfilter(struct sock *sk, void __user *optval,
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1068 int __user *optlen)
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1069 {
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1070 const int size0 = offsetof(struct
compat_group_filter, gf_slist);
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1071 struct compat_group_filter __user *p =
optval;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1072 struct compat_group_filter gf32;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1073 struct group_filter gf;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1074 int len, err;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1075 int num;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1076
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1077 if (get_user(len, optlen))
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1078 return -EFAULT;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1079 if (len < size0)
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1080 return -EINVAL;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1081
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1082 if (copy_from_user(&gf32, p,
size0))
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1083 return -EFAULT;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1084 gf.gf_interface = gf32.gf_interface;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1085 gf.gf_fmode = gf32.gf_fmode;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1086 num = gf.gf_numsrc = gf32.gf_numsrc;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1087 gf.gf_group = gf32.gf_group;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1088
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1089 if (gf.gf_group.ss_family !=
AF_INET6)
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1090 return -EADDRNOTAVAIL;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1091
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1092 lock_sock(sk);
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1093 err = ip6_mc_msfget(sk, &gf,
p->gf_slist);
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1094 release_sock(sk);
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1095 if (err)
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1096 return err;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1097 if (num > gf.gf_numsrc)
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1098 num = gf.gf_numsrc;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1099 len = GROUP_FILTER_SIZE(num) -
(sizeof(gf)-sizeof(gf32));
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1100 if (put_user(len, optlen) ||
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 @1101 put_user(gf.gf_fmode,
&p->gf_fmode) ||
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1102 put_user(gf.gf_numsrc,
&p->gf_numsrc))
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1103 return -EFAULT;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1104 return 0;
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1105 }
f5cfb1759cdde7 Christoph Hellwig 2020-07-15 1106
:::::: The code at line 1101 was first introduced by commit
:::::: f5cfb1759cdde7d190afcd889b46eb82888469e5 net/ipv6: factor out MCAST_MSFILTER
getsockopt helpers
:::::: TO: Christoph Hellwig <hch(a)lst.de>
:::::: CC: Christoph Hellwig <hch(a)lst.de>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org