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