Re: [PATCH v4] proc/sysctl: add shared variables for range check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Matteo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net/master]
[also build test WARNING on v5.1-rc7]
[cannot apply to next-20190429]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Matteo-Croce/proc-sysctl-add-shared-variables-for-range-check/20190430-065026
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)

>> drivers/parport/procfs.c:76:49: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct parport_device_info *info @@    got evice_info *info @@
>> drivers/parport/procfs.c:76:49: sparse:    expected struct parport_device_info *info
>> drivers/parport/procfs.c:76:49: sparse:    got void const *extra2
--
>> net/ipv4/devinet.c:2322:47: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct ipv4_devconf *cnf @@    got v4_devconf *cnf @@
>> net/ipv4/devinet.c:2322:47: sparse:    expected struct ipv4_devconf *cnf
>> net/ipv4/devinet.c:2322:47: sparse:    got void const *extra1
>> net/ipv4/devinet.c:2323:38: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
>> net/ipv4/devinet.c:2323:38: sparse:    expected struct net *net
>> net/ipv4/devinet.c:2323:38: sparse:    got void const *extra2
   net/ipv4/devinet.c:2376:38: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
   net/ipv4/devinet.c:2376:38: sparse:    expected struct net *net
   net/ipv4/devinet.c:2376:38: sparse:    got void const *extra2
   net/ipv4/devinet.c:2388:63: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct ipv4_devconf *cnf @@    got v4_devconf *cnf @@
   net/ipv4/devinet.c:2388:63: sparse:    expected struct ipv4_devconf *cnf
   net/ipv4/devinet.c:2388:63: sparse:    got void const *extra1
   net/ipv4/devinet.c:2417:30: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
   net/ipv4/devinet.c:2417:30: sparse:    expected struct net *net
   net/ipv4/devinet.c:2417:30: sparse:    got void const *extra2
--
>> net/ipv6/addrconf.c:6029:37: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct inet6_dev *idev @@    got  inet6_dev *idev @@
>> net/ipv6/addrconf.c:6029:37: sparse:    expected struct inet6_dev *idev
>> net/ipv6/addrconf.c:6029:37: sparse:    got void const *extra1
>> net/ipv6/addrconf.c:6136:38: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
>> net/ipv6/addrconf.c:6136:38: sparse:    expected struct net *net
>> net/ipv6/addrconf.c:6136:38: sparse:    got void const *extra2
   net/ipv6/addrconf.c:6152:53: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct inet6_dev *idev @@    got  inet6_dev *idev @@
   net/ipv6/addrconf.c:6152:53: sparse:    expected struct inet6_dev *idev
   net/ipv6/addrconf.c:6152:53: sparse:    got void const *extra1
   net/ipv6/addrconf.c:6235:30: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
   net/ipv6/addrconf.c:6235:30: sparse:    expected struct net *net
   net/ipv6/addrconf.c:6235:30: sparse:    got void const *extra2
   net/ipv6/addrconf.c:6282:45: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct inet6_dev *idev @@    got  inet6_dev *idev @@
   net/ipv6/addrconf.c:6282:45: sparse:    expected struct inet6_dev *idev
   net/ipv6/addrconf.c:6282:45: sparse:    got void const *extra1
--
>> net/ipv6/ndisc.c:1826:37: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net_device *dev @@    got net_device *dev @@
>> net/ipv6/ndisc.c:1826:37: sparse:    expected struct net_device *dev
>> net/ipv6/ndisc.c:1826:37: sparse:    got void const *extra1
--
>> net/decnet/dn_dev.c:252:39: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net_device *dev @@    got net_device *dev @@
>> net/decnet/dn_dev.c:252:39: sparse:    expected struct net_device *dev
>> net/decnet/dn_dev.c:252:39: sparse:    got void const *extra1
--
>> fs/fscache/main.c:61:46: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct workqueue_struct **wqp @@    got ue_struct **wqp @@
>> fs/fscache/main.c:61:46: sparse:    expected struct workqueue_struct **wqp
>> fs/fscache/main.c:61:46: sparse:    got void const *extra1
--
>> net/mpls/af_mpls.c:1370:44: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct mpls_dev *mdev @@    got t mpls_dev *mdev @@
>> net/mpls/af_mpls.c:1370:44: sparse:    expected struct mpls_dev *mdev
>> net/mpls/af_mpls.c:1370:44: sparse:    got void const *extra1
>> net/mpls/af_mpls.c:1372:38: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
>> net/mpls/af_mpls.c:1372:38: sparse:    expected struct net *net
>> net/mpls/af_mpls.c:1372:38: sparse:    got void const *extra2
--
>> net/netfilter/nf_log.c:422:32: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct net *net @@    got struct net *net @@
>> net/netfilter/nf_log.c:422:32: sparse:    expected struct net *net
>> net/netfilter/nf_log.c:422:32: sparse:    got void const *extra2
--
>> net/netfilter/ipvs/ip_vs_ctl.c:1664:40: sparse: sparse: incorrect type in initializer (different modifiers) @@    expected struct netns_ipvs *ipvs @@    got netns_ipvs *ipvs @@
>> net/netfilter/ipvs/ip_vs_ctl.c:1664:40: sparse:    expected struct netns_ipvs *ipvs
>> net/netfilter/ipvs/ip_vs_ctl.c:1664:40: sparse:    got void const *extra2
   net/netfilter/ipvs/ip_vs_ctl.c:1298:27: sparse: sparse: dereference of noderef expression

