1  // SPDX-License-Identifier: GPL-2.0-or-later
2  /*
3   *	NET3	IP device support routines.
4   *
5   *	Derived from the IP parts of dev.c 1.0.19
6   * 		Authors:	Ross Biro
7   *				Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
8   *				Mark Evans, <evansmp@uhura.aston.ac.uk>
9   *
10   *	Additional Authors:
11   *		Alan Cox, <gw4pts@gw4pts.ampr.org>
12   *		Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
13   *
14   *	Changes:
15   *		Alexey Kuznetsov:	pa_* fields are replaced with ifaddr
16   *					lists.
17   *		Cyrus Durgin:		updated for kmod
18   *		Matthias Andree:	in devinet_ioctl, compare label and
19   *					address (4.4BSD alias style support),
20   *					fall back to comparing just the label
21   *					if no match found.
22   */
23  
24  
25  #include <linux/uaccess.h>
26  #include <linux/bitops.h>
27  #include <linux/capability.h>
28  #include <linux/module.h>
29  #include <linux/types.h>
30  #include <linux/kernel.h>
31  #include <linux/sched/signal.h>
32  #include <linux/string.h>
33  #include <linux/mm.h>
34  #include <linux/socket.h>
35  #include <linux/sockios.h>
36  #include <linux/in.h>
37  #include <linux/errno.h>
38  #include <linux/interrupt.h>
39  #include <linux/if_addr.h>
40  #include <linux/if_ether.h>
41  #include <linux/inet.h>
42  #include <linux/netdevice.h>
43  #include <linux/etherdevice.h>
44  #include <linux/skbuff.h>
45  #include <linux/init.h>
46  #include <linux/notifier.h>
47  #include <linux/inetdevice.h>
48  #include <linux/igmp.h>
49  #include <linux/slab.h>
50  #include <linux/hash.h>
51  #ifdef CONFIG_SYSCTL
52  #include <linux/sysctl.h>
53  #endif
54  #include <linux/kmod.h>
55  #include <linux/netconf.h>
56  
57  #include <net/arp.h>
58  #include <net/ip.h>
59  #include <net/route.h>
60  #include <net/ip_fib.h>
61  #include <net/rtnetlink.h>
62  #include <net/net_namespace.h>
63  #include <net/addrconf.h>
64  
65  #define IPV6ONLY_FLAGS	\
66  		(IFA_F_NODAD | IFA_F_OPTIMISTIC | IFA_F_DADFAILED | \
67  		 IFA_F_HOMEADDRESS | IFA_F_TENTATIVE | \
68  		 IFA_F_MANAGETEMPADDR | IFA_F_STABLE_PRIVACY)
69  
70  static struct ipv4_devconf ipv4_devconf = {
71  	.data = {
72  		[IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
73  		[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
74  		[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
75  		[IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
76  		[IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/,
77  		[IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] =  1000 /*ms*/,
78  		[IPV4_DEVCONF_ARP_EVICT_NOCARRIER - 1] = 1,
79  	},
80  };
81  
82  static struct ipv4_devconf ipv4_devconf_dflt = {
83  	.data = {
84  		[IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
85  		[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
86  		[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
87  		[IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
88  		[IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1,
89  		[IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/,
90  		[IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] =  1000 /*ms*/,
91  		[IPV4_DEVCONF_ARP_EVICT_NOCARRIER - 1] = 1,
92  	},
93  };
94  
95  #define IPV4_DEVCONF_DFLT(net, attr) \
96  	IPV4_DEVCONF((*net->ipv4.devconf_dflt), attr)
97  
98  static const struct nla_policy ifa_ipv4_policy[IFA_MAX+1] = {
99  	[IFA_LOCAL]     	= { .type = NLA_U32 },
100  	[IFA_ADDRESS]   	= { .type = NLA_U32 },
101  	[IFA_BROADCAST] 	= { .type = NLA_U32 },
102  	[IFA_LABEL]     	= { .type = NLA_STRING, .len = IFNAMSIZ - 1 },
103  	[IFA_CACHEINFO]		= { .len = sizeof(struct ifa_cacheinfo) },
104  	[IFA_FLAGS]		= { .type = NLA_U32 },
105  	[IFA_RT_PRIORITY]	= { .type = NLA_U32 },
106  	[IFA_TARGET_NETNSID]	= { .type = NLA_S32 },
107  	[IFA_PROTO]		= { .type = NLA_U8 },
108  };
109  
110  struct inet_fill_args {
111  	u32 portid;
112  	u32 seq;
113  	int event;
114  	unsigned int flags;
115  	int netnsid;
116  	int ifindex;
117  };
118  
119  #define IN4_ADDR_HSIZE_SHIFT	8
120  #define IN4_ADDR_HSIZE		(1U << IN4_ADDR_HSIZE_SHIFT)
121  
122  static struct hlist_head inet_addr_lst[IN4_ADDR_HSIZE];
123  
inet_addr_hash(const struct net * net,__be32 addr)124  static u32 inet_addr_hash(const struct net *net, __be32 addr)
125  {
126  	u32 val = (__force u32) addr ^ net_hash_mix(net);
127  
128  	return hash_32(val, IN4_ADDR_HSIZE_SHIFT);
129  }
130  
inet_hash_insert(struct net * net,struct in_ifaddr * ifa)131  static void inet_hash_insert(struct net *net, struct in_ifaddr *ifa)
132  {
133  	u32 hash = inet_addr_hash(net, ifa->ifa_local);
134  
135  	ASSERT_RTNL();
136  	hlist_add_head_rcu(&ifa->hash, &inet_addr_lst[hash]);
137  }
138  
inet_hash_remove(struct in_ifaddr * ifa)139  static void inet_hash_remove(struct in_ifaddr *ifa)
140  {
141  	ASSERT_RTNL();
142  	hlist_del_init_rcu(&ifa->hash);
143  }
144  
145  /**
146   * __ip_dev_find - find the first device with a given source address.
147   * @net: the net namespace
148   * @addr: the source address
149   * @devref: if true, take a reference on the found device
150   *
151   * If a caller uses devref=false, it should be protected by RCU, or RTNL
152   */
__ip_dev_find(struct net * net,__be32 addr,bool devref)153  struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref)
154  {
155  	struct net_device *result = NULL;
156  	struct in_ifaddr *ifa;
157  
158  	rcu_read_lock();
159  	ifa = inet_lookup_ifaddr_rcu(net, addr);
160  	if (!ifa) {
161  		struct flowi4 fl4 = { .daddr = addr };
162  		struct fib_result res = { 0 };
163  		struct fib_table *local;
164  
165  		/* Fallback to FIB local table so that communication
166  		 * over loopback subnets work.
167  		 */
168  		local = fib_get_table(net, RT_TABLE_LOCAL);
169  		if (local &&
170  		    !fib_table_lookup(local, &fl4, &res, FIB_LOOKUP_NOREF) &&
171  		    res.type == RTN_LOCAL)
172  			result = FIB_RES_DEV(res);
173  	} else {
174  		result = ifa->ifa_dev->dev;
175  	}
176  	if (result && devref)
177  		dev_hold(result);
178  	rcu_read_unlock();
179  	return result;
180  }
181  EXPORT_SYMBOL(__ip_dev_find);
182  
183  /* called under RCU lock */
inet_lookup_ifaddr_rcu(struct net * net,__be32 addr)184  struct in_ifaddr *inet_lookup_ifaddr_rcu(struct net *net, __be32 addr)
185  {
186  	u32 hash = inet_addr_hash(net, addr);
187  	struct in_ifaddr *ifa;
188  
189  	hlist_for_each_entry_rcu(ifa, &inet_addr_lst[hash], hash)
190  		if (ifa->ifa_local == addr &&
191  		    net_eq(dev_net(ifa->ifa_dev->dev), net))
192  			return ifa;
193  
194  	return NULL;
195  }
196  
197  static void rtmsg_ifa(int event, struct in_ifaddr *, struct nlmsghdr *, u32);
198  
199  static BLOCKING_NOTIFIER_HEAD(inetaddr_chain);
200  static BLOCKING_NOTIFIER_HEAD(inetaddr_validator_chain);
201  static void inet_del_ifa(struct in_device *in_dev,
202  			 struct in_ifaddr __rcu **ifap,
203  			 int destroy);
204  #ifdef CONFIG_SYSCTL
205  static int devinet_sysctl_register(struct in_device *idev);
206  static void devinet_sysctl_unregister(struct in_device *idev);
207  #else
devinet_sysctl_register(struct in_device * idev)208  static int devinet_sysctl_register(struct in_device *idev)
209  {
210  	return 0;
211  }
devinet_sysctl_unregister(struct in_device * idev)212  static void devinet_sysctl_unregister(struct in_device *idev)
213  {
214  }
215  #endif
216  
217  /* Locks all the inet devices. */
218  
inet_alloc_ifa(struct in_device * in_dev)219  static struct in_ifaddr *inet_alloc_ifa(struct in_device *in_dev)
220  {
221  	struct in_ifaddr *ifa;
222  
223  	ifa = kzalloc(sizeof(*ifa), GFP_KERNEL_ACCOUNT);
224  	if (!ifa)
225  		return NULL;
226  
227  	in_dev_hold(in_dev);
228  	ifa->ifa_dev = in_dev;
229  
230  	INIT_HLIST_NODE(&ifa->hash);
231  
232  	return ifa;
233  }
234  
inet_rcu_free_ifa(struct rcu_head * head)235  static void inet_rcu_free_ifa(struct rcu_head *head)
236  {
237  	struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head);
238  
239  	in_dev_put(ifa->ifa_dev);
240  	kfree(ifa);
241  }
242  
inet_free_ifa(struct in_ifaddr * ifa)243  static void inet_free_ifa(struct in_ifaddr *ifa)
244  {
245  	/* Our reference to ifa->ifa_dev must be freed ASAP
246  	 * to release the reference to the netdev the same way.
247  	 * in_dev_put() -> in_dev_finish_destroy() -> netdev_put()
248  	 */
249  	call_rcu_hurry(&ifa->rcu_head, inet_rcu_free_ifa);
250  }
251  
in_dev_free_rcu(struct rcu_head * head)252  static void in_dev_free_rcu(struct rcu_head *head)
253  {
254  	struct in_device *idev = container_of(head, struct in_device, rcu_head);
255  
256  	kfree(rcu_dereference_protected(idev->mc_hash, 1));
257  	kfree(idev);
258  }
259  
in_dev_finish_destroy(struct in_device * idev)260  void in_dev_finish_destroy(struct in_device *idev)
261  {
262  	struct net_device *dev = idev->dev;
263  
264  	WARN_ON(idev->ifa_list);
265  	WARN_ON(idev->mc_list);
266  #ifdef NET_REFCNT_DEBUG
267  	pr_debug("%s: %p=%s\n", __func__, idev, dev ? dev->name : "NIL");
268  #endif
269  	netdev_put(dev, &idev->dev_tracker);
270  	if (!idev->dead)
271  		pr_err("Freeing alive in_device %p\n", idev);
272  	else
273  		call_rcu(&idev->rcu_head, in_dev_free_rcu);
274  }
275  EXPORT_SYMBOL(in_dev_finish_destroy);
276  
inetdev_init(struct net_device * dev)277  static struct in_device *inetdev_init(struct net_device *dev)
278  {
279  	struct in_device *in_dev;
280  	int err = -ENOMEM;
281  
282  	ASSERT_RTNL();
283  
284  	in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
285  	if (!in_dev)
286  		goto out;
287  	memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
288  			sizeof(in_dev->cnf));
289  	in_dev->cnf.sysctl = NULL;
290  	in_dev->dev = dev;
291  	in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl);
292  	if (!in_dev->arp_parms)
293  		goto out_kfree;
294  	if (IPV4_DEVCONF(in_dev->cnf, FORWARDING))
295  		dev_disable_lro(dev);
296  	/* Reference in_dev->dev */
297  	netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL);
298  	/* Account for reference dev->ip_ptr (below) */
299  	refcount_set(&in_dev->refcnt, 1);
300  
301  	if (dev != blackhole_netdev) {
302  		err = devinet_sysctl_register(in_dev);
303  		if (err) {
304  			in_dev->dead = 1;
305  			neigh_parms_release(&arp_tbl, in_dev->arp_parms);
306  			in_dev_put(in_dev);
307  			in_dev = NULL;
308  			goto out;
309  		}
310  		ip_mc_init_dev(in_dev);
311  		if (dev->flags & IFF_UP)
312  			ip_mc_up(in_dev);
313  	}
314  
315  	/* we can receive as soon as ip_ptr is set -- do this last */
316  	rcu_assign_pointer(dev->ip_ptr, in_dev);
317  out:
318  	return in_dev ?: ERR_PTR(err);
319  out_kfree:
320  	kfree(in_dev);
321  	in_dev = NULL;
322  	goto out;
323  }
324  
inetdev_destroy(struct in_device * in_dev)325  static void inetdev_destroy(struct in_device *in_dev)
326  {
327  	struct net_device *dev;
328  	struct in_ifaddr *ifa;
329  
330  	ASSERT_RTNL();
331  
332  	dev = in_dev->dev;
333  
334  	in_dev->dead = 1;
335  
336  	ip_mc_destroy_dev(in_dev);
337  
338  	while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) {
339  		inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
340  		inet_free_ifa(ifa);
341  	}
342  
343  	RCU_INIT_POINTER(dev->ip_ptr, NULL);
344  
345  	devinet_sysctl_unregister(in_dev);
346  	neigh_parms_release(&arp_tbl, in_dev->arp_parms);
347  	arp_ifdown(dev);
348  
349  	in_dev_put(in_dev);
350  }
351  
inet_blackhole_dev_init(void)352  static int __init inet_blackhole_dev_init(void)
353  {
354  	int err = 0;
355  
356  	rtnl_lock();
357  	if (!inetdev_init(blackhole_netdev))
358  		err = -ENOMEM;
359  	rtnl_unlock();
360  
361  	return err;
362  }
363  late_initcall(inet_blackhole_dev_init);
364  
inet_addr_onlink(struct in_device * in_dev,__be32 a,__be32 b)365  int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b)
366  {
367  	const struct in_ifaddr *ifa;
368  
369  	rcu_read_lock();
370  	in_dev_for_each_ifa_rcu(ifa, in_dev) {
371  		if (inet_ifa_match(a, ifa)) {
372  			if (!b || inet_ifa_match(b, ifa)) {
373  				rcu_read_unlock();
374  				return 1;
375  			}
376  		}
377  	}
378  	rcu_read_unlock();
379  	return 0;
380  }
381  
__inet_del_ifa(struct in_device * in_dev,struct in_ifaddr __rcu ** ifap,int destroy,struct nlmsghdr * nlh,u32 portid)382  static void __inet_del_ifa(struct in_device *in_dev,
383  			   struct in_ifaddr __rcu **ifap,
384  			   int destroy, struct nlmsghdr *nlh, u32 portid)
385  {
386  	struct in_ifaddr *promote = NULL;
387  	struct in_ifaddr *ifa, *ifa1;
388  	struct in_ifaddr __rcu **last_prim;
389  	struct in_ifaddr *prev_prom = NULL;
390  	int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
391  
392  	ASSERT_RTNL();
393  
394  	ifa1 = rtnl_dereference(*ifap);
395  	last_prim = ifap;
396  	if (in_dev->dead)
397  		goto no_promotions;
398  
399  	/* 1. Deleting primary ifaddr forces deletion all secondaries
400  	 * unless alias promotion is set
401  	 **/
402  
403  	if (!(ifa1->ifa_flags & IFA_F_SECONDARY)) {
404  		struct in_ifaddr __rcu **ifap1 = &ifa1->ifa_next;
405  
406  		while ((ifa = rtnl_dereference(*ifap1)) != NULL) {
407  			if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
408  			    ifa1->ifa_scope <= ifa->ifa_scope)
409  				last_prim = &ifa->ifa_next;
410  
411  			if (!(ifa->ifa_flags & IFA_F_SECONDARY) ||
412  			    ifa1->ifa_mask != ifa->ifa_mask ||
413  			    !inet_ifa_match(ifa1->ifa_address, ifa)) {
414  				ifap1 = &ifa->ifa_next;
415  				prev_prom = ifa;
416  				continue;
417  			}
418  
419  			if (!do_promote) {
420  				inet_hash_remove(ifa);
421  				*ifap1 = ifa->ifa_next;
422  
423  				rtmsg_ifa(RTM_DELADDR, ifa, nlh, portid);
424  				blocking_notifier_call_chain(&inetaddr_chain,
425  						NETDEV_DOWN, ifa);
426  				inet_free_ifa(ifa);
427  			} else {
428  				promote = ifa;
429  				break;
430  			}
431  		}
432  	}
433  
434  	/* On promotion all secondaries from subnet are changing
435  	 * the primary IP, we must remove all their routes silently
436  	 * and later to add them back with new prefsrc. Do this
437  	 * while all addresses are on the device list.
438  	 */
439  	for (ifa = promote; ifa; ifa = rtnl_dereference(ifa->ifa_next)) {
440  		if (ifa1->ifa_mask == ifa->ifa_mask &&
441  		    inet_ifa_match(ifa1->ifa_address, ifa))
442  			fib_del_ifaddr(ifa, ifa1);
443  	}
444  
445  no_promotions:
446  	/* 2. Unlink it */
447  
448  	*ifap = ifa1->ifa_next;
449  	inet_hash_remove(ifa1);
450  
451  	/* 3. Announce address deletion */
452  
453  	/* Send message first, then call notifier.
454  	   At first sight, FIB update triggered by notifier
455  	   will refer to already deleted ifaddr, that could confuse
456  	   netlink listeners. It is not true: look, gated sees
457  	   that route deleted and if it still thinks that ifaddr
458  	   is valid, it will try to restore deleted routes... Grr.
459  	   So that, this order is correct.
460  	 */
461  	rtmsg_ifa(RTM_DELADDR, ifa1, nlh, portid);
462  	blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1);
463  
464  	if (promote) {
465  		struct in_ifaddr *next_sec;
466  
467  		next_sec = rtnl_dereference(promote->ifa_next);
468  		if (prev_prom) {
469  			struct in_ifaddr *last_sec;
470  
471  			rcu_assign_pointer(prev_prom->ifa_next, next_sec);
472  
473  			last_sec = rtnl_dereference(*last_prim);
474  			rcu_assign_pointer(promote->ifa_next, last_sec);
475  			rcu_assign_pointer(*last_prim, promote);
476  		}
477  
478  		promote->ifa_flags &= ~IFA_F_SECONDARY;
479  		rtmsg_ifa(RTM_NEWADDR, promote, nlh, portid);
480  		blocking_notifier_call_chain(&inetaddr_chain,
481  				NETDEV_UP, promote);
482  		for (ifa = next_sec; ifa;
483  		     ifa = rtnl_dereference(ifa->ifa_next)) {
484  			if (ifa1->ifa_mask != ifa->ifa_mask ||
485  			    !inet_ifa_match(ifa1->ifa_address, ifa))
486  					continue;
487  			fib_add_ifaddr(ifa);
488  		}
489  
490  	}
491  	if (destroy)
492  		inet_free_ifa(ifa1);
493  }
494  
inet_del_ifa(struct in_device * in_dev,struct in_ifaddr __rcu ** ifap,int destroy)495  static void inet_del_ifa(struct in_device *in_dev,
496  			 struct in_ifaddr __rcu **ifap,
497  			 int destroy)
498  {
499  	__inet_del_ifa(in_dev, ifap, destroy, NULL, 0);
500  }
501  
502  static void check_lifetime(struct work_struct *work);
503  
504  static DECLARE_DELAYED_WORK(check_lifetime_work, check_lifetime);
505  
__inet_insert_ifa(struct in_ifaddr * ifa,struct nlmsghdr * nlh,u32 portid,struct netlink_ext_ack * extack)506  static int __inet_insert_ifa(struct in_ifaddr *ifa, struct nlmsghdr *nlh,
507  			     u32 portid, struct netlink_ext_ack *extack)
508  {
509  	struct in_ifaddr __rcu **last_primary, **ifap;
510  	struct in_device *in_dev = ifa->ifa_dev;
511  	struct in_validator_info ivi;
512  	struct in_ifaddr *ifa1;
513  	int ret;
514  
515  	ASSERT_RTNL();
516  
517  	if (!ifa->ifa_local) {
518  		inet_free_ifa(ifa);
519  		return 0;
520  	}
521  
522  	ifa->ifa_flags &= ~IFA_F_SECONDARY;
523  	last_primary = &in_dev->ifa_list;
524  
525  	/* Don't set IPv6 only flags to IPv4 addresses */
526  	ifa->ifa_flags &= ~IPV6ONLY_FLAGS;
527  
528  	ifap = &in_dev->ifa_list;
529  	ifa1 = rtnl_dereference(*ifap);
530  
531  	while (ifa1) {
532  		if (!(ifa1->ifa_flags & IFA_F_SECONDARY) &&
533  		    ifa->ifa_scope <= ifa1->ifa_scope)
534  			last_primary = &ifa1->ifa_next;
535  		if (ifa1->ifa_mask == ifa->ifa_mask &&
536  		    inet_ifa_match(ifa1->ifa_address, ifa)) {
537  			if (ifa1->ifa_local == ifa->ifa_local) {
538  				inet_free_ifa(ifa);
539  				return -EEXIST;
540  			}
541  			if (ifa1->ifa_scope != ifa->ifa_scope) {
542  				NL_SET_ERR_MSG(extack, "ipv4: Invalid scope value");
543  				inet_free_ifa(ifa);
544  				return -EINVAL;
545  			}
546  			ifa->ifa_flags |= IFA_F_SECONDARY;
547  		}
548  
549  		ifap = &ifa1->ifa_next;
550  		ifa1 = rtnl_dereference(*ifap);
551  	}
552  
553  	/* Allow any devices that wish to register ifaddr validtors to weigh
554  	 * in now, before changes are committed.  The rntl lock is serializing
555  	 * access here, so the state should not change between a validator call
556  	 * and a final notify on commit.  This isn't invoked on promotion under
557  	 * the assumption that validators are checking the address itself, and
558  	 * not the flags.
559  	 */
560  	ivi.ivi_addr = ifa->ifa_address;
561  	ivi.ivi_dev = ifa->ifa_dev;
562  	ivi.extack = extack;
563  	ret = blocking_notifier_call_chain(&inetaddr_validator_chain,
564  					   NETDEV_UP, &ivi);
565  	ret = notifier_to_errno(ret);
566  	if (ret) {
567  		inet_free_ifa(ifa);
568  		return ret;
569  	}
570  
571  	if (!(ifa->ifa_flags & IFA_F_SECONDARY))
572  		ifap = last_primary;
573  
574  	rcu_assign_pointer(ifa->ifa_next, *ifap);
575  	rcu_assign_pointer(*ifap, ifa);
576  
577  	inet_hash_insert(dev_net(in_dev->dev), ifa);
578  
579  	cancel_delayed_work(&check_lifetime_work);
580  	queue_delayed_work(system_power_efficient_wq, &check_lifetime_work, 0);
581  
582  	/* Send message first, then call notifier.
583  	   Notifier will trigger FIB update, so that
584  	   listeners of netlink will know about new ifaddr */
585  	rtmsg_ifa(RTM_NEWADDR, ifa, nlh, portid);
586  	blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa);
587  
588  	return 0;
589  }
590  
inet_insert_ifa(struct in_ifaddr * ifa)591  static int inet_insert_ifa(struct in_ifaddr *ifa)
592  {
593  	return __inet_insert_ifa(ifa, NULL, 0, NULL);
594  }
595  
inet_set_ifa(struct net_device * dev,struct in_ifaddr * ifa)596  static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
597  {
598  	struct in_device *in_dev = __in_dev_get_rtnl(dev);
599  
600  	ASSERT_RTNL();
601  
602  	ipv4_devconf_setall(in_dev);
603  	neigh_parms_data_state_setall(in_dev->arp_parms);
604  
605  	if (ipv4_is_loopback(ifa->ifa_local))
606  		ifa->ifa_scope = RT_SCOPE_HOST;
607  	return inet_insert_ifa(ifa);
608  }
609  
610  /* Caller must hold RCU or RTNL :
611   * We dont take a reference on found in_device
612   */
inetdev_by_index(struct net * net,int ifindex)613  struct in_device *inetdev_by_index(struct net *net, int ifindex)
614  {
615  	struct net_device *dev;
616  	struct in_device *in_dev = NULL;
617  
618  	rcu_read_lock();
619  	dev = dev_get_by_index_rcu(net, ifindex);
620  	if (dev)
621  		in_dev = rcu_dereference_rtnl(dev->ip_ptr);
622  	rcu_read_unlock();
623  	return in_dev;
624  }
625  EXPORT_SYMBOL(inetdev_by_index);
626  
627  /* Called only from RTNL semaphored context. No locks. */
628  
inet_ifa_byprefix(struct in_device * in_dev,__be32 prefix,__be32 mask)629  struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix,
630  				    __be32 mask)
631  {
632  	struct in_ifaddr *ifa;
633  
634  	ASSERT_RTNL();
635  
636  	in_dev_for_each_ifa_rtnl(ifa, in_dev) {
637  		if (ifa->ifa_mask == mask && inet_ifa_match(prefix, ifa))
638  			return ifa;
639  	}
640  	return NULL;
641  }
642  
ip_mc_autojoin_config(struct net * net,bool join,const struct in_ifaddr * ifa)643  static int ip_mc_autojoin_config(struct net *net, bool join,
644  				 const struct in_ifaddr *ifa)
645  {
646  #if defined(CONFIG_IP_MULTICAST)
647  	struct ip_mreqn mreq = {
648  		.imr_multiaddr.s_addr = ifa->ifa_address,
649  		.imr_ifindex = ifa->ifa_dev->dev->ifindex,
650  	};
651  	struct sock *sk = net->ipv4.mc_autojoin_sk;
652  	int ret;
653  
654  	ASSERT_RTNL();
655  
656  	lock_sock(sk);
657  	if (join)
658  		ret = ip_mc_join_group(sk, &mreq);
659  	else
660  		ret = ip_mc_leave_group(sk, &mreq);
661  	release_sock(sk);
662  
663  	return ret;
664  #else
665  	return -EOPNOTSUPP;
666  #endif
667  }
668  
inet_rtm_deladdr(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)669  static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
670  			    struct netlink_ext_ack *extack)
671  {
672  	struct net *net = sock_net(skb->sk);
673  	struct in_ifaddr __rcu **ifap;
674  	struct nlattr *tb[IFA_MAX+1];
675  	struct in_device *in_dev;
676  	struct ifaddrmsg *ifm;
677  	struct in_ifaddr *ifa;
678  	int err;
679  
680  	ASSERT_RTNL();
681  
682  	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
683  				     ifa_ipv4_policy, extack);
684  	if (err < 0)
685  		goto errout;
686  
687  	ifm = nlmsg_data(nlh);
688  	in_dev = inetdev_by_index(net, ifm->ifa_index);
689  	if (!in_dev) {
690  		NL_SET_ERR_MSG(extack, "ipv4: Device not found");
691  		err = -ENODEV;
692  		goto errout;
693  	}
694  
695  	for (ifap = &in_dev->ifa_list; (ifa = rtnl_dereference(*ifap)) != NULL;
696  	     ifap = &ifa->ifa_next) {
697  		if (tb[IFA_LOCAL] &&
698  		    ifa->ifa_local != nla_get_in_addr(tb[IFA_LOCAL]))
699  			continue;
700  
701  		if (tb[IFA_LABEL] && nla_strcmp(tb[IFA_LABEL], ifa->ifa_label))
702  			continue;
703  
704  		if (tb[IFA_ADDRESS] &&
705  		    (ifm->ifa_prefixlen != ifa->ifa_prefixlen ||
706  		    !inet_ifa_match(nla_get_in_addr(tb[IFA_ADDRESS]), ifa)))
707  			continue;
708  
709  		if (ipv4_is_multicast(ifa->ifa_address))
710  			ip_mc_autojoin_config(net, false, ifa);
711  		__inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid);
712  		return 0;
713  	}
714  
715  	NL_SET_ERR_MSG(extack, "ipv4: Address not found");
716  	err = -EADDRNOTAVAIL;
717  errout:
718  	return err;
719  }
720  
check_lifetime(struct work_struct * work)721  static void check_lifetime(struct work_struct *work)
722  {
723  	unsigned long now, next, next_sec, next_sched;
724  	struct in_ifaddr *ifa;
725  	struct hlist_node *n;
726  	int i;
727  
728  	now = jiffies;
729  	next = round_jiffies_up(now + ADDR_CHECK_FREQUENCY);
730  
731  	for (i = 0; i < IN4_ADDR_HSIZE; i++) {
732  		bool change_needed = false;
733  
734  		rcu_read_lock();
735  		hlist_for_each_entry_rcu(ifa, &inet_addr_lst[i], hash) {
736  			unsigned long age, tstamp;
737  			u32 preferred_lft;
738  			u32 valid_lft;
739  			u32 flags;
740  
741  			flags = READ_ONCE(ifa->ifa_flags);
742  			if (flags & IFA_F_PERMANENT)
743  				continue;
744  
745  			preferred_lft = READ_ONCE(ifa->ifa_preferred_lft);
746  			valid_lft = READ_ONCE(ifa->ifa_valid_lft);
747  			tstamp = READ_ONCE(ifa->ifa_tstamp);
748  			/* We try to batch several events at once. */
749  			age = (now - tstamp +
750  			       ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
751  
752  			if (valid_lft != INFINITY_LIFE_TIME &&
753  			    age >= valid_lft) {
754  				change_needed = true;
755  			} else if (preferred_lft ==
756  				   INFINITY_LIFE_TIME) {
757  				continue;
758  			} else if (age >= preferred_lft) {
759  				if (time_before(tstamp + valid_lft * HZ, next))
760  					next = tstamp + valid_lft * HZ;
761  
762  				if (!(flags & IFA_F_DEPRECATED))
763  					change_needed = true;
764  			} else if (time_before(tstamp + preferred_lft * HZ,
765  					       next)) {
766  				next = tstamp + preferred_lft * HZ;
767  			}
768  		}
769  		rcu_read_unlock();
770  		if (!change_needed)
771  			continue;
772  		rtnl_lock();
773  		hlist_for_each_entry_safe(ifa, n, &inet_addr_lst[i], hash) {
774  			unsigned long age;
775  
776  			if (ifa->ifa_flags & IFA_F_PERMANENT)
777  				continue;
778  
779  			/* We try to batch several events at once. */
780  			age = (now - ifa->ifa_tstamp +
781  			       ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
782  
783  			if (ifa->ifa_valid_lft != INFINITY_LIFE_TIME &&
784  			    age >= ifa->ifa_valid_lft) {
785  				struct in_ifaddr __rcu **ifap;
786  				struct in_ifaddr *tmp;
787  
788  				ifap = &ifa->ifa_dev->ifa_list;
789  				tmp = rtnl_dereference(*ifap);
790  				while (tmp) {
791  					if (tmp == ifa) {
792  						inet_del_ifa(ifa->ifa_dev,
793  							     ifap, 1);
794  						break;
795  					}
796  					ifap = &tmp->ifa_next;
797  					tmp = rtnl_dereference(*ifap);
798  				}
799  			} else if (ifa->ifa_preferred_lft !=
800  				   INFINITY_LIFE_TIME &&
801  				   age >= ifa->ifa_preferred_lft &&
802  				   !(ifa->ifa_flags & IFA_F_DEPRECATED)) {
803  				ifa->ifa_flags |= IFA_F_DEPRECATED;
804  				rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
805  			}
806  		}
807  		rtnl_unlock();
808  	}
809  
810  	next_sec = round_jiffies_up(next);
811  	next_sched = next;
812  
813  	/* If rounded timeout is accurate enough, accept it. */
814  	if (time_before(next_sec, next + ADDRCONF_TIMER_FUZZ))
815  		next_sched = next_sec;
816  
817  	now = jiffies;
818  	/* And minimum interval is ADDRCONF_TIMER_FUZZ_MAX. */
819  	if (time_before(next_sched, now + ADDRCONF_TIMER_FUZZ_MAX))
820  		next_sched = now + ADDRCONF_TIMER_FUZZ_MAX;
821  
822  	queue_delayed_work(system_power_efficient_wq, &check_lifetime_work,
823  			next_sched - now);
824  }
825  
set_ifa_lifetime(struct in_ifaddr * ifa,__u32 valid_lft,__u32 prefered_lft)826  static void set_ifa_lifetime(struct in_ifaddr *ifa, __u32 valid_lft,
827  			     __u32 prefered_lft)
828  {
829  	unsigned long timeout;
830  	u32 flags;
831  
832  	flags = ifa->ifa_flags & ~(IFA_F_PERMANENT | IFA_F_DEPRECATED);
833  
834  	timeout = addrconf_timeout_fixup(valid_lft, HZ);
835  	if (addrconf_finite_timeout(timeout))
836  		WRITE_ONCE(ifa->ifa_valid_lft, timeout);
837  	else
838  		flags |= IFA_F_PERMANENT;
839  
840  	timeout = addrconf_timeout_fixup(prefered_lft, HZ);
841  	if (addrconf_finite_timeout(timeout)) {
842  		if (timeout == 0)
843  			flags |= IFA_F_DEPRECATED;
844  		WRITE_ONCE(ifa->ifa_preferred_lft, timeout);
845  	}
846  	WRITE_ONCE(ifa->ifa_flags, flags);
847  	WRITE_ONCE(ifa->ifa_tstamp, jiffies);
848  	if (!ifa->ifa_cstamp)
849  		WRITE_ONCE(ifa->ifa_cstamp, ifa->ifa_tstamp);
850  }
851  
rtm_to_ifaddr(struct net * net,struct nlmsghdr * nlh,__u32 * pvalid_lft,__u32 * pprefered_lft,struct netlink_ext_ack * extack)852  static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh,
853  				       __u32 *pvalid_lft, __u32 *pprefered_lft,
854  				       struct netlink_ext_ack *extack)
855  {
856  	struct nlattr *tb[IFA_MAX+1];
857  	struct in_ifaddr *ifa;
858  	struct ifaddrmsg *ifm;
859  	struct net_device *dev;
860  	struct in_device *in_dev;
861  	int err;
862  
863  	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
864  				     ifa_ipv4_policy, extack);
865  	if (err < 0)
866  		goto errout;
867  
868  	ifm = nlmsg_data(nlh);
869  	err = -EINVAL;
870  
871  	if (ifm->ifa_prefixlen > 32) {
872  		NL_SET_ERR_MSG(extack, "ipv4: Invalid prefix length");
873  		goto errout;
874  	}
875  
876  	if (!tb[IFA_LOCAL]) {
877  		NL_SET_ERR_MSG(extack, "ipv4: Local address is not supplied");
878  		goto errout;
879  	}
880  
881  	dev = __dev_get_by_index(net, ifm->ifa_index);
882  	err = -ENODEV;
883  	if (!dev) {
884  		NL_SET_ERR_MSG(extack, "ipv4: Device not found");
885  		goto errout;
886  	}
887  
888  	in_dev = __in_dev_get_rtnl(dev);
889  	err = -ENOBUFS;
890  	if (!in_dev)
891  		goto errout;
892  
893  	ifa = inet_alloc_ifa(in_dev);
894  	if (!ifa)
895  		/*
896  		 * A potential indev allocation can be left alive, it stays
897  		 * assigned to its device and is destroy with it.
898  		 */
899  		goto errout;
900  
901  	ipv4_devconf_setall(in_dev);
902  	neigh_parms_data_state_setall(in_dev->arp_parms);
903  
904  	if (!tb[IFA_ADDRESS])
905  		tb[IFA_ADDRESS] = tb[IFA_LOCAL];
906  
907  	ifa->ifa_prefixlen = ifm->ifa_prefixlen;
908  	ifa->ifa_mask = inet_make_mask(ifm->ifa_prefixlen);
909  	ifa->ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) :
910  					 ifm->ifa_flags;
911  	ifa->ifa_scope = ifm->ifa_scope;
912  	ifa->ifa_local = nla_get_in_addr(tb[IFA_LOCAL]);
913  	ifa->ifa_address = nla_get_in_addr(tb[IFA_ADDRESS]);
914  
915  	if (tb[IFA_BROADCAST])
916  		ifa->ifa_broadcast = nla_get_in_addr(tb[IFA_BROADCAST]);
917  
918  	if (tb[IFA_LABEL])
919  		nla_strscpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
920  	else
921  		memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
922  
923  	if (tb[IFA_RT_PRIORITY])
924  		ifa->ifa_rt_priority = nla_get_u32(tb[IFA_RT_PRIORITY]);
925  
926  	if (tb[IFA_PROTO])
927  		ifa->ifa_proto = nla_get_u8(tb[IFA_PROTO]);
928  
929  	if (tb[IFA_CACHEINFO]) {
930  		struct ifa_cacheinfo *ci;
931  
932  		ci = nla_data(tb[IFA_CACHEINFO]);
933  		if (!ci->ifa_valid || ci->ifa_prefered > ci->ifa_valid) {
934  			NL_SET_ERR_MSG(extack, "ipv4: address lifetime invalid");
935  			err = -EINVAL;
936  			goto errout_free;
937  		}
938  		*pvalid_lft = ci->ifa_valid;
939  		*pprefered_lft = ci->ifa_prefered;
940  	}
941  
942  	return ifa;
943  
944  errout_free:
945  	inet_free_ifa(ifa);
946  errout:
947  	return ERR_PTR(err);
948  }
949  
find_matching_ifa(struct in_ifaddr * ifa)950  static struct in_ifaddr *find_matching_ifa(struct in_ifaddr *ifa)
951  {
952  	struct in_device *in_dev = ifa->ifa_dev;
953  	struct in_ifaddr *ifa1;
954  
955  	if (!ifa->ifa_local)
956  		return NULL;
957  
958  	in_dev_for_each_ifa_rtnl(ifa1, in_dev) {
959  		if (ifa1->ifa_mask == ifa->ifa_mask &&
960  		    inet_ifa_match(ifa1->ifa_address, ifa) &&
961  		    ifa1->ifa_local == ifa->ifa_local)
962  			return ifa1;
963  	}
964  	return NULL;
965  }
966  
inet_rtm_newaddr(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)967  static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
968  			    struct netlink_ext_ack *extack)
969  {
970  	struct net *net = sock_net(skb->sk);
971  	struct in_ifaddr *ifa;
972  	struct in_ifaddr *ifa_existing;
973  	__u32 valid_lft = INFINITY_LIFE_TIME;
974  	__u32 prefered_lft = INFINITY_LIFE_TIME;
975  
976  	ASSERT_RTNL();
977  
978  	ifa = rtm_to_ifaddr(net, nlh, &valid_lft, &prefered_lft, extack);
979  	if (IS_ERR(ifa))
980  		return PTR_ERR(ifa);
981  
982  	ifa_existing = find_matching_ifa(ifa);
983  	if (!ifa_existing) {
984  		/* It would be best to check for !NLM_F_CREATE here but
985  		 * userspace already relies on not having to provide this.
986  		 */
987  		set_ifa_lifetime(ifa, valid_lft, prefered_lft);
988  		if (ifa->ifa_flags & IFA_F_MCAUTOJOIN) {
989  			int ret = ip_mc_autojoin_config(net, true, ifa);
990  
991  			if (ret < 0) {
992  				NL_SET_ERR_MSG(extack, "ipv4: Multicast auto join failed");
993  				inet_free_ifa(ifa);
994  				return ret;
995  			}
996  		}
997  		return __inet_insert_ifa(ifa, nlh, NETLINK_CB(skb).portid,
998  					 extack);
999  	} else {
1000  		u32 new_metric = ifa->ifa_rt_priority;
1001  		u8 new_proto = ifa->ifa_proto;
1002  
1003  		inet_free_ifa(ifa);
1004  
1005  		if (nlh->nlmsg_flags & NLM_F_EXCL ||
1006  		    !(nlh->nlmsg_flags & NLM_F_REPLACE)) {
1007  			NL_SET_ERR_MSG(extack, "ipv4: Address already assigned");
1008  			return -EEXIST;
1009  		}
1010  		ifa = ifa_existing;
1011  
1012  		if (ifa->ifa_rt_priority != new_metric) {
1013  			fib_modify_prefix_metric(ifa, new_metric);
1014  			ifa->ifa_rt_priority = new_metric;
1015  		}
1016  
1017  		ifa->ifa_proto = new_proto;
1018  
1019  		set_ifa_lifetime(ifa, valid_lft, prefered_lft);
1020  		cancel_delayed_work(&check_lifetime_work);
1021  		queue_delayed_work(system_power_efficient_wq,
1022  				&check_lifetime_work, 0);
1023  		rtmsg_ifa(RTM_NEWADDR, ifa, nlh, NETLINK_CB(skb).portid);
1024  	}
1025  	return 0;
1026  }
1027  
1028  /*
1029   *	Determine a default network mask, based on the IP address.
1030   */
1031  
inet_abc_len(__be32 addr)1032  static int inet_abc_len(__be32 addr)
1033  {
1034  	int rc = -1;	/* Something else, probably a multicast. */
1035  
1036  	if (ipv4_is_zeronet(addr) || ipv4_is_lbcast(addr))
1037  		rc = 0;
1038  	else {
1039  		__u32 haddr = ntohl(addr);
1040  		if (IN_CLASSA(haddr))
1041  			rc = 8;
1042  		else if (IN_CLASSB(haddr))
1043  			rc = 16;
1044  		else if (IN_CLASSC(haddr))
1045  			rc = 24;
1046  		else if (IN_CLASSE(haddr))
1047  			rc = 32;
1048  	}
1049  
1050  	return rc;
1051  }
1052  
1053  
devinet_ioctl(struct net * net,unsigned int cmd,struct ifreq * ifr)1054  int devinet_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr)
1055  {
1056  	struct sockaddr_in sin_orig;
1057  	struct sockaddr_in *sin = (struct sockaddr_in *)&ifr->ifr_addr;
1058  	struct in_ifaddr __rcu **ifap = NULL;
1059  	struct in_device *in_dev;
1060  	struct in_ifaddr *ifa = NULL;
1061  	struct net_device *dev;
1062  	char *colon;
1063  	int ret = -EFAULT;
1064  	int tryaddrmatch = 0;
1065  
1066  	ifr->ifr_name[IFNAMSIZ - 1] = 0;
1067  
1068  	/* save original address for comparison */
1069  	memcpy(&sin_orig, sin, sizeof(*sin));
1070  
1071  	colon = strchr(ifr->ifr_name, ':');
1072  	if (colon)
1073  		*colon = 0;
1074  
1075  	dev_load(net, ifr->ifr_name);
1076  
1077  	switch (cmd) {
1078  	case SIOCGIFADDR:	/* Get interface address */
1079  	case SIOCGIFBRDADDR:	/* Get the broadcast address */
1080  	case SIOCGIFDSTADDR:	/* Get the destination address */
1081  	case SIOCGIFNETMASK:	/* Get the netmask for the interface */
1082  		/* Note that these ioctls will not sleep,
1083  		   so that we do not impose a lock.
1084  		   One day we will be forced to put shlock here (I mean SMP)
1085  		 */
1086  		tryaddrmatch = (sin_orig.sin_family == AF_INET);
1087  		memset(sin, 0, sizeof(*sin));
1088  		sin->sin_family = AF_INET;
1089  		break;
1090  
1091  	case SIOCSIFFLAGS:
1092  		ret = -EPERM;
1093  		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1094  			goto out;
1095  		break;
1096  	case SIOCSIFADDR:	/* Set interface address (and family) */
1097  	case SIOCSIFBRDADDR:	/* Set the broadcast address */
1098  	case SIOCSIFDSTADDR:	/* Set the destination address */
1099  	case SIOCSIFNETMASK: 	/* Set the netmask for the interface */
1100  		ret = -EPERM;
1101  		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1102  			goto out;
1103  		ret = -EINVAL;
1104  		if (sin->sin_family != AF_INET)
1105  			goto out;
1106  		break;
1107  	default:
1108  		ret = -EINVAL;
1109  		goto out;
1110  	}
1111  
1112  	rtnl_lock();
1113  
1114  	ret = -ENODEV;
1115  	dev = __dev_get_by_name(net, ifr->ifr_name);
1116  	if (!dev)
1117  		goto done;
1118  
1119  	if (colon)
1120  		*colon = ':';
1121  
1122  	in_dev = __in_dev_get_rtnl(dev);
1123  	if (in_dev) {
1124  		if (tryaddrmatch) {
1125  			/* Matthias Andree */
1126  			/* compare label and address (4.4BSD style) */
1127  			/* note: we only do this for a limited set of ioctls
1128  			   and only if the original address family was AF_INET.
1129  			   This is checked above. */
1130  
1131  			for (ifap = &in_dev->ifa_list;
1132  			     (ifa = rtnl_dereference(*ifap)) != NULL;
1133  			     ifap = &ifa->ifa_next) {
1134  				if (!strcmp(ifr->ifr_name, ifa->ifa_label) &&
1135  				    sin_orig.sin_addr.s_addr ==
1136  							ifa->ifa_local) {
1137  					break; /* found */
1138  				}
1139  			}
1140  		}
1141  		/* we didn't get a match, maybe the application is
1142  		   4.3BSD-style and passed in junk so we fall back to
1143  		   comparing just the label */
1144  		if (!ifa) {
1145  			for (ifap = &in_dev->ifa_list;
1146  			     (ifa = rtnl_dereference(*ifap)) != NULL;
1147  			     ifap = &ifa->ifa_next)
1148  				if (!strcmp(ifr->ifr_name, ifa->ifa_label))
1149  					break;
1150  		}
1151  	}
1152  
1153  	ret = -EADDRNOTAVAIL;
1154  	if (!ifa && cmd != SIOCSIFADDR && cmd != SIOCSIFFLAGS)
1155  		goto done;
1156  
1157  	switch (cmd) {
1158  	case SIOCGIFADDR:	/* Get interface address */
1159  		ret = 0;
1160  		sin->sin_addr.s_addr = ifa->ifa_local;
1161  		break;
1162  
1163  	case SIOCGIFBRDADDR:	/* Get the broadcast address */
1164  		ret = 0;
1165  		sin->sin_addr.s_addr = ifa->ifa_broadcast;
1166  		break;
1167  
1168  	case SIOCGIFDSTADDR:	/* Get the destination address */
1169  		ret = 0;
1170  		sin->sin_addr.s_addr = ifa->ifa_address;
1171  		break;
1172  
1173  	case SIOCGIFNETMASK:	/* Get the netmask for the interface */
1174  		ret = 0;
1175  		sin->sin_addr.s_addr = ifa->ifa_mask;
1176  		break;
1177  
1178  	case SIOCSIFFLAGS:
1179  		if (colon) {
1180  			ret = -EADDRNOTAVAIL;
1181  			if (!ifa)
1182  				break;
1183  			ret = 0;
1184  			if (!(ifr->ifr_flags & IFF_UP))
1185  				inet_del_ifa(in_dev, ifap, 1);
1186  			break;
1187  		}
1188  		ret = dev_change_flags(dev, ifr->ifr_flags, NULL);
1189  		break;
1190  
1191  	case SIOCSIFADDR:	/* Set interface address (and family) */
1192  		ret = -EINVAL;
1193  		if (inet_abc_len(sin->sin_addr.s_addr) < 0)
1194  			break;
1195  
1196  		if (!ifa) {
1197  			ret = -ENOBUFS;
1198  			if (!in_dev)
1199  				break;
1200  			ifa = inet_alloc_ifa(in_dev);
1201  			if (!ifa)
1202  				break;
1203  
1204  			if (colon)
1205  				memcpy(ifa->ifa_label, ifr->ifr_name, IFNAMSIZ);
1206  			else
1207  				memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1208  		} else {
1209  			ret = 0;
1210  			if (ifa->ifa_local == sin->sin_addr.s_addr)
1211  				break;
1212  			inet_del_ifa(in_dev, ifap, 0);
1213  			ifa->ifa_broadcast = 0;
1214  			ifa->ifa_scope = 0;
1215  		}
1216  
1217  		ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;
1218  
1219  		if (!(dev->flags & IFF_POINTOPOINT)) {
1220  			ifa->ifa_prefixlen = inet_abc_len(ifa->ifa_address);
1221  			ifa->ifa_mask = inet_make_mask(ifa->ifa_prefixlen);
1222  			if ((dev->flags & IFF_BROADCAST) &&
1223  			    ifa->ifa_prefixlen < 31)
1224  				ifa->ifa_broadcast = ifa->ifa_address |
1225  						     ~ifa->ifa_mask;
1226  		} else {
1227  			ifa->ifa_prefixlen = 32;
1228  			ifa->ifa_mask = inet_make_mask(32);
1229  		}
1230  		set_ifa_lifetime(ifa, INFINITY_LIFE_TIME, INFINITY_LIFE_TIME);
1231  		ret = inet_set_ifa(dev, ifa);
1232  		break;
1233  
1234  	case SIOCSIFBRDADDR:	/* Set the broadcast address */
1235  		ret = 0;
1236  		if (ifa->ifa_broadcast != sin->sin_addr.s_addr) {
1237  			inet_del_ifa(in_dev, ifap, 0);
1238  			ifa->ifa_broadcast = sin->sin_addr.s_addr;
1239  			inet_insert_ifa(ifa);
1240  		}
1241  		break;
1242  
1243  	case SIOCSIFDSTADDR:	/* Set the destination address */
1244  		ret = 0;
1245  		if (ifa->ifa_address == sin->sin_addr.s_addr)
1246  			break;
1247  		ret = -EINVAL;
1248  		if (inet_abc_len(sin->sin_addr.s_addr) < 0)
1249  			break;
1250  		ret = 0;
1251  		inet_del_ifa(in_dev, ifap, 0);
1252  		ifa->ifa_address = sin->sin_addr.s_addr;
1253  		inet_insert_ifa(ifa);
1254  		break;
1255  
1256  	case SIOCSIFNETMASK: 	/* Set the netmask for the interface */
1257  
1258  		/*
1259  		 *	The mask we set must be legal.
1260  		 */
1261  		ret = -EINVAL;
1262  		if (bad_mask(sin->sin_addr.s_addr, 0))
1263  			break;
1264  		ret = 0;
1265  		if (ifa->ifa_mask != sin->sin_addr.s_addr) {
1266  			__be32 old_mask = ifa->ifa_mask;
1267  			inet_del_ifa(in_dev, ifap, 0);
1268  			ifa->ifa_mask = sin->sin_addr.s_addr;
1269  			ifa->ifa_prefixlen = inet_mask_len(ifa->ifa_mask);
1270  
1271  			/* See if current broadcast address matches
1272  			 * with current netmask, then recalculate
1273  			 * the broadcast address. Otherwise it's a
1274  			 * funny address, so don't touch it since
1275  			 * the user seems to know what (s)he's doing...
1276  			 */
1277  			if ((dev->flags & IFF_BROADCAST) &&
1278  			    (ifa->ifa_prefixlen < 31) &&
1279  			    (ifa->ifa_broadcast ==
1280  			     (ifa->ifa_local|~old_mask))) {
1281  				ifa->ifa_broadcast = (ifa->ifa_local |
1282  						      ~sin->sin_addr.s_addr);
1283  			}
1284  			inet_insert_ifa(ifa);
1285  		}
1286  		break;
1287  	}
1288  done:
1289  	rtnl_unlock();
1290  out:
1291  	return ret;
1292  }
1293  
inet_gifconf(struct net_device * dev,char __user * buf,int len,int size)1294  int inet_gifconf(struct net_device *dev, char __user *buf, int len, int size)
1295  {
1296  	struct in_device *in_dev = __in_dev_get_rtnl(dev);
1297  	const struct in_ifaddr *ifa;
1298  	struct ifreq ifr;
1299  	int done = 0;
1300  
1301  	if (WARN_ON(size > sizeof(struct ifreq)))
1302  		goto out;
1303  
1304  	if (!in_dev)
1305  		goto out;
1306  
1307  	in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1308  		if (!buf) {
1309  			done += size;
1310  			continue;
1311  		}
1312  		if (len < size)
1313  			break;
1314  		memset(&ifr, 0, sizeof(struct ifreq));
1315  		strcpy(ifr.ifr_name, ifa->ifa_label);
1316  
1317  		(*(struct sockaddr_in *)&ifr.ifr_addr).sin_family = AF_INET;
1318  		(*(struct sockaddr_in *)&ifr.ifr_addr).sin_addr.s_addr =
1319  								ifa->ifa_local;
1320  
1321  		if (copy_to_user(buf + done, &ifr, size)) {
1322  			done = -EFAULT;
1323  			break;
1324  		}
1325  		len  -= size;
1326  		done += size;
1327  	}
1328  out:
1329  	return done;
1330  }
1331  
in_dev_select_addr(const struct in_device * in_dev,int scope)1332  static __be32 in_dev_select_addr(const struct in_device *in_dev,
1333  				 int scope)
1334  {
1335  	const struct in_ifaddr *ifa;
1336  
1337  	in_dev_for_each_ifa_rcu(ifa, in_dev) {
1338  		if (READ_ONCE(ifa->ifa_flags) & IFA_F_SECONDARY)
1339  			continue;
1340  		if (ifa->ifa_scope != RT_SCOPE_LINK &&
1341  		    ifa->ifa_scope <= scope)
1342  			return ifa->ifa_local;
1343  	}
1344  
1345  	return 0;
1346  }
1347  
inet_select_addr(const struct net_device * dev,__be32 dst,int scope)1348  __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope)
1349  {
1350  	const struct in_ifaddr *ifa;
1351  	__be32 addr = 0;
1352  	unsigned char localnet_scope = RT_SCOPE_HOST;
1353  	struct in_device *in_dev;
1354  	struct net *net = dev_net(dev);
1355  	int master_idx;
1356  
1357  	rcu_read_lock();
1358  	in_dev = __in_dev_get_rcu(dev);
1359  	if (!in_dev)
1360  		goto no_in_dev;
1361  
1362  	if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1363  		localnet_scope = RT_SCOPE_LINK;
1364  
1365  	in_dev_for_each_ifa_rcu(ifa, in_dev) {
1366  		if (READ_ONCE(ifa->ifa_flags) & IFA_F_SECONDARY)
1367  			continue;
1368  		if (min(ifa->ifa_scope, localnet_scope) > scope)
1369  			continue;
1370  		if (!dst || inet_ifa_match(dst, ifa)) {
1371  			addr = ifa->ifa_local;
1372  			break;
1373  		}
1374  		if (!addr)
1375  			addr = ifa->ifa_local;
1376  	}
1377  
1378  	if (addr)
1379  		goto out_unlock;
1380  no_in_dev:
1381  	master_idx = l3mdev_master_ifindex_rcu(dev);
1382  
1383  	/* For VRFs, the VRF device takes the place of the loopback device,
1384  	 * with addresses on it being preferred.  Note in such cases the
1385  	 * loopback device will be among the devices that fail the master_idx
1386  	 * equality check in the loop below.
1387  	 */
1388  	if (master_idx &&
1389  	    (dev = dev_get_by_index_rcu(net, master_idx)) &&
1390  	    (in_dev = __in_dev_get_rcu(dev))) {
1391  		addr = in_dev_select_addr(in_dev, scope);
1392  		if (addr)
1393  			goto out_unlock;
1394  	}
1395  
1396  	/* Not loopback addresses on loopback should be preferred
1397  	   in this case. It is important that lo is the first interface
1398  	   in dev_base list.
1399  	 */
1400  	for_each_netdev_rcu(net, dev) {
1401  		if (l3mdev_master_ifindex_rcu(dev) != master_idx)
1402  			continue;
1403  
1404  		in_dev = __in_dev_get_rcu(dev);
1405  		if (!in_dev)
1406  			continue;
1407  
1408  		addr = in_dev_select_addr(in_dev, scope);
1409  		if (addr)
1410  			goto out_unlock;
1411  	}
1412  out_unlock:
1413  	rcu_read_unlock();
1414  	return addr;
1415  }
1416  EXPORT_SYMBOL(inet_select_addr);
1417  
confirm_addr_indev(struct in_device * in_dev,__be32 dst,__be32 local,int scope)1418  static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst,
1419  			      __be32 local, int scope)
1420  {
1421  	unsigned char localnet_scope = RT_SCOPE_HOST;
1422  	const struct in_ifaddr *ifa;
1423  	__be32 addr = 0;
1424  	int same = 0;
1425  
1426  	if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1427  		localnet_scope = RT_SCOPE_LINK;
1428  
1429  	in_dev_for_each_ifa_rcu(ifa, in_dev) {
1430  		unsigned char min_scope = min(ifa->ifa_scope, localnet_scope);
1431  
1432  		if (!addr &&
1433  		    (local == ifa->ifa_local || !local) &&
1434  		    min_scope <= scope) {
1435  			addr = ifa->ifa_local;
1436  			if (same)
1437  				break;
1438  		}
1439  		if (!same) {
1440  			same = (!local || inet_ifa_match(local, ifa)) &&
1441  				(!dst || inet_ifa_match(dst, ifa));
1442  			if (same && addr) {
1443  				if (local || !dst)
1444  					break;
1445  				/* Is the selected addr into dst subnet? */
1446  				if (inet_ifa_match(addr, ifa))
1447  					break;
1448  				/* No, then can we use new local src? */
1449  				if (min_scope <= scope) {
1450  					addr = ifa->ifa_local;
1451  					break;
1452  				}
1453  				/* search for large dst subnet for addr */
1454  				same = 0;
1455  			}
1456  		}
1457  	}
1458  
1459  	return same ? addr : 0;
1460  }
1461  
1462  /*
1463   * Confirm that local IP address exists using wildcards:
1464   * - net: netns to check, cannot be NULL
1465   * - in_dev: only on this interface, NULL=any interface
1466   * - dst: only in the same subnet as dst, 0=any dst
1467   * - local: address, 0=autoselect the local address
1468   * - scope: maximum allowed scope value for the local address
1469   */
inet_confirm_addr(struct net * net,struct in_device * in_dev,__be32 dst,__be32 local,int scope)1470  __be32 inet_confirm_addr(struct net *net, struct in_device *in_dev,
1471  			 __be32 dst, __be32 local, int scope)
1472  {
1473  	__be32 addr = 0;
1474  	struct net_device *dev;
1475  
1476  	if (in_dev)
1477  		return confirm_addr_indev(in_dev, dst, local, scope);
1478  
1479  	rcu_read_lock();
1480  	for_each_netdev_rcu(net, dev) {
1481  		in_dev = __in_dev_get_rcu(dev);
1482  		if (in_dev) {
1483  			addr = confirm_addr_indev(in_dev, dst, local, scope);
1484  			if (addr)
1485  				break;
1486  		}
1487  	}
1488  	rcu_read_unlock();
1489  
1490  	return addr;
1491  }
1492  EXPORT_SYMBOL(inet_confirm_addr);
1493  
1494  /*
1495   *	Device notifier
1496   */
1497  
register_inetaddr_notifier(struct notifier_block * nb)1498  int register_inetaddr_notifier(struct notifier_block *nb)
1499  {
1500  	return blocking_notifier_chain_register(&inetaddr_chain, nb);
1501  }
1502  EXPORT_SYMBOL(register_inetaddr_notifier);
1503  
unregister_inetaddr_notifier(struct notifier_block * nb)1504  int unregister_inetaddr_notifier(struct notifier_block *nb)
1505  {
1506  	return blocking_notifier_chain_unregister(&inetaddr_chain, nb);
1507  }
1508  EXPORT_SYMBOL(unregister_inetaddr_notifier);
1509  
register_inetaddr_validator_notifier(struct notifier_block * nb)1510  int register_inetaddr_validator_notifier(struct notifier_block *nb)
1511  {
1512  	return blocking_notifier_chain_register(&inetaddr_validator_chain, nb);
1513  }
1514  EXPORT_SYMBOL(register_inetaddr_validator_notifier);
1515  
unregister_inetaddr_validator_notifier(struct notifier_block * nb)1516  int unregister_inetaddr_validator_notifier(struct notifier_block *nb)
1517  {
1518  	return blocking_notifier_chain_unregister(&inetaddr_validator_chain,
1519  	    nb);
1520  }
1521  EXPORT_SYMBOL(unregister_inetaddr_validator_notifier);
1522  
1523  /* Rename ifa_labels for a device name change. Make some effort to preserve
1524   * existing alias numbering and to create unique labels if possible.
1525  */
inetdev_changename(struct net_device * dev,struct in_device * in_dev)1526  static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
1527  {
1528  	struct in_ifaddr *ifa;
1529  	int named = 0;
1530  
1531  	in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1532  		char old[IFNAMSIZ], *dot;
1533  
1534  		memcpy(old, ifa->ifa_label, IFNAMSIZ);
1535  		memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1536  		if (named++ == 0)
1537  			goto skip;
1538  		dot = strchr(old, ':');
1539  		if (!dot) {
1540  			sprintf(old, ":%d", named);
1541  			dot = old;
1542  		}
1543  		if (strlen(dot) + strlen(dev->name) < IFNAMSIZ)
1544  			strcat(ifa->ifa_label, dot);
1545  		else
1546  			strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
1547  skip:
1548  		rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
1549  	}
1550  }
1551  
inetdev_send_gratuitous_arp(struct net_device * dev,struct in_device * in_dev)1552  static void inetdev_send_gratuitous_arp(struct net_device *dev,
1553  					struct in_device *in_dev)
1554  
1555  {
1556  	const struct in_ifaddr *ifa;
1557  
1558  	in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1559  		arp_send(ARPOP_REQUEST, ETH_P_ARP,
1560  			 ifa->ifa_local, dev,
1561  			 ifa->ifa_local, NULL,
1562  			 dev->dev_addr, NULL);
1563  	}
1564  }
1565  
1566  /* Called only under RTNL semaphore */
1567  
inetdev_event(struct notifier_block * this,unsigned long event,void * ptr)1568  static int inetdev_event(struct notifier_block *this, unsigned long event,
1569  			 void *ptr)
1570  {
1571  	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1572  	struct in_device *in_dev = __in_dev_get_rtnl(dev);
1573  
1574  	ASSERT_RTNL();
1575  
1576  	if (!in_dev) {
1577  		if (event == NETDEV_REGISTER) {
1578  			in_dev = inetdev_init(dev);
1579  			if (IS_ERR(in_dev))
1580  				return notifier_from_errno(PTR_ERR(in_dev));
1581  			if (dev->flags & IFF_LOOPBACK) {
1582  				IN_DEV_CONF_SET(in_dev, NOXFRM, 1);
1583  				IN_DEV_CONF_SET(in_dev, NOPOLICY, 1);
1584  			}
1585  		} else if (event == NETDEV_CHANGEMTU) {
1586  			/* Re-enabling IP */
1587  			if (inetdev_valid_mtu(dev->mtu))
1588  				in_dev = inetdev_init(dev);
1589  		}
1590  		goto out;
1591  	}
1592  
1593  	switch (event) {
1594  	case NETDEV_REGISTER:
1595  		pr_debug("%s: bug\n", __func__);
1596  		RCU_INIT_POINTER(dev->ip_ptr, NULL);
1597  		break;
1598  	case NETDEV_UP:
1599  		if (!inetdev_valid_mtu(dev->mtu))
1600  			break;
1601  		if (dev->flags & IFF_LOOPBACK) {
1602  			struct in_ifaddr *ifa = inet_alloc_ifa(in_dev);
1603  
1604  			if (ifa) {
1605  				ifa->ifa_local =
1606  				  ifa->ifa_address = htonl(INADDR_LOOPBACK);
1607  				ifa->ifa_prefixlen = 8;
1608  				ifa->ifa_mask = inet_make_mask(8);
1609  				ifa->ifa_scope = RT_SCOPE_HOST;
1610  				memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1611  				set_ifa_lifetime(ifa, INFINITY_LIFE_TIME,
1612  						 INFINITY_LIFE_TIME);
1613  				ipv4_devconf_setall(in_dev);
1614  				neigh_parms_data_state_setall(in_dev->arp_parms);
1615  				inet_insert_ifa(ifa);
1616  			}
1617  		}
1618  		ip_mc_up(in_dev);
1619  		fallthrough;
1620  	case NETDEV_CHANGEADDR:
1621  		if (!IN_DEV_ARP_NOTIFY(in_dev))
1622  			break;
1623  		fallthrough;
1624  	case NETDEV_NOTIFY_PEERS:
1625  		/* Send gratuitous ARP to notify of link change */
1626  		inetdev_send_gratuitous_arp(dev, in_dev);
1627  		break;
1628  	case NETDEV_DOWN:
1629  		ip_mc_down(in_dev);
1630  		break;
1631  	case NETDEV_PRE_TYPE_CHANGE:
1632  		ip_mc_unmap(in_dev);
1633  		break;
1634  	case NETDEV_POST_TYPE_CHANGE:
1635  		ip_mc_remap(in_dev);
1636  		break;
1637  	case NETDEV_CHANGEMTU:
1638  		if (inetdev_valid_mtu(dev->mtu))
1639  			break;
1640  		/* disable IP when MTU is not enough */
1641  		fallthrough;
1642  	case NETDEV_UNREGISTER:
1643  		inetdev_destroy(in_dev);
1644  		break;
1645  	case NETDEV_CHANGENAME:
1646  		/* Do not notify about label change, this event is
1647  		 * not interesting to applications using netlink.
1648  		 */
1649  		inetdev_changename(dev, in_dev);
1650  
1651  		devinet_sysctl_unregister(in_dev);
1652  		devinet_sysctl_register(in_dev);
1653  		break;
1654  	}
1655  out:
1656  	return NOTIFY_DONE;
1657  }
1658  
1659  static struct notifier_block ip_netdev_notifier = {
1660  	.notifier_call = inetdev_event,
1661  };
1662  
inet_nlmsg_size(void)1663  static size_t inet_nlmsg_size(void)
1664  {
1665  	return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
1666  	       + nla_total_size(4) /* IFA_ADDRESS */
1667  	       + nla_total_size(4) /* IFA_LOCAL */
1668  	       + nla_total_size(4) /* IFA_BROADCAST */
1669  	       + nla_total_size(IFNAMSIZ) /* IFA_LABEL */
1670  	       + nla_total_size(4)  /* IFA_FLAGS */
1671  	       + nla_total_size(1)  /* IFA_PROTO */
1672  	       + nla_total_size(4)  /* IFA_RT_PRIORITY */
1673  	       + nla_total_size(sizeof(struct ifa_cacheinfo)); /* IFA_CACHEINFO */
1674  }
1675  
cstamp_delta(unsigned long cstamp)1676  static inline u32 cstamp_delta(unsigned long cstamp)
1677  {
1678  	return (cstamp - INITIAL_JIFFIES) * 100UL / HZ;
1679  }
1680  
put_cacheinfo(struct sk_buff * skb,unsigned long cstamp,unsigned long tstamp,u32 preferred,u32 valid)1681  static int put_cacheinfo(struct sk_buff *skb, unsigned long cstamp,
1682  			 unsigned long tstamp, u32 preferred, u32 valid)
1683  {
1684  	struct ifa_cacheinfo ci;
1685  
1686  	ci.cstamp = cstamp_delta(cstamp);
1687  	ci.tstamp = cstamp_delta(tstamp);
1688  	ci.ifa_prefered = preferred;
1689  	ci.ifa_valid = valid;
1690  
1691  	return nla_put(skb, IFA_CACHEINFO, sizeof(ci), &ci);
1692  }
1693  
inet_fill_ifaddr(struct sk_buff * skb,const struct in_ifaddr * ifa,struct inet_fill_args * args)1694  static int inet_fill_ifaddr(struct sk_buff *skb, const struct in_ifaddr *ifa,
1695  			    struct inet_fill_args *args)
1696  {
1697  	struct ifaddrmsg *ifm;
1698  	struct nlmsghdr  *nlh;
1699  	unsigned long tstamp;
1700  	u32 preferred, valid;
1701  	u32 flags;
1702  
1703  	nlh = nlmsg_put(skb, args->portid, args->seq, args->event, sizeof(*ifm),
1704  			args->flags);
1705  	if (!nlh)
1706  		return -EMSGSIZE;
1707  
1708  	ifm = nlmsg_data(nlh);
1709  	ifm->ifa_family = AF_INET;
1710  	ifm->ifa_prefixlen = ifa->ifa_prefixlen;
1711  
1712  	flags = READ_ONCE(ifa->ifa_flags);
1713  	/* Warning : ifm->ifa_flags is an __u8, it holds only 8 bits.
1714  	 * The 32bit value is given in IFA_FLAGS attribute.
1715  	 */
1716  	ifm->ifa_flags = (__u8)flags;
1717  
1718  	ifm->ifa_scope = ifa->ifa_scope;
1719  	ifm->ifa_index = ifa->ifa_dev->dev->ifindex;
1720  
1721  	if (args->netnsid >= 0 &&
1722  	    nla_put_s32(skb, IFA_TARGET_NETNSID, args->netnsid))
1723  		goto nla_put_failure;
1724  
1725  	tstamp = READ_ONCE(ifa->ifa_tstamp);
1726  	if (!(flags & IFA_F_PERMANENT)) {
1727  		preferred = READ_ONCE(ifa->ifa_preferred_lft);
1728  		valid = READ_ONCE(ifa->ifa_valid_lft);
1729  		if (preferred != INFINITY_LIFE_TIME) {
1730  			long tval = (jiffies - tstamp) / HZ;
1731  
1732  			if (preferred > tval)
1733  				preferred -= tval;
1734  			else
1735  				preferred = 0;
1736  			if (valid != INFINITY_LIFE_TIME) {
1737  				if (valid > tval)
1738  					valid -= tval;
1739  				else
1740  					valid = 0;
1741  			}
1742  		}
1743  	} else {
1744  		preferred = INFINITY_LIFE_TIME;
1745  		valid = INFINITY_LIFE_TIME;
1746  	}
1747  	if ((ifa->ifa_address &&
1748  	     nla_put_in_addr(skb, IFA_ADDRESS, ifa->ifa_address)) ||
1749  	    (ifa->ifa_local &&
1750  	     nla_put_in_addr(skb, IFA_LOCAL, ifa->ifa_local)) ||
1751  	    (ifa->ifa_broadcast &&
1752  	     nla_put_in_addr(skb, IFA_BROADCAST, ifa->ifa_broadcast)) ||
1753  	    (ifa->ifa_label[0] &&
1754  	     nla_put_string(skb, IFA_LABEL, ifa->ifa_label)) ||
1755  	    (ifa->ifa_proto &&
1756  	     nla_put_u8(skb, IFA_PROTO, ifa->ifa_proto)) ||
1757  	    nla_put_u32(skb, IFA_FLAGS, flags) ||
1758  	    (ifa->ifa_rt_priority &&
1759  	     nla_put_u32(skb, IFA_RT_PRIORITY, ifa->ifa_rt_priority)) ||
1760  	    put_cacheinfo(skb, READ_ONCE(ifa->ifa_cstamp), tstamp,
1761  			  preferred, valid))
1762  		goto nla_put_failure;
1763  
1764  	nlmsg_end(skb, nlh);
1765  	return 0;
1766  
1767  nla_put_failure:
1768  	nlmsg_cancel(skb, nlh);
1769  	return -EMSGSIZE;
1770  }
1771  
inet_valid_dump_ifaddr_req(const struct nlmsghdr * nlh,struct inet_fill_args * fillargs,struct net ** tgt_net,struct sock * sk,struct netlink_callback * cb)1772  static int inet_valid_dump_ifaddr_req(const struct nlmsghdr *nlh,
1773  				      struct inet_fill_args *fillargs,
1774  				      struct net **tgt_net, struct sock *sk,
1775  				      struct netlink_callback *cb)
1776  {
1777  	struct netlink_ext_ack *extack = cb->extack;
1778  	struct nlattr *tb[IFA_MAX+1];
1779  	struct ifaddrmsg *ifm;
1780  	int err, i;
1781  
1782  	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
1783  		NL_SET_ERR_MSG(extack, "ipv4: Invalid header for address dump request");
1784  		return -EINVAL;
1785  	}
1786  
1787  	ifm = nlmsg_data(nlh);
1788  	if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) {
1789  		NL_SET_ERR_MSG(extack, "ipv4: Invalid values in header for address dump request");
1790  		return -EINVAL;
1791  	}
1792  
1793  	fillargs->ifindex = ifm->ifa_index;
1794  	if (fillargs->ifindex) {
1795  		cb->answer_flags |= NLM_F_DUMP_FILTERED;
1796  		fillargs->flags |= NLM_F_DUMP_FILTERED;
1797  	}
1798  
1799  	err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFA_MAX,
1800  					    ifa_ipv4_policy, extack);
1801  	if (err < 0)
1802  		return err;
1803  
1804  	for (i = 0; i <= IFA_MAX; ++i) {
1805  		if (!tb[i])
1806  			continue;
1807  
1808  		if (i == IFA_TARGET_NETNSID) {
1809  			struct net *net;
1810  
1811  			fillargs->netnsid = nla_get_s32(tb[i]);
1812  
1813  			net = rtnl_get_net_ns_capable(sk, fillargs->netnsid);
1814  			if (IS_ERR(net)) {
1815  				fillargs->netnsid = -1;
1816  				NL_SET_ERR_MSG(extack, "ipv4: Invalid target network namespace id");
1817  				return PTR_ERR(net);
1818  			}
1819  			*tgt_net = net;
1820  		} else {
1821  			NL_SET_ERR_MSG(extack, "ipv4: Unsupported attribute in dump request");
1822  			return -EINVAL;
1823  		}
1824  	}
1825  
1826  	return 0;
1827  }
1828  
in_dev_dump_addr(struct in_device * in_dev,struct sk_buff * skb,struct netlink_callback * cb,int * s_ip_idx,struct inet_fill_args * fillargs)1829  static int in_dev_dump_addr(struct in_device *in_dev, struct sk_buff *skb,
1830  			    struct netlink_callback *cb, int *s_ip_idx,
1831  			    struct inet_fill_args *fillargs)
1832  {
1833  	struct in_ifaddr *ifa;
1834  	int ip_idx = 0;
1835  	int err;
1836  
1837  	in_dev_for_each_ifa_rcu(ifa, in_dev) {
1838  		if (ip_idx < *s_ip_idx) {
1839  			ip_idx++;
1840  			continue;
1841  		}
1842  		err = inet_fill_ifaddr(skb, ifa, fillargs);
1843  		if (err < 0)
1844  			goto done;
1845  
1846  		nl_dump_check_consistent(cb, nlmsg_hdr(skb));
1847  		ip_idx++;
1848  	}
1849  	err = 0;
1850  	ip_idx = 0;
1851  done:
1852  	*s_ip_idx = ip_idx;
1853  
1854  	return err;
1855  }
1856  
1857  /* Combine dev_addr_genid and dev_base_seq to detect changes.
1858   */
inet_base_seq(const struct net * net)1859  static u32 inet_base_seq(const struct net *net)
1860  {
1861  	u32 res = atomic_read(&net->ipv4.dev_addr_genid) +
1862  		  READ_ONCE(net->dev_base_seq);
1863  
1864  	/* Must not return 0 (see nl_dump_check_consistent()).
1865  	 * Chose a value far away from 0.
1866  	 */
1867  	if (!res)
1868  		res = 0x80000000;
1869  	return res;
1870  }
1871  
inet_dump_ifaddr(struct sk_buff * skb,struct netlink_callback * cb)1872  static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
1873  {
1874  	const struct nlmsghdr *nlh = cb->nlh;
1875  	struct inet_fill_args fillargs = {
1876  		.portid = NETLINK_CB(cb->skb).portid,
1877  		.seq = nlh->nlmsg_seq,
1878  		.event = RTM_NEWADDR,
1879  		.flags = NLM_F_MULTI,
1880  		.netnsid = -1,
1881  	};
1882  	struct net *net = sock_net(skb->sk);
1883  	struct net *tgt_net = net;
1884  	struct {
1885  		unsigned long ifindex;
1886  		int ip_idx;
1887  	} *ctx = (void *)cb->ctx;
1888  	struct in_device *in_dev;
1889  	struct net_device *dev;
1890  	int err = 0;
1891  
1892  	rcu_read_lock();
1893  	if (cb->strict_check) {
1894  		err = inet_valid_dump_ifaddr_req(nlh, &fillargs, &tgt_net,
1895  						 skb->sk, cb);
1896  		if (err < 0)
1897  			goto done;
1898  
1899  		if (fillargs.ifindex) {
1900  			dev = dev_get_by_index_rcu(tgt_net, fillargs.ifindex);
1901  			if (!dev) {
1902  				err = -ENODEV;
1903  				goto done;
1904  			}
1905  			in_dev = __in_dev_get_rcu(dev);
1906  			if (!in_dev)
1907  				goto done;
1908  			err = in_dev_dump_addr(in_dev, skb, cb, &ctx->ip_idx,
1909  					       &fillargs);
1910  			goto done;
1911  		}
1912  	}
1913  
1914  	cb->seq = inet_base_seq(tgt_net);
1915  
1916  	for_each_netdev_dump(tgt_net, dev, ctx->ifindex) {
1917  		in_dev = __in_dev_get_rcu(dev);
1918  		if (!in_dev)
1919  			continue;
1920  		err = in_dev_dump_addr(in_dev, skb, cb, &ctx->ip_idx,
1921  				       &fillargs);
1922  		if (err < 0)
1923  			goto done;
1924  	}
1925  done:
1926  	if (fillargs.netnsid >= 0)
1927  		put_net(tgt_net);
1928  	rcu_read_unlock();
1929  	return err;
1930  }
1931  
rtmsg_ifa(int event,struct in_ifaddr * ifa,struct nlmsghdr * nlh,u32 portid)1932  static void rtmsg_ifa(int event, struct in_ifaddr *ifa, struct nlmsghdr *nlh,
1933  		      u32 portid)
1934  {
1935  	struct inet_fill_args fillargs = {
1936  		.portid = portid,
1937  		.seq = nlh ? nlh->nlmsg_seq : 0,
1938  		.event = event,
1939  		.flags = 0,
1940  		.netnsid = -1,
1941  	};
1942  	struct sk_buff *skb;
1943  	int err = -ENOBUFS;
1944  	struct net *net;
1945  
1946  	net = dev_net(ifa->ifa_dev->dev);
1947  	skb = nlmsg_new(inet_nlmsg_size(), GFP_KERNEL);
1948  	if (!skb)
1949  		goto errout;
1950  
1951  	err = inet_fill_ifaddr(skb, ifa, &fillargs);
1952  	if (err < 0) {
1953  		/* -EMSGSIZE implies BUG in inet_nlmsg_size() */
1954  		WARN_ON(err == -EMSGSIZE);
1955  		kfree_skb(skb);
1956  		goto errout;
1957  	}
1958  	rtnl_notify(skb, net, portid, RTNLGRP_IPV4_IFADDR, nlh, GFP_KERNEL);
1959  	return;
1960  errout:
1961  	rtnl_set_sk_err(net, RTNLGRP_IPV4_IFADDR, err);
1962  }
1963  
inet_get_link_af_size(const struct net_device * dev,u32 ext_filter_mask)1964  static size_t inet_get_link_af_size(const struct net_device *dev,
1965  				    u32 ext_filter_mask)
1966  {
1967  	struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1968  
1969  	if (!in_dev)
1970  		return 0;
1971  
1972  	return nla_total_size(IPV4_DEVCONF_MAX * 4); /* IFLA_INET_CONF */
1973  }
1974  
inet_fill_link_af(struct sk_buff * skb,const struct net_device * dev,u32 ext_filter_mask)1975  static int inet_fill_link_af(struct sk_buff *skb, const struct net_device *dev,
1976  			     u32 ext_filter_mask)
1977  {
1978  	struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1979  	struct nlattr *nla;
1980  	int i;
1981  
1982  	if (!in_dev)
1983  		return -ENODATA;
1984  
1985  	nla = nla_reserve(skb, IFLA_INET_CONF, IPV4_DEVCONF_MAX * 4);
1986  	if (!nla)
1987  		return -EMSGSIZE;
1988  
1989  	for (i = 0; i < IPV4_DEVCONF_MAX; i++)
1990  		((u32 *) nla_data(nla))[i] = READ_ONCE(in_dev->cnf.data[i]);
1991  
1992  	return 0;
1993  }
1994  
1995  static const struct nla_policy inet_af_policy[IFLA_INET_MAX+1] = {
1996  	[IFLA_INET_CONF]	= { .type = NLA_NESTED },
1997  };
1998  
inet_validate_link_af(const struct net_device * dev,const struct nlattr * nla,struct netlink_ext_ack * extack)1999  static int inet_validate_link_af(const struct net_device *dev,
2000  				 const struct nlattr *nla,
2001  				 struct netlink_ext_ack *extack)
2002  {
2003  	struct nlattr *a, *tb[IFLA_INET_MAX+1];
2004  	int err, rem;
2005  
2006  	if (dev && !__in_dev_get_rtnl(dev))
2007  		return -EAFNOSUPPORT;
2008  
2009  	err = nla_parse_nested_deprecated(tb, IFLA_INET_MAX, nla,
2010  					  inet_af_policy, extack);
2011  	if (err < 0)
2012  		return err;
2013  
2014  	if (tb[IFLA_INET_CONF]) {
2015  		nla_for_each_nested(a, tb[IFLA_INET_CONF], rem) {
2016  			int cfgid = nla_type(a);
2017  
2018  			if (nla_len(a) < 4)
2019  				return -EINVAL;
2020  
2021  			if (cfgid <= 0 || cfgid > IPV4_DEVCONF_MAX)
2022  				return -EINVAL;
2023  		}
2024  	}
2025  
2026  	return 0;
2027  }
2028  
inet_set_link_af(struct net_device * dev,const struct nlattr * nla,struct netlink_ext_ack * extack)2029  static int inet_set_link_af(struct net_device *dev, const struct nlattr *nla,
2030  			    struct netlink_ext_ack *extack)
2031  {
2032  	struct in_device *in_dev = __in_dev_get_rtnl(dev);
2033  	struct nlattr *a, *tb[IFLA_INET_MAX+1];
2034  	int rem;
2035  
2036  	if (!in_dev)
2037  		return -EAFNOSUPPORT;
2038  
2039  	if (nla_parse_nested_deprecated(tb, IFLA_INET_MAX, nla, NULL, NULL) < 0)
2040  		return -EINVAL;
2041  
2042  	if (tb[IFLA_INET_CONF]) {
2043  		nla_for_each_nested(a, tb[IFLA_INET_CONF], rem)
2044  			ipv4_devconf_set(in_dev, nla_type(a), nla_get_u32(a));
2045  	}
2046  
2047  	return 0;
2048  }
2049  
inet_netconf_msgsize_devconf(int type)2050  static int inet_netconf_msgsize_devconf(int type)
2051  {
2052  	int size = NLMSG_ALIGN(sizeof(struct netconfmsg))
2053  		   + nla_total_size(4);	/* NETCONFA_IFINDEX */
2054  	bool all = false;
2055  
2056  	if (type == NETCONFA_ALL)
2057  		all = true;
2058  
2059  	if (all || type == NETCONFA_FORWARDING)
2060  		size += nla_total_size(4);
2061  	if (all || type == NETCONFA_RP_FILTER)
2062  		size += nla_total_size(4);
2063  	if (all || type == NETCONFA_MC_FORWARDING)
2064  		size += nla_total_size(4);
2065  	if (all || type == NETCONFA_BC_FORWARDING)
2066  		size += nla_total_size(4);
2067  	if (all || type == NETCONFA_PROXY_NEIGH)
2068  		size += nla_total_size(4);
2069  	if (all || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN)
2070  		size += nla_total_size(4);
2071  
2072  	return size;
2073  }
2074  
inet_netconf_fill_devconf(struct sk_buff * skb,int ifindex,const struct ipv4_devconf * devconf,u32 portid,u32 seq,int event,unsigned int flags,int type)2075  static int inet_netconf_fill_devconf(struct sk_buff *skb, int ifindex,
2076  				     const struct ipv4_devconf *devconf,
2077  				     u32 portid, u32 seq, int event,
2078  				     unsigned int flags, int type)
2079  {
2080  	struct nlmsghdr  *nlh;
2081  	struct netconfmsg *ncm;
2082  	bool all = false;
2083  
2084  	nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct netconfmsg),
2085  			flags);
2086  	if (!nlh)
2087  		return -EMSGSIZE;
2088  
2089  	if (type == NETCONFA_ALL)
2090  		all = true;
2091  
2092  	ncm = nlmsg_data(nlh);
2093  	ncm->ncm_family = AF_INET;
2094  
2095  	if (nla_put_s32(skb, NETCONFA_IFINDEX, ifindex) < 0)
2096  		goto nla_put_failure;
2097  
2098  	if (!devconf)
2099  		goto out;
2100  
2101  	if ((all || type == NETCONFA_FORWARDING) &&
2102  	    nla_put_s32(skb, NETCONFA_FORWARDING,
2103  			IPV4_DEVCONF_RO(*devconf, FORWARDING)) < 0)
2104  		goto nla_put_failure;
2105  	if ((all || type == NETCONFA_RP_FILTER) &&
2106  	    nla_put_s32(skb, NETCONFA_RP_FILTER,
2107  			IPV4_DEVCONF_RO(*devconf, RP_FILTER)) < 0)
2108  		goto nla_put_failure;
2109  	if ((all || type == NETCONFA_MC_FORWARDING) &&
2110  	    nla_put_s32(skb, NETCONFA_MC_FORWARDING,
2111  			IPV4_DEVCONF_RO(*devconf, MC_FORWARDING)) < 0)
2112  		goto nla_put_failure;
2113  	if ((all || type == NETCONFA_BC_FORWARDING) &&
2114  	    nla_put_s32(skb, NETCONFA_BC_FORWARDING,
2115  			IPV4_DEVCONF_RO(*devconf, BC_FORWARDING)) < 0)
2116  		goto nla_put_failure;
2117  	if ((all || type == NETCONFA_PROXY_NEIGH) &&
2118  	    nla_put_s32(skb, NETCONFA_PROXY_NEIGH,
2119  			IPV4_DEVCONF_RO(*devconf, PROXY_ARP)) < 0)
2120  		goto nla_put_failure;
2121  	if ((all || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) &&
2122  	    nla_put_s32(skb, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
2123  			IPV4_DEVCONF_RO(*devconf,
2124  					IGNORE_ROUTES_WITH_LINKDOWN)) < 0)
2125  		goto nla_put_failure;
2126  
2127  out:
2128  	nlmsg_end(skb, nlh);
2129  	return 0;
2130  
2131  nla_put_failure:
2132  	nlmsg_cancel(skb, nlh);
2133  	return -EMSGSIZE;
2134  }
2135  
inet_netconf_notify_devconf(struct net * net,int event,int type,int ifindex,struct ipv4_devconf * devconf)2136  void inet_netconf_notify_devconf(struct net *net, int event, int type,
2137  				 int ifindex, struct ipv4_devconf *devconf)
2138  {
2139  	struct sk_buff *skb;
2140  	int err = -ENOBUFS;
2141  
2142  	skb = nlmsg_new(inet_netconf_msgsize_devconf(type), GFP_KERNEL);
2143  	if (!skb)
2144  		goto errout;
2145  
2146  	err = inet_netconf_fill_devconf(skb, ifindex, devconf, 0, 0,
2147  					event, 0, type);
2148  	if (err < 0) {
2149  		/* -EMSGSIZE implies BUG in inet_netconf_msgsize_devconf() */
2150  		WARN_ON(err == -EMSGSIZE);
2151  		kfree_skb(skb);
2152  		goto errout;
2153  	}
2154  	rtnl_notify(skb, net, 0, RTNLGRP_IPV4_NETCONF, NULL, GFP_KERNEL);
2155  	return;
2156  errout:
2157  	rtnl_set_sk_err(net, RTNLGRP_IPV4_NETCONF, err);
2158  }
2159  
2160  static const struct nla_policy devconf_ipv4_policy[NETCONFA_MAX+1] = {
2161  	[NETCONFA_IFINDEX]	= { .len = sizeof(int) },
2162  	[NETCONFA_FORWARDING]	= { .len = sizeof(int) },
2163  	[NETCONFA_RP_FILTER]	= { .len = sizeof(int) },
2164  	[NETCONFA_PROXY_NEIGH]	= { .len = sizeof(int) },
2165  	[NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN]	= { .len = sizeof(int) },
2166  };
2167  
inet_netconf_valid_get_req(struct sk_buff * skb,const struct nlmsghdr * nlh,struct nlattr ** tb,struct netlink_ext_ack * extack)2168  static int inet_netconf_valid_get_req(struct sk_buff *skb,
2169  				      const struct nlmsghdr *nlh,
2170  				      struct nlattr **tb,
2171  				      struct netlink_ext_ack *extack)
2172  {
2173  	int i, err;
2174  
2175  	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(struct netconfmsg))) {
2176  		NL_SET_ERR_MSG(extack, "ipv4: Invalid header for netconf get request");
2177  		return -EINVAL;
2178  	}
2179  
2180  	if (!netlink_strict_get_check(skb))
2181  		return nlmsg_parse_deprecated(nlh, sizeof(struct netconfmsg),
2182  					      tb, NETCONFA_MAX,
2183  					      devconf_ipv4_policy, extack);
2184  
2185  	err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct netconfmsg),
2186  					    tb, NETCONFA_MAX,
2187  					    devconf_ipv4_policy, extack);
2188  	if (err)
2189  		return err;
2190  
2191  	for (i = 0; i <= NETCONFA_MAX; i++) {
2192  		if (!tb[i])
2193  			continue;
2194  
2195  		switch (i) {
2196  		case NETCONFA_IFINDEX:
2197  			break;
2198  		default:
2199  			NL_SET_ERR_MSG(extack, "ipv4: Unsupported attribute in netconf get request");
2200  			return -EINVAL;
2201  		}
2202  	}
2203  
2204  	return 0;
2205  }
2206  
inet_netconf_get_devconf(struct sk_buff * in_skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)2207  static int inet_netconf_get_devconf(struct sk_buff *in_skb,
2208  				    struct nlmsghdr *nlh,
2209  				    struct netlink_ext_ack *extack)
2210  {
2211  	struct net *net = sock_net(in_skb->sk);
2212  	struct nlattr *tb[NETCONFA_MAX + 1];
2213  	const struct ipv4_devconf *devconf;
2214  	struct in_device *in_dev = NULL;
2215  	struct net_device *dev = NULL;
2216  	struct sk_buff *skb;
2217  	int ifindex;
2218  	int err;
2219  
2220  	err = inet_netconf_valid_get_req(in_skb, nlh, tb, extack);
2221  	if (err)
2222  		return err;
2223  
2224  	if (!tb[NETCONFA_IFINDEX])
2225  		return -EINVAL;
2226  
2227  	ifindex = nla_get_s32(tb[NETCONFA_IFINDEX]);
2228  	switch (ifindex) {
2229  	case NETCONFA_IFINDEX_ALL:
2230  		devconf = net->ipv4.devconf_all;
2231  		break;
2232  	case NETCONFA_IFINDEX_DEFAULT:
2233  		devconf = net->ipv4.devconf_dflt;
2234  		break;
2235  	default:
2236  		err = -ENODEV;
2237  		dev = dev_get_by_index(net, ifindex);
2238  		if (dev)
2239  			in_dev = in_dev_get(dev);
2240  		if (!in_dev)
2241  			goto errout;
2242  		devconf = &in_dev->cnf;
2243  		break;
2244  	}
2245  
2246  	err = -ENOBUFS;
2247  	skb = nlmsg_new(inet_netconf_msgsize_devconf(NETCONFA_ALL), GFP_KERNEL);
2248  	if (!skb)
2249  		goto errout;
2250  
2251  	err = inet_netconf_fill_devconf(skb, ifindex, devconf,
2252  					NETLINK_CB(in_skb).portid,
2253  					nlh->nlmsg_seq, RTM_NEWNETCONF, 0,
2254  					NETCONFA_ALL);
2255  	if (err < 0) {
2256  		/* -EMSGSIZE implies BUG in inet_netconf_msgsize_devconf() */
2257  		WARN_ON(err == -EMSGSIZE);
2258  		kfree_skb(skb);
2259  		goto errout;
2260  	}
2261  	err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid);
2262  errout:
2263  	if (in_dev)
2264  		in_dev_put(in_dev);
2265  	dev_put(dev);
2266  	return err;
2267  }
2268  
inet_netconf_dump_devconf(struct sk_buff * skb,struct netlink_callback * cb)2269  static int inet_netconf_dump_devconf(struct sk_buff *skb,
2270  				     struct netlink_callback *cb)
2271  {
2272  	const struct nlmsghdr *nlh = cb->nlh;
2273  	struct net *net = sock_net(skb->sk);
2274  	struct {
2275  		unsigned long ifindex;
2276  		unsigned int all_default;
2277  	} *ctx = (void *)cb->ctx;
2278  	const struct in_device *in_dev;
2279  	struct net_device *dev;
2280  	int err = 0;
2281  
2282  	if (cb->strict_check) {
2283  		struct netlink_ext_ack *extack = cb->extack;
2284  		struct netconfmsg *ncm;
2285  
2286  		if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ncm))) {
2287  			NL_SET_ERR_MSG(extack, "ipv4: Invalid header for netconf dump request");
2288  			return -EINVAL;
2289  		}
2290  
2291  		if (nlmsg_attrlen(nlh, sizeof(*ncm))) {
2292  			NL_SET_ERR_MSG(extack, "ipv4: Invalid data after header in netconf dump request");
2293  			return -EINVAL;
2294  		}
2295  	}
2296  
2297  	rcu_read_lock();
2298  	for_each_netdev_dump(net, dev, ctx->ifindex) {
2299  		in_dev = __in_dev_get_rcu(dev);
2300  		if (!in_dev)
2301  			continue;
2302  		err = inet_netconf_fill_devconf(skb, dev->ifindex,
2303  						&in_dev->cnf,
2304  						NETLINK_CB(cb->skb).portid,
2305  						nlh->nlmsg_seq,
2306  						RTM_NEWNETCONF, NLM_F_MULTI,
2307  						NETCONFA_ALL);
2308  		if (err < 0)
2309  			goto done;
2310  	}
2311  	if (ctx->all_default == 0) {
2312  		err = inet_netconf_fill_devconf(skb, NETCONFA_IFINDEX_ALL,
2313  						net->ipv4.devconf_all,
2314  						NETLINK_CB(cb->skb).portid,
2315  						nlh->nlmsg_seq,
2316  						RTM_NEWNETCONF, NLM_F_MULTI,
2317  						NETCONFA_ALL);
2318  		if (err < 0)
2319  			goto done;
2320  		ctx->all_default++;
2321  	}
2322  	if (ctx->all_default == 1) {
2323  		err = inet_netconf_fill_devconf(skb, NETCONFA_IFINDEX_DEFAULT,
2324  						net->ipv4.devconf_dflt,
2325  						NETLINK_CB(cb->skb).portid,
2326  						nlh->nlmsg_seq,
2327  						RTM_NEWNETCONF, NLM_F_MULTI,
2328  						NETCONFA_ALL);
2329  		if (err < 0)
2330  			goto done;
2331  		ctx->all_default++;
2332  	}
2333  done:
2334  	rcu_read_unlock();
2335  	return err;
2336  }
2337  
2338  #ifdef CONFIG_SYSCTL
2339  
devinet_copy_dflt_conf(struct net * net,int i)2340  static void devinet_copy_dflt_conf(struct net *net, int i)
2341  {
2342  	struct net_device *dev;
2343  
2344  	rcu_read_lock();
2345  	for_each_netdev_rcu(net, dev) {
2346  		struct in_device *in_dev;
2347  
2348  		in_dev = __in_dev_get_rcu(dev);
2349  		if (in_dev && !test_bit(i, in_dev->cnf.state))
2350  			in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i];
2351  	}
2352  	rcu_read_unlock();
2353  }
2354  
2355  /* called with RTNL locked */
inet_forward_change(struct net * net)2356  static void inet_forward_change(struct net *net)
2357  {
2358  	struct net_device *dev;
2359  	int on = IPV4_DEVCONF_ALL(net, FORWARDING);
2360  
2361  	IPV4_DEVCONF_ALL(net, ACCEPT_REDIRECTS) = !on;
2362  	IPV4_DEVCONF_DFLT(net, FORWARDING) = on;
2363  	inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2364  				    NETCONFA_FORWARDING,
2365  				    NETCONFA_IFINDEX_ALL,
2366  				    net->ipv4.devconf_all);
2367  	inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2368  				    NETCONFA_FORWARDING,
2369  				    NETCONFA_IFINDEX_DEFAULT,
2370  				    net->ipv4.devconf_dflt);
2371  
2372  	for_each_netdev(net, dev) {
2373  		struct in_device *in_dev;
2374  
2375  		if (on)
2376  			dev_disable_lro(dev);
2377  
2378  		in_dev = __in_dev_get_rtnl(dev);
2379  		if (in_dev) {
2380  			IN_DEV_CONF_SET(in_dev, FORWARDING, on);
2381  			inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2382  						    NETCONFA_FORWARDING,
2383  						    dev->ifindex, &in_dev->cnf);
2384  		}
2385  	}
2386  }
2387  
devinet_conf_ifindex(struct net * net,struct ipv4_devconf * cnf)2388  static int devinet_conf_ifindex(struct net *net, struct ipv4_devconf *cnf)
2389  {
2390  	if (cnf == net->ipv4.devconf_dflt)
2391  		return NETCONFA_IFINDEX_DEFAULT;
2392  	else if (cnf == net->ipv4.devconf_all)
2393  		return NETCONFA_IFINDEX_ALL;
2394  	else {
2395  		struct in_device *idev
2396  			= container_of(cnf, struct in_device, cnf);
2397  		return idev->dev->ifindex;
2398  	}
2399  }
2400  
devinet_conf_proc(const struct ctl_table * ctl,int write,void * buffer,size_t * lenp,loff_t * ppos)2401  static int devinet_conf_proc(const struct ctl_table *ctl, int write,
2402  			     void *buffer, size_t *lenp, loff_t *ppos)
2403  {
2404  	int old_value = *(int *)ctl->data;
2405  	int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
2406  	int new_value = *(int *)ctl->data;
2407  
2408  	if (write) {
2409  		struct ipv4_devconf *cnf = ctl->extra1;
2410  		struct net *net = ctl->extra2;
2411  		int i = (int *)ctl->data - cnf->data;
2412  		int ifindex;
2413  
2414  		set_bit(i, cnf->state);
2415  
2416  		if (cnf == net->ipv4.devconf_dflt)
2417  			devinet_copy_dflt_conf(net, i);
2418  		if (i == IPV4_DEVCONF_ACCEPT_LOCAL - 1 ||
2419  		    i == IPV4_DEVCONF_ROUTE_LOCALNET - 1)
2420  			if ((new_value == 0) && (old_value != 0))
2421  				rt_cache_flush(net);
2422  
2423  		if (i == IPV4_DEVCONF_BC_FORWARDING - 1 &&
2424  		    new_value != old_value)
2425  			rt_cache_flush(net);
2426  
2427  		if (i == IPV4_DEVCONF_RP_FILTER - 1 &&
2428  		    new_value != old_value) {
2429  			ifindex = devinet_conf_ifindex(net, cnf);
2430  			inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2431  						    NETCONFA_RP_FILTER,
2432  						    ifindex, cnf);
2433  		}
2434  		if (i == IPV4_DEVCONF_PROXY_ARP - 1 &&
2435  		    new_value != old_value) {
2436  			ifindex = devinet_conf_ifindex(net, cnf);
2437  			inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2438  						    NETCONFA_PROXY_NEIGH,
2439  						    ifindex, cnf);
2440  		}
2441  		if (i == IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN - 1 &&
2442  		    new_value != old_value) {
2443  			ifindex = devinet_conf_ifindex(net, cnf);
2444  			inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2445  						    NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
2446  						    ifindex, cnf);
2447  		}
2448  	}
2449  
2450  	return ret;
2451  }
2452  
devinet_sysctl_forward(const struct ctl_table * ctl,int write,void * buffer,size_t * lenp,loff_t * ppos)2453  static int devinet_sysctl_forward(const struct ctl_table *ctl, int write,
2454  				  void *buffer, size_t *lenp, loff_t *ppos)
2455  {
2456  	int *valp = ctl->data;
2457  	int val = *valp;
2458  	loff_t pos = *ppos;
2459  	struct net *net = ctl->extra2;
2460  	int ret;
2461  
2462  	if (write && !ns_capable(net->user_ns, CAP_NET_ADMIN))
2463  		return -EPERM;
2464  
2465  	ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
2466  
2467  	if (write && *valp != val) {
2468  		if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) {
2469  			if (!rtnl_trylock()) {
2470  				/* Restore the original values before restarting */
2471  				*valp = val;
2472  				*ppos = pos;
2473  				return restart_syscall();
2474  			}
2475  			if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) {
2476  				inet_forward_change(net);
2477  			} else {
2478  				struct ipv4_devconf *cnf = ctl->extra1;
2479  				struct in_device *idev =
2480  					container_of(cnf, struct in_device, cnf);
2481  				if (*valp)
2482  					dev_disable_lro(idev->dev);
2483  				inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2484  							    NETCONFA_FORWARDING,
2485  							    idev->dev->ifindex,
2486  							    cnf);
2487  			}
2488  			rtnl_unlock();
2489  			rt_cache_flush(net);
2490  		} else
2491  			inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
2492  						    NETCONFA_FORWARDING,
2493  						    NETCONFA_IFINDEX_DEFAULT,
2494  						    net->ipv4.devconf_dflt);
2495  	}
2496  
2497  	return ret;
2498  }
2499  
ipv4_doint_and_flush(const struct ctl_table * ctl,int write,void * buffer,size_t * lenp,loff_t * ppos)2500  static int ipv4_doint_and_flush(const struct ctl_table *ctl, int write,
2501  				void *buffer, size_t *lenp, loff_t *ppos)
2502  {
2503  	int *valp = ctl->data;
2504  	int val = *valp;
2505  	int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
2506  	struct net *net = ctl->extra2;
2507  
2508  	if (write && *valp != val)
2509  		rt_cache_flush(net);
2510  
2511  	return ret;
2512  }
2513  
2514  #define DEVINET_SYSCTL_ENTRY(attr, name, mval, proc) \
2515  	{ \
2516  		.procname	= name, \
2517  		.data		= ipv4_devconf.data + \
2518  				  IPV4_DEVCONF_ ## attr - 1, \
2519  		.maxlen		= sizeof(int), \
2520  		.mode		= mval, \
2521  		.proc_handler	= proc, \
2522  		.extra1		= &ipv4_devconf, \
2523  	}
2524  
2525  #define DEVINET_SYSCTL_RW_ENTRY(attr, name) \
2526  	DEVINET_SYSCTL_ENTRY(attr, name, 0644, devinet_conf_proc)
2527  
2528  #define DEVINET_SYSCTL_RO_ENTRY(attr, name) \
2529  	DEVINET_SYSCTL_ENTRY(attr, name, 0444, devinet_conf_proc)
2530  
2531  #define DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, proc) \
2532  	DEVINET_SYSCTL_ENTRY(attr, name, 0644, proc)
2533  
2534  #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
2535  	DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush)
2536  
2537  static struct devinet_sysctl_table {
2538  	struct ctl_table_header *sysctl_header;
2539  	struct ctl_table devinet_vars[IPV4_DEVCONF_MAX];
2540  } devinet_sysctl = {
2541  	.devinet_vars = {
2542  		DEVINET_SYSCTL_COMPLEX_ENTRY(FORWARDING, "forwarding",
2543  					     devinet_sysctl_forward),
2544  		DEVINET_SYSCTL_RO_ENTRY(MC_FORWARDING, "mc_forwarding"),
2545  		DEVINET_SYSCTL_RW_ENTRY(BC_FORWARDING, "bc_forwarding"),
2546  
2547  		DEVINET_SYSCTL_RW_ENTRY(ACCEPT_REDIRECTS, "accept_redirects"),
2548  		DEVINET_SYSCTL_RW_ENTRY(SECURE_REDIRECTS, "secure_redirects"),
2549  		DEVINET_SYSCTL_RW_ENTRY(SHARED_MEDIA, "shared_media"),
2550  		DEVINET_SYSCTL_RW_ENTRY(RP_FILTER, "rp_filter"),
2551  		DEVINET_SYSCTL_RW_ENTRY(SEND_REDIRECTS, "send_redirects"),
2552  		DEVINET_SYSCTL_RW_ENTRY(ACCEPT_SOURCE_ROUTE,
2553  					"accept_source_route"),
2554  		DEVINET_SYSCTL_RW_ENTRY(ACCEPT_LOCAL, "accept_local"),
2555  		DEVINET_SYSCTL_RW_ENTRY(SRC_VMARK, "src_valid_mark"),
2556  		DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP, "proxy_arp"),
2557  		DEVINET_SYSCTL_RW_ENTRY(MEDIUM_ID, "medium_id"),
2558  		DEVINET_SYSCTL_RW_ENTRY(BOOTP_RELAY, "bootp_relay"),
2559  		DEVINET_SYSCTL_RW_ENTRY(LOG_MARTIANS, "log_martians"),
2560  		DEVINET_SYSCTL_RW_ENTRY(TAG, "tag"),
2561  		DEVINET_SYSCTL_RW_ENTRY(ARPFILTER, "arp_filter"),
2562  		DEVINET_SYSCTL_RW_ENTRY(ARP_ANNOUNCE, "arp_announce"),
2563  		DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"),
2564  		DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"),
2565  		DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"),
2566  		DEVINET_SYSCTL_RW_ENTRY(ARP_EVICT_NOCARRIER,
2567  					"arp_evict_nocarrier"),
2568  		DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"),
2569  		DEVINET_SYSCTL_RW_ENTRY(FORCE_IGMP_VERSION,
2570  					"force_igmp_version"),
2571  		DEVINET_SYSCTL_RW_ENTRY(IGMPV2_UNSOLICITED_REPORT_INTERVAL,
2572  					"igmpv2_unsolicited_report_interval"),
2573  		DEVINET_SYSCTL_RW_ENTRY(IGMPV3_UNSOLICITED_REPORT_INTERVAL,
2574  					"igmpv3_unsolicited_report_interval"),
2575  		DEVINET_SYSCTL_RW_ENTRY(IGNORE_ROUTES_WITH_LINKDOWN,
2576  					"ignore_routes_with_linkdown"),
2577  		DEVINET_SYSCTL_RW_ENTRY(DROP_GRATUITOUS_ARP,
2578  					"drop_gratuitous_arp"),
2579  
2580  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
2581  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
2582  		DEVINET_SYSCTL_FLUSHING_ENTRY(PROMOTE_SECONDARIES,
2583  					      "promote_secondaries"),
2584  		DEVINET_SYSCTL_FLUSHING_ENTRY(ROUTE_LOCALNET,
2585  					      "route_localnet"),
2586  		DEVINET_SYSCTL_FLUSHING_ENTRY(DROP_UNICAST_IN_L2_MULTICAST,
2587  					      "drop_unicast_in_l2_multicast"),
2588  	},
2589  };
2590  
__devinet_sysctl_register(struct net * net,char * dev_name,int ifindex,struct ipv4_devconf * p)2591  static int __devinet_sysctl_register(struct net *net, char *dev_name,
2592  				     int ifindex, struct ipv4_devconf *p)
2593  {
2594  	int i;
2595  	struct devinet_sysctl_table *t;
2596  	char path[sizeof("net/ipv4/conf/") + IFNAMSIZ];
2597  
2598  	t = kmemdup(&devinet_sysctl, sizeof(*t), GFP_KERNEL_ACCOUNT);
2599  	if (!t)
2600  		goto out;
2601  
2602  	for (i = 0; i < ARRAY_SIZE(t->devinet_vars); i++) {
2603  		t->devinet_vars[i].data += (char *)p - (char *)&ipv4_devconf;
2604  		t->devinet_vars[i].extra1 = p;
2605  		t->devinet_vars[i].extra2 = net;
2606  	}
2607  
2608  	snprintf(path, sizeof(path), "net/ipv4/conf/%s", dev_name);
2609  
2610  	t->sysctl_header = register_net_sysctl(net, path, t->devinet_vars);
2611  	if (!t->sysctl_header)
2612  		goto free;
2613  
2614  	p->sysctl = t;
2615  
2616  	inet_netconf_notify_devconf(net, RTM_NEWNETCONF, NETCONFA_ALL,
2617  				    ifindex, p);
2618  	return 0;
2619  
2620  free:
2621  	kfree(t);
2622  out:
2623  	return -ENOMEM;
2624  }
2625  
__devinet_sysctl_unregister(struct net * net,struct ipv4_devconf * cnf,int ifindex)2626  static void __devinet_sysctl_unregister(struct net *net,
2627  					struct ipv4_devconf *cnf, int ifindex)
2628  {
2629  	struct devinet_sysctl_table *t = cnf->sysctl;
2630  
2631  	if (t) {
2632  		cnf->sysctl = NULL;
2633  		unregister_net_sysctl_table(t->sysctl_header);
2634  		kfree(t);
2635  	}
2636  
2637  	inet_netconf_notify_devconf(net, RTM_DELNETCONF, 0, ifindex, NULL);
2638  }
2639  
devinet_sysctl_register(struct in_device * idev)2640  static int devinet_sysctl_register(struct in_device *idev)
2641  {
2642  	int err;
2643  
2644  	if (!sysctl_dev_name_is_allowed(idev->dev->name))
2645  		return -EINVAL;
2646  
2647  	err = neigh_sysctl_register(idev->dev, idev->arp_parms, NULL);
2648  	if (err)
2649  		return err;
2650  	err = __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name,
2651  					idev->dev->ifindex, &idev->cnf);
2652  	if (err)
2653  		neigh_sysctl_unregister(idev->arp_parms);
2654  	return err;
2655  }
2656  
devinet_sysctl_unregister(struct in_device * idev)2657  static void devinet_sysctl_unregister(struct in_device *idev)
2658  {
2659  	struct net *net = dev_net(idev->dev);
2660  
2661  	__devinet_sysctl_unregister(net, &idev->cnf, idev->dev->ifindex);
2662  	neigh_sysctl_unregister(idev->arp_parms);
2663  }
2664  
2665  static struct ctl_table ctl_forward_entry[] = {
2666  	{
2667  		.procname	= "ip_forward",
2668  		.data		= &ipv4_devconf.data[
2669  					IPV4_DEVCONF_FORWARDING - 1],
2670  		.maxlen		= sizeof(int),
2671  		.mode		= 0644,
2672  		.proc_handler	= devinet_sysctl_forward,
2673  		.extra1		= &ipv4_devconf,
2674  		.extra2		= &init_net,
2675  	},
2676  };
2677  #endif
2678  
devinet_init_net(struct net * net)2679  static __net_init int devinet_init_net(struct net *net)
2680  {
2681  	int err;
2682  	struct ipv4_devconf *all, *dflt;
2683  #ifdef CONFIG_SYSCTL
2684  	struct ctl_table *tbl;
2685  	struct ctl_table_header *forw_hdr;
2686  #endif
2687  
2688  	err = -ENOMEM;
2689  	all = kmemdup(&ipv4_devconf, sizeof(ipv4_devconf), GFP_KERNEL);
2690  	if (!all)
2691  		goto err_alloc_all;
2692  
2693  	dflt = kmemdup(&ipv4_devconf_dflt, sizeof(ipv4_devconf_dflt), GFP_KERNEL);
2694  	if (!dflt)
2695  		goto err_alloc_dflt;
2696  
2697  #ifdef CONFIG_SYSCTL
2698  	tbl = kmemdup(ctl_forward_entry, sizeof(ctl_forward_entry), GFP_KERNEL);
2699  	if (!tbl)
2700  		goto err_alloc_ctl;
2701  
2702  	tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1];
2703  	tbl[0].extra1 = all;
2704  	tbl[0].extra2 = net;
2705  #endif
2706  
2707  	if (!net_eq(net, &init_net)) {
2708  		switch (net_inherit_devconf()) {
2709  		case 3:
2710  			/* copy from the current netns */
2711  			memcpy(all, current->nsproxy->net_ns->ipv4.devconf_all,
2712  			       sizeof(ipv4_devconf));
2713  			memcpy(dflt,
2714  			       current->nsproxy->net_ns->ipv4.devconf_dflt,
2715  			       sizeof(ipv4_devconf_dflt));
2716  			break;
2717  		case 0:
2718  		case 1:
2719  			/* copy from init_net */
2720  			memcpy(all, init_net.ipv4.devconf_all,
2721  			       sizeof(ipv4_devconf));
2722  			memcpy(dflt, init_net.ipv4.devconf_dflt,
2723  			       sizeof(ipv4_devconf_dflt));
2724  			break;
2725  		case 2:
2726  			/* use compiled values */
2727  			break;
2728  		}
2729  	}
2730  
2731  #ifdef CONFIG_SYSCTL
2732  	err = __devinet_sysctl_register(net, "all", NETCONFA_IFINDEX_ALL, all);
2733  	if (err < 0)
2734  		goto err_reg_all;
2735  
2736  	err = __devinet_sysctl_register(net, "default",
2737  					NETCONFA_IFINDEX_DEFAULT, dflt);
2738  	if (err < 0)
2739  		goto err_reg_dflt;
2740  
2741  	err = -ENOMEM;
2742  	forw_hdr = register_net_sysctl_sz(net, "net/ipv4", tbl,
2743  					  ARRAY_SIZE(ctl_forward_entry));
2744  	if (!forw_hdr)
2745  		goto err_reg_ctl;
2746  	net->ipv4.forw_hdr = forw_hdr;
2747  #endif
2748  
2749  	net->ipv4.devconf_all = all;
2750  	net->ipv4.devconf_dflt = dflt;
2751  	return 0;
2752  
2753  #ifdef CONFIG_SYSCTL
2754  err_reg_ctl:
2755  	__devinet_sysctl_unregister(net, dflt, NETCONFA_IFINDEX_DEFAULT);
2756  err_reg_dflt:
2757  	__devinet_sysctl_unregister(net, all, NETCONFA_IFINDEX_ALL);
2758  err_reg_all:
2759  	kfree(tbl);
2760  err_alloc_ctl:
2761  #endif
2762  	kfree(dflt);
2763  err_alloc_dflt:
2764  	kfree(all);
2765  err_alloc_all:
2766  	return err;
2767  }
2768  
devinet_exit_net(struct net * net)2769  static __net_exit void devinet_exit_net(struct net *net)
2770  {
2771  #ifdef CONFIG_SYSCTL
2772  	const struct ctl_table *tbl;
2773  
2774  	tbl = net->ipv4.forw_hdr->ctl_table_arg;
2775  	unregister_net_sysctl_table(net->ipv4.forw_hdr);
2776  	__devinet_sysctl_unregister(net, net->ipv4.devconf_dflt,
2777  				    NETCONFA_IFINDEX_DEFAULT);
2778  	__devinet_sysctl_unregister(net, net->ipv4.devconf_all,
2779  				    NETCONFA_IFINDEX_ALL);
2780  	kfree(tbl);
2781  #endif
2782  	kfree(net->ipv4.devconf_dflt);
2783  	kfree(net->ipv4.devconf_all);
2784  }
2785  
2786  static __net_initdata struct pernet_operations devinet_ops = {
2787  	.init = devinet_init_net,
2788  	.exit = devinet_exit_net,
2789  };
2790  
2791  static struct rtnl_af_ops inet_af_ops __read_mostly = {
2792  	.family		  = AF_INET,
2793  	.fill_link_af	  = inet_fill_link_af,
2794  	.get_link_af_size = inet_get_link_af_size,
2795  	.validate_link_af = inet_validate_link_af,
2796  	.set_link_af	  = inet_set_link_af,
2797  };
2798  
devinet_init(void)2799  void __init devinet_init(void)
2800  {
2801  	int i;
2802  
2803  	for (i = 0; i < IN4_ADDR_HSIZE; i++)
2804  		INIT_HLIST_HEAD(&inet_addr_lst[i]);
2805  
2806  	register_pernet_subsys(&devinet_ops);
2807  	register_netdevice_notifier(&ip_netdev_notifier);
2808  
2809  	queue_delayed_work(system_power_efficient_wq, &check_lifetime_work, 0);
2810  
2811  	rtnl_af_register(&inet_af_ops);
2812  
2813  	rtnl_register(PF_INET, RTM_NEWADDR, inet_rtm_newaddr, NULL, 0);
2814  	rtnl_register(PF_INET, RTM_DELADDR, inet_rtm_deladdr, NULL, 0);
2815  	rtnl_register(PF_INET, RTM_GETADDR, NULL, inet_dump_ifaddr,
2816  		      RTNL_FLAG_DUMP_UNLOCKED | RTNL_FLAG_DUMP_SPLIT_NLM_DONE);
2817  	rtnl_register(PF_INET, RTM_GETNETCONF, inet_netconf_get_devconf,
2818  		      inet_netconf_dump_devconf,
2819  		      RTNL_FLAG_DOIT_UNLOCKED | RTNL_FLAG_DUMP_UNLOCKED);
2820  }
2821