Messages in this thread | | | Date | Sun, 26 Jul 2020 15:04:02 +0800 | From | kernel test robot <> | Subject | net/ipv6/ip6mr.c:1772:21: sparse: sparse: incorrect type in argument 1 (different address spaces) |
| |
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 04300d66f0a06d572d9f2ad6768c38cabde22179 commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces date: 5 weeks ago config: sh-randconfig-s031-20200726 (attached as .config) compiler: sh4-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-93-g4c6cbe55-dirty git checkout 670d0a4b10704667765f7d18f7592993d02783aa # 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=sh
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
net/ipv6/ip6mr.c:1721:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ net/ipv6/ip6mr.c:1721:21: sparse: expected int const *__gu_addr net/ipv6/ip6mr.c:1721:21: sparse: got int [noderef] __user * net/ipv6/ip6mr.c:1721:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/ipv6/ip6mr.c:1721:21: sparse: expected void const volatile [noderef] __user * net/ipv6/ip6mr.c:1721:21: sparse: got int const *__gu_addr net/ipv6/ip6mr.c:1738:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ net/ipv6/ip6mr.c:1738:21: sparse: expected int const *__gu_addr net/ipv6/ip6mr.c:1738:21: sparse: got int [noderef] __user * net/ipv6/ip6mr.c:1738:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/ipv6/ip6mr.c:1738:21: sparse: expected void const volatile [noderef] __user * net/ipv6/ip6mr.c:1738:21: sparse: got int const *__gu_addr net/ipv6/ip6mr.c:1751:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ net/ipv6/ip6mr.c:1751:21: sparse: expected int const *__gu_addr net/ipv6/ip6mr.c:1751:21: sparse: got int [noderef] __user * net/ipv6/ip6mr.c:1751:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/ipv6/ip6mr.c:1751:21: sparse: expected void const volatile [noderef] __user * net/ipv6/ip6mr.c:1751:21: sparse: got int const *__gu_addr net/ipv6/ip6mr.c:1772:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ net/ipv6/ip6mr.c:1772:21: sparse: expected unsigned int const *__gu_addr net/ipv6/ip6mr.c:1772:21: sparse: got unsigned int [noderef] [usertype] __user * >> net/ipv6/ip6mr.c:1772:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got unsigned int const *__gu_addr @@ net/ipv6/ip6mr.c:1772:21: sparse: expected void const volatile [noderef] __user * net/ipv6/ip6mr.c:1772:21: sparse: got unsigned int const *__gu_addr net/ipv6/ip6mr.c:1836:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *optlen @@ net/ipv6/ip6mr.c:1836:13: sparse: expected int const *__gu_addr net/ipv6/ip6mr.c:1836:13: sparse: got int [noderef] __user *optlen net/ipv6/ip6mr.c:1836:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/ipv6/ip6mr.c:1836:13: sparse: expected void const volatile [noderef] __user * net/ipv6/ip6mr.c:1836:13: sparse: got int const *__gu_addr net/ipv6/ip6mr.c:405:13: sparse: sparse: context imbalance in 'ip6mr_vif_seq_start' - different lock contexts for basic block net/ipv6/ip6mr.c: note: in included file (through include/linux/mroute6.h): include/linux/mroute_base.h:427:31: sparse: sparse: context imbalance in 'mr_mfc_seq_stop' - unexpected unlock -- net/netrom/af_netrom.c:309:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] __user * @@ net/netrom/af_netrom.c:309:13: sparse: expected unsigned int const *__gu_addr net/netrom/af_netrom.c:309:13: sparse: got unsigned int [noderef] __user * >> net/netrom/af_netrom.c:309:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got unsigned int const *__gu_addr @@ >> net/netrom/af_netrom.c:309:13: sparse: expected void const volatile [noderef] __user * net/netrom/af_netrom.c:309:13: sparse: got unsigned int const *__gu_addr net/netrom/af_netrom.c:359:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *optlen @@ net/netrom/af_netrom.c:359:13: sparse: expected int const *__gu_addr net/netrom/af_netrom.c:359:13: sparse: got int [noderef] __user *optlen >> net/netrom/af_netrom.c:359:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/netrom/af_netrom.c:359:13: sparse: expected void const volatile [noderef] __user * net/netrom/af_netrom.c:359:13: sparse: got int const *__gu_addr -- net/rose/af_rose.c:380:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ net/rose/af_rose.c:380:13: sparse: expected int const *__gu_addr net/rose/af_rose.c:380:13: sparse: got int [noderef] __user * >> net/rose/af_rose.c:380:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ >> net/rose/af_rose.c:380:13: sparse: expected void const volatile [noderef] __user * net/rose/af_rose.c:380:13: sparse: got int const *__gu_addr net/rose/af_rose.c:438:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *optlen @@ net/rose/af_rose.c:438:13: sparse: expected int const *__gu_addr net/rose/af_rose.c:438:13: sparse: got int [noderef] __user *optlen net/rose/af_rose.c:438:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/rose/af_rose.c:438:13: sparse: expected void const volatile [noderef] __user * net/rose/af_rose.c:438:13: sparse: got int const *__gu_addr -- net/ax25/af_ax25.c:546:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] __user * @@ net/ax25/af_ax25.c:546:13: sparse: expected unsigned int const *__gu_addr net/ax25/af_ax25.c:546:13: sparse: got unsigned int [noderef] __user * >> net/ax25/af_ax25.c:546:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got unsigned int const *__gu_addr @@ >> net/ax25/af_ax25.c:546:13: sparse: expected void const volatile [noderef] __user * net/ax25/af_ax25.c:546:13: sparse: got unsigned int const *__gu_addr net/ax25/af_ax25.c:695:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *optlen @@ net/ax25/af_ax25.c:695:13: sparse: expected int const *__gu_addr net/ax25/af_ax25.c:695:13: sparse: got int [noderef] __user *optlen >> net/ax25/af_ax25.c:695:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ net/ax25/af_ax25.c:695:13: sparse: expected void const volatile [noderef] __user * net/ax25/af_ax25.c:695:13: sparse: got int const *__gu_addr net/ax25/af_ax25.c:1736:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected long const *__gu_addr @@ got long [noderef] __user * @@ net/ax25/af_ax25.c:1736:21: sparse: expected long const *__gu_addr net/ax25/af_ax25.c:1736:21: sparse: got long [noderef] __user * >> net/ax25/af_ax25.c:1736:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got long const *__gu_addr @@ net/ax25/af_ax25.c:1736:21: sparse: expected void const volatile [noderef] __user * net/ax25/af_ax25.c:1736:21: sparse: got long const *__gu_addr -- drivers/watchdog/watchdog_dev.c:680:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char const *__gu_addr @@ got char const [noderef] __user * @@ drivers/watchdog/watchdog_dev.c:680:21: sparse: expected char const *__gu_addr drivers/watchdog/watchdog_dev.c:680:21: sparse: got char const [noderef] __user * >> drivers/watchdog/watchdog_dev.c:680:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got char const *__gu_addr @@ >> drivers/watchdog/watchdog_dev.c:680:21: sparse: expected void const volatile [noderef] __user * drivers/watchdog/watchdog_dev.c:680:21: sparse: got char const *__gu_addr drivers/watchdog/watchdog_dev.c:746:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ drivers/watchdog/watchdog_dev.c:746:21: sparse: expected int const *__gu_addr drivers/watchdog/watchdog_dev.c:746:21: sparse: got int [noderef] __user *p >> drivers/watchdog/watchdog_dev.c:746:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ drivers/watchdog/watchdog_dev.c:746:21: sparse: expected void const volatile [noderef] __user * drivers/watchdog/watchdog_dev.c:746:21: sparse: got int const *__gu_addr drivers/watchdog/watchdog_dev.c:766:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ drivers/watchdog/watchdog_dev.c:766:21: sparse: expected int const *__gu_addr drivers/watchdog/watchdog_dev.c:766:21: sparse: got int [noderef] __user *p drivers/watchdog/watchdog_dev.c:766:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ drivers/watchdog/watchdog_dev.c:766:21: sparse: expected void const volatile [noderef] __user * drivers/watchdog/watchdog_dev.c:766:21: sparse: got int const *__gu_addr drivers/watchdog/watchdog_dev.c:795:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ drivers/watchdog/watchdog_dev.c:795:21: sparse: expected int const *__gu_addr drivers/watchdog/watchdog_dev.c:795:21: sparse: got int [noderef] __user *p drivers/watchdog/watchdog_dev.c:795:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got int const *__gu_addr @@ drivers/watchdog/watchdog_dev.c:795:21: sparse: expected void const volatile [noderef] __user * drivers/watchdog/watchdog_dev.c:795:21: sparse: got int const *__gu_addr -- drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char [noderef] __user *__pu_addr @@ got char *buf @@ drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: expected char [noderef] __user *__pu_addr drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: got char *buf >> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got char const *__gu_addr @@ drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: expected void const volatile [noderef] __user * drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: got char const *__gu_addr -- drivers/fsi/fsi-scom.c:497:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/fsi/fsi-scom.c:497:13: sparse: expected unsigned int const *__gu_addr drivers/fsi/fsi-scom.c:497:13: sparse: got unsigned int [noderef] [usertype] __user * >> drivers/fsi/fsi-scom.c:497:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user * @@ got unsigned int const *__gu_addr @@ >> drivers/fsi/fsi-scom.c:497:13: sparse: expected void const volatile [noderef] __user * drivers/fsi/fsi-scom.c:497:13: sparse: got unsigned int const *__gu_addr
vim +1772 net/ipv6/ip6mr.c
6bd521433942d8 Patrick McHardy 2010-05-11 1624 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1625 /* 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1626 * Socket options and virtual interface manipulation. The whole 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1627 * virtual interface system is a complete heap, but unfortunately 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1628 * that's how BSD mrouted happens to think. Maybe one day with a proper 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1629 * MOSPF/PIM router set up we can clean this up. 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1630 */ 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1631 b7058842c940ad David S. Miller 2009-09-30 1632 int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsigned int optlen) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1633 { 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1634 int ret, parent = 0; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1635 struct mif6ctl vif; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1636 struct mf6cctl mfc; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1637 mifi_t mifi; 8229efdaef1e79 Benjamin Thery 2008-12-10 1638 struct net *net = sock_net(sk); b70432f7319eb7 Yuval Mintz 2018-02-28 1639 struct mr_table *mrt; d1db275dd3f6e4 Patrick McHardy 2010-05-11 1640 99253eb750fda6 Xin Long 2017-02-24 1641 if (sk->sk_type != SOCK_RAW || 99253eb750fda6 Xin Long 2017-02-24 1642 inet_sk(sk)->inet_num != IPPROTO_ICMPV6) 99253eb750fda6 Xin Long 2017-02-24 1643 return -EOPNOTSUPP; 99253eb750fda6 Xin Long 2017-02-24 1644 d1db275dd3f6e4 Patrick McHardy 2010-05-11 1645 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); 63159f29be1df7 Ian Morris 2015-03-29 1646 if (!mrt) d1db275dd3f6e4 Patrick McHardy 2010-05-11 1647 return -ENOENT; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1648 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1649 if (optname != MRT6_INIT) { b70432f7319eb7 Yuval Mintz 2018-02-28 1650 if (sk != rcu_access_pointer(mrt->mroute_sk) && 8571ab479a6e1e Yuval Mintz 2018-02-28 1651 !ns_capable(net->user_ns, CAP_NET_ADMIN)) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1652 return -EACCES; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1653 } 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1654 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1655 switch (optname) { 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1656 case MRT6_INIT: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1657 if (optlen < sizeof(int)) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1658 return -EINVAL; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1659 6bd521433942d8 Patrick McHardy 2010-05-11 1660 return ip6mr_sk_init(mrt, sk); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1661 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1662 case MRT6_DONE: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1663 return ip6mr_sk_done(sk); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1664 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1665 case MRT6_ADD_MIF: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1666 if (optlen < sizeof(vif)) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1667 return -EINVAL; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1668 if (copy_from_user(&vif, optval, sizeof(vif))) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1669 return -EFAULT; 6ac7eb0868ccc9 Rami Rosen 2008-04-10 1670 if (vif.mif6c_mifi >= MAXMIFS) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1671 return -ENFILE; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1672 rtnl_lock(); 8571ab479a6e1e Yuval Mintz 2018-02-28 1673 ret = mif6_add(net, mrt, &vif, b70432f7319eb7 Yuval Mintz 2018-02-28 1674 sk == rtnl_dereference(mrt->mroute_sk)); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1675 rtnl_unlock(); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1676 return ret; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1677 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1678 case MRT6_DEL_MIF: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1679 if (optlen < sizeof(mifi_t)) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1680 return -EINVAL; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1681 if (copy_from_user(&mifi, optval, sizeof(mifi_t))) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1682 return -EFAULT; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1683 rtnl_lock(); 723b929ca0f79c Nikolay Aleksandrov 2017-04-21 1684 ret = mif6_delete(mrt, mifi, 0, NULL); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1685 rtnl_unlock(); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1686 return ret; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1687 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1688 /* 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1689 * Manipulate the forwarding caches. These live 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1690 * in a sort of kernel/user symbiosis. 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1691 */ 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1692 case MRT6_ADD_MFC: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1693 case MRT6_DEL_MFC: 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1694 parent = -1; a8eceea84a3a35 Joe Perches 2020-03-12 1695 fallthrough; 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1696 case MRT6_ADD_MFC_PROXY: 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1697 case MRT6_DEL_MFC_PROXY: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1698 if (optlen < sizeof(mfc)) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1699 return -EINVAL; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1700 if (copy_from_user(&mfc, optval, sizeof(mfc))) 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1701 return -EFAULT; 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1702 if (parent == 0) 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1703 parent = mfc.mf6cc_parent; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1704 rtnl_lock(); 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1705 if (optname == MRT6_DEL_MFC || optname == MRT6_DEL_MFC_PROXY) 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1706 ret = ip6mr_mfc_delete(mrt, &mfc, parent); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1707 else 660b26dc1a8aeb Nicolas Dichtel 2013-01-21 1708 ret = ip6mr_mfc_add(net, mrt, &mfc, 8571ab479a6e1e Yuval Mintz 2018-02-28 1709 sk == b70432f7319eb7 Yuval Mintz 2018-02-28 1710 rtnl_dereference(mrt->mroute_sk), 8571ab479a6e1e Yuval Mintz 2018-02-28 1711 parent); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1712 rtnl_unlock(); 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1713 return ret; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1714 ca8d4794f669e7 Callum Sinclair 2019-02-18 1715 case MRT6_FLUSH: ca8d4794f669e7 Callum Sinclair 2019-02-18 1716 { ca8d4794f669e7 Callum Sinclair 2019-02-18 1717 int flags; ca8d4794f669e7 Callum Sinclair 2019-02-18 1718 ca8d4794f669e7 Callum Sinclair 2019-02-18 1719 if (optlen != sizeof(flags)) ca8d4794f669e7 Callum Sinclair 2019-02-18 1720 return -EINVAL; ca8d4794f669e7 Callum Sinclair 2019-02-18 1721 if (get_user(flags, (int __user *)optval)) ca8d4794f669e7 Callum Sinclair 2019-02-18 1722 return -EFAULT; ca8d4794f669e7 Callum Sinclair 2019-02-18 1723 rtnl_lock(); ca8d4794f669e7 Callum Sinclair 2019-02-18 1724 mroute_clean_tables(mrt, flags); ca8d4794f669e7 Callum Sinclair 2019-02-18 1725 rtnl_unlock(); ca8d4794f669e7 Callum Sinclair 2019-02-18 1726 return 0; ca8d4794f669e7 Callum Sinclair 2019-02-18 1727 } ca8d4794f669e7 Callum Sinclair 2019-02-18 1728 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1729 /* 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1730 * Control PIM assert (to activate pim will activate assert) 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1731 */ 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1732 case MRT6_ASSERT: 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1733 { 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1734 int v; 03f52a0a554210 Joe Perches 2012-11-25 1735 03f52a0a554210 Joe Perches 2012-11-25 1736 if (optlen != sizeof(v)) 03f52a0a554210 Joe Perches 2012-11-25 1737 return -EINVAL; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1738 if (get_user(v, (int __user *)optval)) 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1739 return -EFAULT; 53d6841d225b93 Joe Perches 2012-11-25 1740 mrt->mroute_do_assert = v; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1741 return 0; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1742 } 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1743 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1744 #ifdef CONFIG_IPV6_PIMSM_V2 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1745 case MRT6_PIM: 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1746 { a9f83bf3858672 YOSHIFUJI Hideaki 2008-04-10 1747 int v; 03f52a0a554210 Joe Perches 2012-11-25 1748 03f52a0a554210 Joe Perches 2012-11-25 1749 if (optlen != sizeof(v)) 03f52a0a554210 Joe Perches 2012-11-25 1750 return -EINVAL; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 @1751 if (get_user(v, (int __user *)optval)) 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1752 return -EFAULT; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1753 v = !!v; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1754 rtnl_lock(); 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1755 ret = 0; 6bd521433942d8 Patrick McHardy 2010-05-11 1756 if (v != mrt->mroute_do_pim) { 6bd521433942d8 Patrick McHardy 2010-05-11 1757 mrt->mroute_do_pim = v; 6bd521433942d8 Patrick McHardy 2010-05-11 1758 mrt->mroute_do_assert = v; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1759 } 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1760 rtnl_unlock(); 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1761 return ret; 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1762 } 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1763 d1db275dd3f6e4 Patrick McHardy 2010-05-11 1764 #endif d1db275dd3f6e4 Patrick McHardy 2010-05-11 1765 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES d1db275dd3f6e4 Patrick McHardy 2010-05-11 1766 case MRT6_TABLE: d1db275dd3f6e4 Patrick McHardy 2010-05-11 1767 { d1db275dd3f6e4 Patrick McHardy 2010-05-11 1768 u32 v; d1db275dd3f6e4 Patrick McHardy 2010-05-11 1769 d1db275dd3f6e4 Patrick McHardy 2010-05-11 1770 if (optlen != sizeof(u32)) d1db275dd3f6e4 Patrick McHardy 2010-05-11 1771 return -EINVAL; d1db275dd3f6e4 Patrick McHardy 2010-05-11 @1772 if (get_user(v, (u32 __user *)optval)) d1db275dd3f6e4 Patrick McHardy 2010-05-11 1773 return -EFAULT; 75356a8143426a Dan Carpenter 2013-01-23 1774 /* "pim6reg%u" should not exceed 16 bytes (IFNAMSIZ) */ 75356a8143426a Dan Carpenter 2013-01-23 1775 if (v != RT_TABLE_DEFAULT && v >= 100000000) 75356a8143426a Dan Carpenter 2013-01-23 1776 return -EINVAL; b70432f7319eb7 Yuval Mintz 2018-02-28 1777 if (sk == rcu_access_pointer(mrt->mroute_sk)) d1db275dd3f6e4 Patrick McHardy 2010-05-11 1778 return -EBUSY; d1db275dd3f6e4 Patrick McHardy 2010-05-11 1779 d1db275dd3f6e4 Patrick McHardy 2010-05-11 1780 rtnl_lock(); d1db275dd3f6e4 Patrick McHardy 2010-05-11 1781 ret = 0; e783bb00ad86d9 Sabrina Dubroca 2018-06-05 1782 mrt = ip6mr_new_table(net, v); e783bb00ad86d9 Sabrina Dubroca 2018-06-05 1783 if (IS_ERR(mrt)) e783bb00ad86d9 Sabrina Dubroca 2018-06-05 1784 ret = PTR_ERR(mrt); 848235edb5c93e Sabrina Dubroca 2018-06-05 1785 else d1db275dd3f6e4 Patrick McHardy 2010-05-11 1786 raw6_sk(sk)->ip6mr_table = v; d1db275dd3f6e4 Patrick McHardy 2010-05-11 1787 rtnl_unlock(); d1db275dd3f6e4 Patrick McHardy 2010-05-11 1788 return ret; d1db275dd3f6e4 Patrick McHardy 2010-05-11 1789 } 14fb64e1f449ef YOSHIFUJI Hideaki 2008-04-03 1790 #endif 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1791 /* 7d120c55df02a2 Rami Rosen 2008-04-23 1792 * Spurious command, or MRT6_VERSION which you cannot 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1793 * set. 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1794 */ 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1795 default: 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1796 return -ENOPROTOOPT; 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1797 } 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1798 } 7bc570c8b4f75d YOSHIFUJI Hideaki 2008-04-03 1799
:::::: The code at line 1772 was first introduced by commit :::::: d1db275dd3f6e4182c4c4b4a1ac6287925d60569 ipv6: ip6mr: support multiple tables
:::::: TO: Patrick McHardy <kaber@trash.net> :::::: CC: Patrick McHardy <kaber@trash.net>
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [unhandled content-type:application/gzip] | |