vim +6029 net/ipv6/addrconf.c

^1da177e Linus Torvalds    2005-04-16  6024  
77751427 Marcelo Leitner   2015-02-23  6025  static
77751427 Marcelo Leitner   2015-02-23  6026  int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
77751427 Marcelo Leitner   2015-02-23  6027  			void __user *buffer, size_t *lenp, loff_t *ppos)
77751427 Marcelo Leitner   2015-02-23  6028  {
77751427 Marcelo Leitner   2015-02-23 @6029  	struct inet6_dev *idev = ctl->extra1;
77751427 Marcelo Leitner   2015-02-23  6030  	int min_mtu = IPV6_MIN_MTU;
77751427 Marcelo Leitner   2015-02-23  6031  	struct ctl_table lctl;
77751427 Marcelo Leitner   2015-02-23  6032  
77751427 Marcelo Leitner   2015-02-23  6033  	lctl = *ctl;
77751427 Marcelo Leitner   2015-02-23  6034  	lctl.extra1 = &min_mtu;
77751427 Marcelo Leitner   2015-02-23  6035  	lctl.extra2 = idev ? &idev->dev->mtu : NULL;
77751427 Marcelo Leitner   2015-02-23  6036  
77751427 Marcelo Leitner   2015-02-23  6037  	return proc_dointvec_minmax(&lctl, write, buffer, lenp, ppos);
77751427 Marcelo Leitner   2015-02-23  6038  }
77751427 Marcelo Leitner   2015-02-23  6039  
56d417b1 Brian Haley       2009-06-01  6040  static void dev_disable_change(struct inet6_dev *idev)
56d417b1 Brian Haley       2009-06-01  6041  {
75538c2b Cong Wang         2013-05-29  6042  	struct netdev_notifier_info info;
75538c2b Cong Wang         2013-05-29  6043  
56d417b1 Brian Haley       2009-06-01  6044  	if (!idev || !idev->dev)
56d417b1 Brian Haley       2009-06-01  6045  		return;
56d417b1 Brian Haley       2009-06-01  6046  
75538c2b Cong Wang         2013-05-29  6047  	netdev_notifier_info_init(&info, idev->dev);
56d417b1 Brian Haley       2009-06-01  6048  	if (idev->cnf.disable_ipv6)
75538c2b Cong Wang         2013-05-29  6049  		addrconf_notify(NULL, NETDEV_DOWN, &info);
56d417b1 Brian Haley       2009-06-01  6050  	else
75538c2b Cong Wang         2013-05-29  6051  		addrconf_notify(NULL, NETDEV_UP, &info);
56d417b1 Brian Haley       2009-06-01  6052  }
56d417b1 Brian Haley       2009-06-01  6053  
56d417b1 Brian Haley       2009-06-01  6054  static void addrconf_disable_change(struct net *net, __s32 newf)
56d417b1 Brian Haley       2009-06-01  6055  {
56d417b1 Brian Haley       2009-06-01  6056  	struct net_device *dev;
56d417b1 Brian Haley       2009-06-01  6057  	struct inet6_dev *idev;
56d417b1 Brian Haley       2009-06-01  6058  
03e4deff Kefeng Wang       2017-01-19  6059  	for_each_netdev(net, dev) {
56d417b1 Brian Haley       2009-06-01  6060  		idev = __in6_dev_get(dev);
56d417b1 Brian Haley       2009-06-01  6061  		if (idev) {
56d417b1 Brian Haley       2009-06-01  6062  			int changed = (!idev->cnf.disable_ipv6) ^ (!newf);
56d417b1 Brian Haley       2009-06-01  6063  			idev->cnf.disable_ipv6 = newf;
56d417b1 Brian Haley       2009-06-01  6064  			if (changed)
56d417b1 Brian Haley       2009-06-01  6065  				dev_disable_change(idev);
56d417b1 Brian Haley       2009-06-01  6066  		}
56d417b1 Brian Haley       2009-06-01  6067  	}
56d417b1 Brian Haley       2009-06-01  6068  }
56d417b1 Brian Haley       2009-06-01  6069  
013d97e9 Francesco Ruggeri 2012-01-16  6070  static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int newf)
56d417b1 Brian Haley       2009-06-01  6071  {
56d417b1 Brian Haley       2009-06-01  6072  	struct net *net;
013d97e9 Francesco Ruggeri 2012-01-16  6073  	int old;
013d97e9 Francesco Ruggeri 2012-01-16  6074  
013d97e9 Francesco Ruggeri 2012-01-16  6075  	if (!rtnl_trylock())
013d97e9 Francesco Ruggeri 2012-01-16  6076  		return restart_syscall();
56d417b1 Brian Haley       2009-06-01  6077  
56d417b1 Brian Haley       2009-06-01  6078  	net = (struct net *)table->extra2;
013d97e9 Francesco Ruggeri 2012-01-16  6079  	old = *p;
013d97e9 Francesco Ruggeri 2012-01-16  6080  	*p = newf;
56d417b1 Brian Haley       2009-06-01  6081  
013d97e9 Francesco Ruggeri 2012-01-16  6082  	if (p == &net->ipv6.devconf_dflt->disable_ipv6) {
013d97e9 Francesco Ruggeri 2012-01-16  6083  		rtnl_unlock();
56d417b1 Brian Haley       2009-06-01  6084  		return 0;
88af182e Eric W. Biederman 2010-02-19  6085  	}
56d417b1 Brian Haley       2009-06-01  6086  
56d417b1 Brian Haley       2009-06-01  6087  	if (p == &net->ipv6.devconf_all->disable_ipv6) {
56d417b1 Brian Haley       2009-06-01  6088  		net->ipv6.devconf_dflt->disable_ipv6 = newf;
56d417b1 Brian Haley       2009-06-01  6089  		addrconf_disable_change(net, newf);
013d97e9 Francesco Ruggeri 2012-01-16  6090  	} else if ((!newf) ^ (!old))
56d417b1 Brian Haley       2009-06-01  6091  		dev_disable_change((struct inet6_dev *)table->extra1);
56d417b1 Brian Haley       2009-06-01  6092  
56d417b1 Brian Haley       2009-06-01  6093  	rtnl_unlock();
56d417b1 Brian Haley       2009-06-01  6094  	return 0;
56d417b1 Brian Haley       2009-06-01  6095  }
56d417b1 Brian Haley       2009-06-01  6096  
56d417b1 Brian Haley       2009-06-01  6097  static
fe2c6338 Joe Perches       2013-06-11  6098  int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
56d417b1 Brian Haley       2009-06-01  6099  			    void __user *buffer, size_t *lenp, loff_t *ppos)
56d417b1 Brian Haley       2009-06-01  6100  {
56d417b1 Brian Haley       2009-06-01  6101  	int *valp = ctl->data;
56d417b1 Brian Haley       2009-06-01  6102  	int val = *valp;
88af182e Eric W. Biederman 2010-02-19  6103  	loff_t pos = *ppos;
fe2c6338 Joe Perches       2013-06-11  6104  	struct ctl_table lctl;
56d417b1 Brian Haley       2009-06-01  6105  	int ret;
56d417b1 Brian Haley       2009-06-01  6106  
013d97e9 Francesco Ruggeri 2012-01-16  6107  	/*
013d97e9 Francesco Ruggeri 2012-01-16  6108  	 * ctl->data points to idev->cnf.disable_ipv6, we should
013d97e9 Francesco Ruggeri 2012-01-16  6109  	 * not modify it until we get the rtnl lock.
013d97e9 Francesco Ruggeri 2012-01-16  6110  	 */
013d97e9 Francesco Ruggeri 2012-01-16  6111  	lctl = *ctl;
013d97e9 Francesco Ruggeri 2012-01-16  6112  	lctl.data = &val;
013d97e9 Francesco Ruggeri 2012-01-16  6113  
013d97e9 Francesco Ruggeri 2012-01-16  6114  	ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
56d417b1 Brian Haley       2009-06-01  6115  
56d417b1 Brian Haley       2009-06-01  6116  	if (write)
56d417b1 Brian Haley       2009-06-01  6117  		ret = addrconf_disable_ipv6(ctl, valp, val);
88af182e Eric W. Biederman 2010-02-19  6118  	if (ret)
88af182e Eric W. Biederman 2010-02-19  6119  		*ppos = pos;
56d417b1 Brian Haley       2009-06-01  6120  	return ret;
56d417b1 Brian Haley       2009-06-01  6121  }
56d417b1 Brian Haley       2009-06-01  6122  
c92d5491 stephen hemminger 2013-12-17  6123  static
c92d5491 stephen hemminger 2013-12-17  6124  int addrconf_sysctl_proxy_ndp(struct ctl_table *ctl, int write,
c92d5491 stephen hemminger 2013-12-17  6125  			      void __user *buffer, size_t *lenp, loff_t *ppos)
c92d5491 stephen hemminger 2013-12-17  6126  {
c92d5491 stephen hemminger 2013-12-17  6127  	int *valp = ctl->data;
c92d5491 stephen hemminger 2013-12-17  6128  	int ret;
c92d5491 stephen hemminger 2013-12-17  6129  	int old, new;
c92d5491 stephen hemminger 2013-12-17  6130  
c92d5491 stephen hemminger 2013-12-17  6131  	old = *valp;
c92d5491 stephen hemminger 2013-12-17  6132  	ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
c92d5491 stephen hemminger 2013-12-17  6133  	new = *valp;
c92d5491 stephen hemminger 2013-12-17  6134  
c92d5491 stephen hemminger 2013-12-17  6135  	if (write && old != new) {
c92d5491 stephen hemminger 2013-12-17 @6136  		struct net *net = ctl->extra2;
c92d5491 stephen hemminger 2013-12-17  6137  
c92d5491 stephen hemminger 2013-12-17  6138  		if (!rtnl_trylock())
c92d5491 stephen hemminger 2013-12-17  6139  			return restart_syscall();
c92d5491 stephen hemminger 2013-12-17  6140  
c92d5491 stephen hemminger 2013-12-17  6141  		if (valp == &net->ipv6.devconf_dflt->proxy_ndp)
85b3daad David Ahern       2017-03-28  6142  			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
85b3daad David Ahern       2017-03-28  6143  						     NETCONFA_PROXY_NEIGH,
c92d5491 stephen hemminger 2013-12-17  6144  						     NETCONFA_IFINDEX_DEFAULT,
c92d5491 stephen hemminger 2013-12-17  6145  						     net->ipv6.devconf_dflt);
c92d5491 stephen hemminger 2013-12-17  6146  		else if (valp == &net->ipv6.devconf_all->proxy_ndp)
85b3daad David Ahern       2017-03-28  6147  			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
85b3daad David Ahern       2017-03-28  6148  						     NETCONFA_PROXY_NEIGH,
c92d5491 stephen hemminger 2013-12-17  6149  						     NETCONFA_IFINDEX_ALL,
c92d5491 stephen hemminger 2013-12-17  6150  						     net->ipv6.devconf_all);
c92d5491 stephen hemminger 2013-12-17  6151  		else {
c92d5491 stephen hemminger 2013-12-17  6152  			struct inet6_dev *idev = ctl->extra1;
c92d5491 stephen hemminger 2013-12-17  6153  
85b3daad David Ahern       2017-03-28  6154  			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
85b3daad David Ahern       2017-03-28  6155  						     NETCONFA_PROXY_NEIGH,
c92d5491 stephen hemminger 2013-12-17  6156  						     idev->dev->ifindex,
c92d5491 stephen hemminger 2013-12-17  6157  						     &idev->cnf);
c92d5491 stephen hemminger 2013-12-17  6158  		}
c92d5491 stephen hemminger 2013-12-17  6159  		rtnl_unlock();
c92d5491 stephen hemminger 2013-12-17  6160  	}
c92d5491 stephen hemminger 2013-12-17  6161  
c92d5491 stephen hemminger 2013-12-17  6162  	return ret;
c92d5491 stephen hemminger 2013-12-17  6163  }
c92d5491 stephen hemminger 2013-12-17  6164  

:::::: The code at line 6029 was first introduced by commit
:::::: 77751427a1ff25b27d47a4c36b12c3c8667855ac ipv6: addrconf: validate new MTU before applying it

:::::: TO: Marcelo Leitner <mleitner@xxxxxxxxxx>
:::::: CC: David S. Miller <davem@xxxxxxxxxxxxx>

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



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux