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

From: kbuild test robot
Date: Tue Apr 30 2019 - 09:18:50 EST


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