tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: e7b08814b16b80a0bf76eeca16317f8c2ed23b8c
commit: 931ca7ab7fe804d77bc6952f1512950c0d870f26 [10504/14131] ip*_mc_gsfget(): lift
copyout of struct group_filter into callers
:::::: branch date: 3 days ago
:::::: commit date: 12 days ago
config: microblaze-randconfig-s032-20200601 (attached as .config)
compiler: microblaze-linux-gcc (GCC) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-243-gc100a7ab-dirty
git checkout 931ca7ab7fe804d77bc6952f1512950c0d870f26
# save the attached .config to linux build tree
make W=1 C=1 ARCH=microblaze CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
include/linux/byteorder/big_endian.h:8:2: sparse: sparse: inconsistent configuration,
needs CONFIG_CPU_BIG_ENDIAN
net/ipv6/mcast.c:606:34: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void [noderef] <asn:1> *to @@ got struct
__kernel_sockaddr_storage *p @@
> net/ipv6/mcast.c:606:34: sparse: expected void [noderef]
<asn:1> *to
net/ipv6/mcast.c:606:34: sparse: got struct
__kernel_sockaddr_storage *p
net/ipv6/mcast.c:549:5: sparse: sparse: symbol 'ip6_mc_msfget' redeclared with
different type (incompatible argument 3 (different address spaces)):
net/ipv6/mcast.c:549:5: sparse: int extern [addressable] [signed] [toplevel]
ip6_mc_msfget( ... )
> include/net/ipv6.h:1140:5: sparse: note: previously declared as:
include/net/ipv6.h:1140:5: sparse: int extern [addressable] [signed]
[toplevel] ip6_mc_msfget( ... )
net/ipv6/mcast.c:259:25: sparse: sparse: context imbalance in
'ip6_mc_find_dev_rcu' - different lock contexts for basic block
net/ipv6/mcast.c:453:9: sparse: sparse: context imbalance in 'ip6_mc_source' -
unexpected unlock
net/ipv6/mcast.c:542:9: sparse: sparse: context imbalance in 'ip6_mc_msfilter'
- unexpected unlock
net/ipv6/mcast.c:589:21: sparse: sparse: context imbalance in 'ip6_mc_msfget' -
unexpected unlock
net/ipv6/mcast.c:2700:25: sparse: sparse: context imbalance in
'igmp6_mc_get_next' - unexpected unlock
net/ipv6/mcast.c:2722:9: sparse: sparse: context imbalance in
'igmp6_mc_get_idx' - wrong count at exit
net/ipv6/mcast.c:2749:9: sparse: sparse: context imbalance in
'igmp6_mc_seq_stop' - unexpected unlock
net/ipv6/mcast.c:2821:31: sparse: sparse: context imbalance in
'igmp6_mcf_get_next' - unexpected unlock
net/ipv6/mcast.c:2853:9: sparse: sparse: context imbalance in
'igmp6_mcf_get_idx' - wrong count at exit
net/ipv6/mcast.c:2870:9: sparse: sparse: context imbalance in
'igmp6_mcf_seq_next' - wrong count at exit
net/ipv6/mcast.c:2883:17: sparse: sparse: context imbalance in
'igmp6_mcf_seq_stop' - unexpected unlock
#
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commi...
git remote add linux-next
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update linux-next
git checkout 931ca7ab7fe804d77bc6952f1512950c0d870f26
vim +606 net/ipv6/mcast.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 548
^1da177e4c3f41 Linus Torvalds 2005-04-16 549 int ip6_mc_msfget(struct sock *sk,
struct group_filter *gsf,
931ca7ab7fe804 Al Viro 2020-03-29 550 struct sockaddr_storage *p)
^1da177e4c3f41 Linus Torvalds 2005-04-16 551 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 552 int err, i, count, copycount;
b71d1d426d263b Eric Dumazet 2011-04-22 553 const struct in6_addr *group;
^1da177e4c3f41 Linus Torvalds 2005-04-16 554 struct ipv6_mc_socklist *pmc;
^1da177e4c3f41 Linus Torvalds 2005-04-16 555 struct inet6_dev *idev;
^1da177e4c3f41 Linus Torvalds 2005-04-16 556 struct ipv6_pinfo *inet6 =
inet6_sk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 557 struct ip6_sf_socklist *psl;
3b1e0a655f8eba YOSHIFUJI Hideaki 2008-03-26 558 struct net *net = sock_net(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 559
^1da177e4c3f41 Linus Torvalds 2005-04-16 560 group = &((struct sockaddr_in6
*)&gsf->gf_group)->sin6_addr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 561
^1da177e4c3f41 Linus Torvalds 2005-04-16 562 if (!ipv6_addr_is_multicast(group))
^1da177e4c3f41 Linus Torvalds 2005-04-16 563 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 564
96b52e61be1ad4 Eric Dumazet 2010-06-07 565 rcu_read_lock();
96b52e61be1ad4 Eric Dumazet 2010-06-07 566 idev = ip6_mc_find_dev_rcu(net, group,
gsf->gf_interface);
^1da177e4c3f41 Linus Torvalds 2005-04-16 567
96b52e61be1ad4 Eric Dumazet 2010-06-07 568 if (!idev) {
96b52e61be1ad4 Eric Dumazet 2010-06-07 569 rcu_read_unlock();
^1da177e4c3f41 Linus Torvalds 2005-04-16 570 return -ENODEV;
96b52e61be1ad4 Eric Dumazet 2010-06-07 571 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 572
^1da177e4c3f41 Linus Torvalds 2005-04-16 573 err = -EADDRNOTAVAIL;
f7ed925c1b4d62 WANG Cong 2014-09-11 574 /* changes to the ipv6_mc_list require
the socket lock and
f7ed925c1b4d62 WANG Cong 2014-09-11 575 * rtnl lock. We have the socket lock
and rcu read lock,
5ab4a6c81eb3db David L Stevens 2005-12-27 576 * so reading the list is safe.
5ab4a6c81eb3db David L Stevens 2005-12-27 577 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 578
456b61bca8ee32 Eric Dumazet 2010-11-23 579 for_each_pmc_rcu(inet6, pmc) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 580 if (pmc->ifindex !=
gsf->gf_interface)
^1da177e4c3f41 Linus Torvalds 2005-04-16 581 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 582 if (ipv6_addr_equal(group,
&pmc->addr))
^1da177e4c3f41 Linus Torvalds 2005-04-16 583 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 584 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 585 if (!pmc) /* must have a prior join
*/
^1da177e4c3f41 Linus Torvalds 2005-04-16 586 goto done;
^1da177e4c3f41 Linus Torvalds 2005-04-16 587 gsf->gf_fmode = pmc->sfmode;
^1da177e4c3f41 Linus Torvalds 2005-04-16 588 psl = pmc->sflist;
^1da177e4c3f41 Linus Torvalds 2005-04-16 589 count = psl ? psl->sl_count : 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 590 read_unlock_bh(&idev->lock);
96b52e61be1ad4 Eric Dumazet 2010-06-07 591 rcu_read_unlock();
^1da177e4c3f41 Linus Torvalds 2005-04-16 592
^1da177e4c3f41 Linus Torvalds 2005-04-16 593 copycount = count <
gsf->gf_numsrc ? count : gsf->gf_numsrc;
^1da177e4c3f41 Linus Torvalds 2005-04-16 594 gsf->gf_numsrc = count;
f7ed925c1b4d62 WANG Cong 2014-09-11 595 /* changes to psl require the socket
lock, and a write lock
f7ed925c1b4d62 WANG Cong 2014-09-11 596 * on pmc->sflock. We have the
socket lock so reading here is safe.
5ab4a6c81eb3db David L Stevens 2005-12-27 597 */
931ca7ab7fe804 Al Viro 2020-03-29 598 for (i = 0; i < copycount; i++, p++)
{
^1da177e4c3f41 Linus Torvalds 2005-04-16 599 struct sockaddr_in6 *psin6;
^1da177e4c3f41 Linus Torvalds 2005-04-16 600 struct sockaddr_storage ss;
^1da177e4c3f41 Linus Torvalds 2005-04-16 601
^1da177e4c3f41 Linus Torvalds 2005-04-16 602 psin6 = (struct sockaddr_in6
*)&ss;
^1da177e4c3f41 Linus Torvalds 2005-04-16 603 memset(&ss, 0, sizeof(ss));
^1da177e4c3f41 Linus Torvalds 2005-04-16 604 psin6->sin6_family = AF_INET6;
^1da177e4c3f41 Linus Torvalds 2005-04-16 605 psin6->sin6_addr =
psl->sl_addr[i];
931ca7ab7fe804 Al Viro 2020-03-29 @606 if (copy_to_user(p, &ss,
sizeof(ss)))
^1da177e4c3f41 Linus Torvalds 2005-04-16 607 return -EFAULT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 608 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 609 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 610 done:
^1da177e4c3f41 Linus Torvalds 2005-04-16 611 read_unlock_bh(&idev->lock);
96b52e61be1ad4 Eric Dumazet 2010-06-07 612 rcu_read_unlock();
^1da177e4c3f41 Linus Torvalds 2005-04-16 613 return err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 614 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 615
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org