1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 *	IPv6 Address [auto]configuration
4 *	Linux INET6 implementation
5 *
6 *	Authors:
7 *	Pedro Roque		<roque@di.fc.ul.pt>
8 *	Alexey Kuznetsov	<kuznet@ms2.inr.ac.ru>
9 */
10
11/*
12 *	Changes:
13 *
14 *	Janos Farkas			:	delete timer on ifdown
15 *	<chexum@bankinf.banki.hu>
16 *	Andi Kleen			:	kill double kfree on module
17 *						unload.
18 *	Maciej W. Rozycki		:	FDDI support
19 *	sekiya@USAGI			:	Don't send too many RS
20 *						packets.
21 *	yoshfuji@USAGI			:       Fixed interval between DAD
22 *						packets.
23 *	YOSHIFUJI Hideaki @USAGI	:	improved accuracy of
24 *						address validation timer.
25 *	YOSHIFUJI Hideaki @USAGI	:	Privacy Extensions (RFC3041)
26 *						support.
27 *	Yuji SEKIYA @USAGI		:	Don't assign a same IPv6
28 *						address on a same interface.
29 *	YOSHIFUJI Hideaki @USAGI	:	ARCnet support
30 *	YOSHIFUJI Hideaki @USAGI	:	convert /proc/net/if_inet6 to
31 *						seq_file.
32 *	YOSHIFUJI Hideaki @USAGI	:	improved source address
33 *						selection; consider scope,
34 *						status etc.
35 */
36
37#define pr_fmt(fmt) "IPv6: " fmt
38
39#include <linux/errno.h>
40#include <linux/types.h>
41#include <linux/kernel.h>
42#include <linux/sched/signal.h>
43#include <linux/socket.h>
44#include <linux/sockios.h>
45#include <linux/net.h>
46#include <linux/inet.h>
47#include <linux/in6.h>
48#include <linux/netdevice.h>
49#include <linux/if_addr.h>
50#include <linux/if_arp.h>
51#include <linux/if_arcnet.h>
52#include <linux/if_infiniband.h>
53#include <linux/route.h>
54#include <linux/inetdevice.h>
55#include <linux/init.h>
56#include <linux/slab.h>
57#ifdef CONFIG_SYSCTL
58#include <linux/sysctl.h>
59#endif
60#include <linux/capability.h>
61#include <linux/delay.h>
62#include <linux/notifier.h>
63#include <linux/string.h>
64#include <linux/hash.h>
65
66#include <net/ip_tunnels.h>
67#include <net/net_namespace.h>
68#include <net/sock.h>
69#include <net/snmp.h>
70
71#include <net/6lowpan.h>
72#include <net/firewire.h>
73#include <net/ipv6.h>
74#include <net/protocol.h>
75#include <net/ndisc.h>
76#include <net/ip6_route.h>
77#include <net/addrconf.h>
78#include <net/tcp.h>
79#include <net/ip.h>
80#include <net/netlink.h>
81#include <net/pkt_sched.h>
82#include <net/l3mdev.h>
83#include <linux/if_tunnel.h>
84#include <linux/rtnetlink.h>
85#include <linux/netconf.h>
86#include <linux/random.h>
87#include <linux/uaccess.h>
88#include <asm/unaligned.h>
89
90#include <linux/proc_fs.h>
91#include <linux/seq_file.h>
92#include <linux/export.h>
93#include <linux/ioam6.h>
94
95#define	INFINITY_LIFE_TIME	0xFFFFFFFF
96
97#define IPV6_MAX_STRLEN \
98	sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
99
100static inline u32 cstamp_delta(unsigned long cstamp)
101{
102	return (cstamp - INITIAL_JIFFIES) * 100UL / HZ;
103}
104
105static inline s32 rfc3315_s14_backoff_init(s32 irt)
106{
107	/* multiply 'initial retransmission time' by 0.9 .. 1.1 */
108	u64 tmp = get_random_u32_inclusive(900000, 1100000) * (u64)irt;
109	do_div(tmp, 1000000);
110	return (s32)tmp;
111}
112
113static inline s32 rfc3315_s14_backoff_update(s32 rt, s32 mrt)
114{
115	/* multiply 'retransmission timeout' by 1.9 .. 2.1 */
116	u64 tmp = get_random_u32_inclusive(1900000, 2100000) * (u64)rt;
117	do_div(tmp, 1000000);
118	if ((s32)tmp > mrt) {
119		/* multiply 'maximum retransmission time' by 0.9 .. 1.1 */
120		tmp = get_random_u32_inclusive(900000, 1100000) * (u64)mrt;
121		do_div(tmp, 1000000);
122	}
123	return (s32)tmp;
124}
125
126#ifdef CONFIG_SYSCTL
127static int addrconf_sysctl_register(struct inet6_dev *idev);
128static void addrconf_sysctl_unregister(struct inet6_dev *idev);
129#else
130static inline int addrconf_sysctl_register(struct inet6_dev *idev)
131{
132	return 0;
133}
134
135static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
136{
137}
138#endif
139
140static void ipv6_gen_rnd_iid(struct in6_addr *addr);
141
142static int ipv6_generate_eui64(u8 *eui, struct net_device *dev);
143static int ipv6_count_addresses(const struct inet6_dev *idev);
144static int ipv6_generate_stable_address(struct in6_addr *addr,
145					u8 dad_count,
146					const struct inet6_dev *idev);
147
148#define IN6_ADDR_HSIZE_SHIFT	8
149#define IN6_ADDR_HSIZE		(1 << IN6_ADDR_HSIZE_SHIFT)
150
151static void addrconf_verify(struct net *net);
152static void addrconf_verify_rtnl(struct net *net);
153
154static struct workqueue_struct *addrconf_wq;
155
156static void addrconf_join_anycast(struct inet6_ifaddr *ifp);
157static void addrconf_leave_anycast(struct inet6_ifaddr *ifp);
158
159static void addrconf_type_change(struct net_device *dev,
160				 unsigned long event);
161static int addrconf_ifdown(struct net_device *dev, bool unregister);
162
163static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
164						  int plen,
165						  const struct net_device *dev,
166						  u32 flags, u32 noflags,
167						  bool no_gw);
168
169static void addrconf_dad_start(struct inet6_ifaddr *ifp);
170static void addrconf_dad_work(struct work_struct *w);
171static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
172				   bool send_na);
173static void addrconf_dad_run(struct inet6_dev *idev, bool restart);
174static void addrconf_rs_timer(struct timer_list *t);
175static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
176static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
177
178static void inet6_prefix_notify(int event, struct inet6_dev *idev,
179				struct prefix_info *pinfo);
180
181static struct ipv6_devconf ipv6_devconf __read_mostly = {
182	.forwarding		= 0,
183	.hop_limit		= IPV6_DEFAULT_HOPLIMIT,
184	.mtu6			= IPV6_MIN_MTU,
185	.accept_ra		= 1,
186	.accept_redirects	= 1,
187	.autoconf		= 1,
188	.force_mld_version	= 0,
189	.mldv1_unsolicited_report_interval = 10 * HZ,
190	.mldv2_unsolicited_report_interval = HZ,
191	.dad_transmits		= 1,
192	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
193	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
194	.rtr_solicit_max_interval = RTR_SOLICITATION_MAX_INTERVAL,
195	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
196	.use_tempaddr		= 0,
197	.temp_valid_lft		= TEMP_VALID_LIFETIME,
198	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
199	.regen_min_advance	= REGEN_MIN_ADVANCE,
200	.regen_max_retry	= REGEN_MAX_RETRY,
201	.max_desync_factor	= MAX_DESYNC_FACTOR,
202	.max_addresses		= IPV6_MAX_ADDRESSES,
203	.accept_ra_defrtr	= 1,
204	.ra_defrtr_metric	= IP6_RT_PRIO_USER,
205	.accept_ra_from_local	= 0,
206	.accept_ra_min_hop_limit= 1,
207	.accept_ra_min_lft	= 0,
208	.accept_ra_pinfo	= 1,
209#ifdef CONFIG_IPV6_ROUTER_PREF
210	.accept_ra_rtr_pref	= 1,
211	.rtr_probe_interval	= 60 * HZ,
212#ifdef CONFIG_IPV6_ROUTE_INFO
213	.accept_ra_rt_info_min_plen = 0,
214	.accept_ra_rt_info_max_plen = 0,
215#endif
216#endif
217	.proxy_ndp		= 0,
218	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
219	.disable_ipv6		= 0,
220	.accept_dad		= 0,
221	.suppress_frag_ndisc	= 1,
222	.accept_ra_mtu		= 1,
223	.stable_secret		= {
224		.initialized = false,
225	},
226	.use_oif_addrs_only	= 0,
227	.ignore_routes_with_linkdown = 0,
228	.keep_addr_on_down	= 0,
229	.seg6_enabled		= 0,
230#ifdef CONFIG_IPV6_SEG6_HMAC
231	.seg6_require_hmac	= 0,
232#endif
233	.enhanced_dad           = 1,
234	.addr_gen_mode		= IN6_ADDR_GEN_MODE_EUI64,
235	.disable_policy		= 0,
236	.rpl_seg_enabled	= 0,
237	.ioam6_enabled		= 0,
238	.ioam6_id               = IOAM6_DEFAULT_IF_ID,
239	.ioam6_id_wide		= IOAM6_DEFAULT_IF_ID_WIDE,
240	.ndisc_evict_nocarrier	= 1,
241	.ra_honor_pio_life	= 0,
242};
243
244static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
245	.forwarding		= 0,
246	.hop_limit		= IPV6_DEFAULT_HOPLIMIT,
247	.mtu6			= IPV6_MIN_MTU,
248	.accept_ra		= 1,
249	.accept_redirects	= 1,
250	.autoconf		= 1,
251	.force_mld_version	= 0,
252	.mldv1_unsolicited_report_interval = 10 * HZ,
253	.mldv2_unsolicited_report_interval = HZ,
254	.dad_transmits		= 1,
255	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
256	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
257	.rtr_solicit_max_interval = RTR_SOLICITATION_MAX_INTERVAL,
258	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
259	.use_tempaddr		= 0,
260	.temp_valid_lft		= TEMP_VALID_LIFETIME,
261	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
262	.regen_min_advance	= REGEN_MIN_ADVANCE,
263	.regen_max_retry	= REGEN_MAX_RETRY,
264	.max_desync_factor	= MAX_DESYNC_FACTOR,
265	.max_addresses		= IPV6_MAX_ADDRESSES,
266	.accept_ra_defrtr	= 1,
267	.ra_defrtr_metric	= IP6_RT_PRIO_USER,
268	.accept_ra_from_local	= 0,
269	.accept_ra_min_hop_limit= 1,
270	.accept_ra_min_lft	= 0,
271	.accept_ra_pinfo	= 1,
272#ifdef CONFIG_IPV6_ROUTER_PREF
273	.accept_ra_rtr_pref	= 1,
274	.rtr_probe_interval	= 60 * HZ,
275#ifdef CONFIG_IPV6_ROUTE_INFO
276	.accept_ra_rt_info_min_plen = 0,
277	.accept_ra_rt_info_max_plen = 0,
278#endif
279#endif
280	.proxy_ndp		= 0,
281	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
282	.disable_ipv6		= 0,
283	.accept_dad		= 1,
284	.suppress_frag_ndisc	= 1,
285	.accept_ra_mtu		= 1,
286	.stable_secret		= {
287		.initialized = false,
288	},
289	.use_oif_addrs_only	= 0,
290	.ignore_routes_with_linkdown = 0,
291	.keep_addr_on_down	= 0,
292	.seg6_enabled		= 0,
293#ifdef CONFIG_IPV6_SEG6_HMAC
294	.seg6_require_hmac	= 0,
295#endif
296	.enhanced_dad           = 1,
297	.addr_gen_mode		= IN6_ADDR_GEN_MODE_EUI64,
298	.disable_policy		= 0,
299	.rpl_seg_enabled	= 0,
300	.ioam6_enabled		= 0,
301	.ioam6_id               = IOAM6_DEFAULT_IF_ID,
302	.ioam6_id_wide		= IOAM6_DEFAULT_IF_ID_WIDE,
303	.ndisc_evict_nocarrier	= 1,
304	.ra_honor_pio_life	= 0,
305};
306
307/* Check if link is ready: is it up and is a valid qdisc available */
308static inline bool addrconf_link_ready(const struct net_device *dev)
309{
310	return netif_oper_up(dev) && !qdisc_tx_is_noop(dev);
311}
312
313static void addrconf_del_rs_timer(struct inet6_dev *idev)
314{
315	if (del_timer(&idev->rs_timer))
316		__in6_dev_put(idev);
317}
318
319static void addrconf_del_dad_work(struct inet6_ifaddr *ifp)
320{
321	if (cancel_delayed_work(&ifp->dad_work))
322		__in6_ifa_put(ifp);
323}
324
325static void addrconf_mod_rs_timer(struct inet6_dev *idev,
326				  unsigned long when)
327{
328	if (!mod_timer(&idev->rs_timer, jiffies + when))
329		in6_dev_hold(idev);
330}
331
332static void addrconf_mod_dad_work(struct inet6_ifaddr *ifp,
333				   unsigned long delay)
334{
335	in6_ifa_hold(ifp);
336	if (mod_delayed_work(addrconf_wq, &ifp->dad_work, delay))
337		in6_ifa_put(ifp);
338}
339
340static int snmp6_alloc_dev(struct inet6_dev *idev)
341{
342	int i;
343
344	idev->stats.ipv6 = alloc_percpu_gfp(struct ipstats_mib, GFP_KERNEL_ACCOUNT);
345	if (!idev->stats.ipv6)
346		goto err_ip;
347
348	for_each_possible_cpu(i) {
349		struct ipstats_mib *addrconf_stats;
350		addrconf_stats = per_cpu_ptr(idev->stats.ipv6, i);
351		u64_stats_init(&addrconf_stats->syncp);
352	}
353
354
355	idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
356					GFP_KERNEL);
357	if (!idev->stats.icmpv6dev)
358		goto err_icmp;
359	idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
360					   GFP_KERNEL_ACCOUNT);
361	if (!idev->stats.icmpv6msgdev)
362		goto err_icmpmsg;
363
364	return 0;
365
366err_icmpmsg:
367	kfree(idev->stats.icmpv6dev);
368err_icmp:
369	free_percpu(idev->stats.ipv6);
370err_ip:
371	return -ENOMEM;
372}
373
374static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
375{
376	struct inet6_dev *ndev;
377	int err = -ENOMEM;
378
379	ASSERT_RTNL();
380
381	if (dev->mtu < IPV6_MIN_MTU && dev != blackhole_netdev)
382		return ERR_PTR(-EINVAL);
383
384	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL_ACCOUNT);
385	if (!ndev)
386		return ERR_PTR(err);
387
388	rwlock_init(&ndev->lock);
389	ndev->dev = dev;
390	INIT_LIST_HEAD(&ndev->addr_list);
391	timer_setup(&ndev->rs_timer, addrconf_rs_timer, 0);
392	memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
393
394	if (ndev->cnf.stable_secret.initialized)
395		ndev->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
396
397	ndev->cnf.mtu6 = dev->mtu;
398	ndev->ra_mtu = 0;
399	ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
400	if (!ndev->nd_parms) {
401		kfree(ndev);
402		return ERR_PTR(err);
403	}
404	if (ndev->cnf.forwarding)
405		dev_disable_lro(dev);
406	/* We refer to the device */
407	netdev_hold(dev, &ndev->dev_tracker, GFP_KERNEL);
408
409	if (snmp6_alloc_dev(ndev) < 0) {
410		netdev_dbg(dev, "%s: cannot allocate memory for statistics\n",
411			   __func__);
412		neigh_parms_release(&nd_tbl, ndev->nd_parms);
413		netdev_put(dev, &ndev->dev_tracker);
414		kfree(ndev);
415		return ERR_PTR(err);
416	}
417
418	if (dev != blackhole_netdev) {
419		if (snmp6_register_dev(ndev) < 0) {
420			netdev_dbg(dev, "%s: cannot create /proc/net/dev_snmp6/%s\n",
421				   __func__, dev->name);
422			goto err_release;
423		}
424	}
425	/* One reference from device. */
426	refcount_set(&ndev->refcnt, 1);
427
428	if (dev->flags & (IFF_NOARP | IFF_LOOPBACK))
429		ndev->cnf.accept_dad = -1;
430
431#if IS_ENABLED(CONFIG_IPV6_SIT)
432	if (dev->type == ARPHRD_SIT && (dev->priv_flags & IFF_ISATAP)) {
433		pr_info("%s: Disabled Multicast RS\n", dev->name);
434		ndev->cnf.rtr_solicits = 0;
435	}
436#endif
437
438	INIT_LIST_HEAD(&ndev->tempaddr_list);
439	ndev->desync_factor = U32_MAX;
440	if ((dev->flags&IFF_LOOPBACK) ||
441	    dev->type == ARPHRD_TUNNEL ||
442	    dev->type == ARPHRD_TUNNEL6 ||
443	    dev->type == ARPHRD_SIT ||
444	    dev->type == ARPHRD_NONE) {
445		ndev->cnf.use_tempaddr = -1;
446	}
447
448	ndev->token = in6addr_any;
449
450	if (netif_running(dev) && addrconf_link_ready(dev))
451		ndev->if_flags |= IF_READY;
452
453	ipv6_mc_init_dev(ndev);
454	ndev->tstamp = jiffies;
455	if (dev != blackhole_netdev) {
456		err = addrconf_sysctl_register(ndev);
457		if (err) {
458			ipv6_mc_destroy_dev(ndev);
459			snmp6_unregister_dev(ndev);
460			goto err_release;
461		}
462	}
463	/* protected by rtnl_lock */
464	rcu_assign_pointer(dev->ip6_ptr, ndev);
465
466	if (dev != blackhole_netdev) {
467		/* Join interface-local all-node multicast group */
468		ipv6_dev_mc_inc(dev, &in6addr_interfacelocal_allnodes);
469
470		/* Join all-node multicast group */
471		ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
472
473		/* Join all-router multicast group if forwarding is set */
474		if (ndev->cnf.forwarding && (dev->flags & IFF_MULTICAST))
475			ipv6_dev_mc_inc(dev, &in6addr_linklocal_allrouters);
476	}
477	return ndev;
478
479err_release:
480	neigh_parms_release(&nd_tbl, ndev->nd_parms);
481	ndev->dead = 1;
482	in6_dev_finish_destroy(ndev);
483	return ERR_PTR(err);
484}
485
486static struct inet6_dev *ipv6_find_idev(struct net_device *dev)
487{
488	struct inet6_dev *idev;
489
490	ASSERT_RTNL();
491
492	idev = __in6_dev_get(dev);
493	if (!idev) {
494		idev = ipv6_add_dev(dev);
495		if (IS_ERR(idev))
496			return idev;
497	}
498
499	if (dev->flags&IFF_UP)
500		ipv6_mc_up(idev);
501	return idev;
502}
503
504static int inet6_netconf_msgsize_devconf(int type)
505{
506	int size =  NLMSG_ALIGN(sizeof(struct netconfmsg))
507		    + nla_total_size(4);	/* NETCONFA_IFINDEX */
508	bool all = false;
509
510	if (type == NETCONFA_ALL)
511		all = true;
512
513	if (all || type == NETCONFA_FORWARDING)
514		size += nla_total_size(4);
515#ifdef CONFIG_IPV6_MROUTE
516	if (all || type == NETCONFA_MC_FORWARDING)
517		size += nla_total_size(4);
518#endif
519	if (all || type == NETCONFA_PROXY_NEIGH)
520		size += nla_total_size(4);
521
522	if (all || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN)
523		size += nla_total_size(4);
524
525	return size;
526}
527
528static int inet6_netconf_fill_devconf(struct sk_buff *skb, int ifindex,
529				      struct ipv6_devconf *devconf, u32 portid,
530				      u32 seq, int event, unsigned int flags,
531				      int type)
532{
533	struct nlmsghdr  *nlh;
534	struct netconfmsg *ncm;
535	bool all = false;
536
537	nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct netconfmsg),
538			flags);
539	if (!nlh)
540		return -EMSGSIZE;
541
542	if (type == NETCONFA_ALL)
543		all = true;
544
545	ncm = nlmsg_data(nlh);
546	ncm->ncm_family = AF_INET6;
547
548	if (nla_put_s32(skb, NETCONFA_IFINDEX, ifindex) < 0)
549		goto nla_put_failure;
550
551	if (!devconf)
552		goto out;
553
554	if ((all || type == NETCONFA_FORWARDING) &&
555	    nla_put_s32(skb, NETCONFA_FORWARDING,
556			READ_ONCE(devconf->forwarding)) < 0)
557		goto nla_put_failure;
558#ifdef CONFIG_IPV6_MROUTE
559	if ((all || type == NETCONFA_MC_FORWARDING) &&
560	    nla_put_s32(skb, NETCONFA_MC_FORWARDING,
561			atomic_read(&devconf->mc_forwarding)) < 0)
562		goto nla_put_failure;
563#endif
564	if ((all || type == NETCONFA_PROXY_NEIGH) &&
565	    nla_put_s32(skb, NETCONFA_PROXY_NEIGH,
566			READ_ONCE(devconf->proxy_ndp)) < 0)
567		goto nla_put_failure;
568
569	if ((all || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) &&
570	    nla_put_s32(skb, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
571			READ_ONCE(devconf->ignore_routes_with_linkdown)) < 0)
572		goto nla_put_failure;
573
574out:
575	nlmsg_end(skb, nlh);
576	return 0;
577
578nla_put_failure:
579	nlmsg_cancel(skb, nlh);
580	return -EMSGSIZE;
581}
582
583void inet6_netconf_notify_devconf(struct net *net, int event, int type,
584				  int ifindex, struct ipv6_devconf *devconf)
585{
586	struct sk_buff *skb;
587	int err = -ENOBUFS;
588
589	skb = nlmsg_new(inet6_netconf_msgsize_devconf(type), GFP_KERNEL);
590	if (!skb)
591		goto errout;
592
593	err = inet6_netconf_fill_devconf(skb, ifindex, devconf, 0, 0,
594					 event, 0, type);
595	if (err < 0) {
596		/* -EMSGSIZE implies BUG in inet6_netconf_msgsize_devconf() */
597		WARN_ON(err == -EMSGSIZE);
598		kfree_skb(skb);
599		goto errout;
600	}
601	rtnl_notify(skb, net, 0, RTNLGRP_IPV6_NETCONF, NULL, GFP_KERNEL);
602	return;
603errout:
604	rtnl_set_sk_err(net, RTNLGRP_IPV6_NETCONF, err);
605}
606
607static const struct nla_policy devconf_ipv6_policy[NETCONFA_MAX+1] = {
608	[NETCONFA_IFINDEX]	= { .len = sizeof(int) },
609	[NETCONFA_FORWARDING]	= { .len = sizeof(int) },
610	[NETCONFA_PROXY_NEIGH]	= { .len = sizeof(int) },
611	[NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN]	= { .len = sizeof(int) },
612};
613
614static int inet6_netconf_valid_get_req(struct sk_buff *skb,
615				       const struct nlmsghdr *nlh,
616				       struct nlattr **tb,
617				       struct netlink_ext_ack *extack)
618{
619	int i, err;
620
621	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(struct netconfmsg))) {
622		NL_SET_ERR_MSG_MOD(extack, "Invalid header for netconf get request");
623		return -EINVAL;
624	}
625
626	if (!netlink_strict_get_check(skb))
627		return nlmsg_parse_deprecated(nlh, sizeof(struct netconfmsg),
628					      tb, NETCONFA_MAX,
629					      devconf_ipv6_policy, extack);
630
631	err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct netconfmsg),
632					    tb, NETCONFA_MAX,
633					    devconf_ipv6_policy, extack);
634	if (err)
635		return err;
636
637	for (i = 0; i <= NETCONFA_MAX; i++) {
638		if (!tb[i])
639			continue;
640
641		switch (i) {
642		case NETCONFA_IFINDEX:
643			break;
644		default:
645			NL_SET_ERR_MSG_MOD(extack, "Unsupported attribute in netconf get request");
646			return -EINVAL;
647		}
648	}
649
650	return 0;
651}
652
653static int inet6_netconf_get_devconf(struct sk_buff *in_skb,
654				     struct nlmsghdr *nlh,
655				     struct netlink_ext_ack *extack)
656{
657	struct net *net = sock_net(in_skb->sk);
658	struct nlattr *tb[NETCONFA_MAX+1];
659	struct inet6_dev *in6_dev = NULL;
660	struct net_device *dev = NULL;
661	struct sk_buff *skb;
662	struct ipv6_devconf *devconf;
663	int ifindex;
664	int err;
665
666	err = inet6_netconf_valid_get_req(in_skb, nlh, tb, extack);
667	if (err < 0)
668		return err;
669
670	if (!tb[NETCONFA_IFINDEX])
671		return -EINVAL;
672
673	err = -EINVAL;
674	ifindex = nla_get_s32(tb[NETCONFA_IFINDEX]);
675	switch (ifindex) {
676	case NETCONFA_IFINDEX_ALL:
677		devconf = net->ipv6.devconf_all;
678		break;
679	case NETCONFA_IFINDEX_DEFAULT:
680		devconf = net->ipv6.devconf_dflt;
681		break;
682	default:
683		dev = dev_get_by_index(net, ifindex);
684		if (!dev)
685			return -EINVAL;
686		in6_dev = in6_dev_get(dev);
687		if (!in6_dev)
688			goto errout;
689		devconf = &in6_dev->cnf;
690		break;
691	}
692
693	err = -ENOBUFS;
694	skb = nlmsg_new(inet6_netconf_msgsize_devconf(NETCONFA_ALL), GFP_KERNEL);
695	if (!skb)
696		goto errout;
697
698	err = inet6_netconf_fill_devconf(skb, ifindex, devconf,
699					 NETLINK_CB(in_skb).portid,
700					 nlh->nlmsg_seq, RTM_NEWNETCONF, 0,
701					 NETCONFA_ALL);
702	if (err < 0) {
703		/* -EMSGSIZE implies BUG in inet6_netconf_msgsize_devconf() */
704		WARN_ON(err == -EMSGSIZE);
705		kfree_skb(skb);
706		goto errout;
707	}
708	err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid);
709errout:
710	if (in6_dev)
711		in6_dev_put(in6_dev);
712	dev_put(dev);
713	return err;
714}
715
716/* Combine dev_addr_genid and dev_base_seq to detect changes.
717 */
718static u32 inet6_base_seq(const struct net *net)
719{
720	u32 res = atomic_read(&net->ipv6.dev_addr_genid) +
721		  READ_ONCE(net->dev_base_seq);
722
723	/* Must not return 0 (see nl_dump_check_consistent()).
724	 * Chose a value far away from 0.
725	 */
726	if (!res)
727		res = 0x80000000;
728	return res;
729}
730
731static int inet6_netconf_dump_devconf(struct sk_buff *skb,
732				      struct netlink_callback *cb)
733{
734	const struct nlmsghdr *nlh = cb->nlh;
735	struct net *net = sock_net(skb->sk);
736	struct {
737		unsigned long ifindex;
738		unsigned int all_default;
739	} *ctx = (void *)cb->ctx;
740	struct net_device *dev;
741	struct inet6_dev *idev;
742	int err = 0;
743
744	if (cb->strict_check) {
745		struct netlink_ext_ack *extack = cb->extack;
746		struct netconfmsg *ncm;
747
748		if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ncm))) {
749			NL_SET_ERR_MSG_MOD(extack, "Invalid header for netconf dump request");
750			return -EINVAL;
751		}
752
753		if (nlmsg_attrlen(nlh, sizeof(*ncm))) {
754			NL_SET_ERR_MSG_MOD(extack, "Invalid data after header in netconf dump request");
755			return -EINVAL;
756		}
757	}
758
759	rcu_read_lock();
760	for_each_netdev_dump(net, dev, ctx->ifindex) {
761		idev = __in6_dev_get(dev);
762		if (!idev)
763			continue;
764		err = inet6_netconf_fill_devconf(skb, dev->ifindex,
765					         &idev->cnf,
766						 NETLINK_CB(cb->skb).portid,
767						 nlh->nlmsg_seq,
768						 RTM_NEWNETCONF,
769						 NLM_F_MULTI,
770						 NETCONFA_ALL);
771		if (err < 0)
772			goto done;
773	}
774	if (ctx->all_default == 0) {
775		err = inet6_netconf_fill_devconf(skb, NETCONFA_IFINDEX_ALL,
776						 net->ipv6.devconf_all,
777						 NETLINK_CB(cb->skb).portid,
778						 nlh->nlmsg_seq,
779						 RTM_NEWNETCONF, NLM_F_MULTI,
780						 NETCONFA_ALL);
781		if (err < 0)
782			goto done;
783		ctx->all_default++;
784	}
785	if (ctx->all_default == 1) {
786		err = inet6_netconf_fill_devconf(skb, NETCONFA_IFINDEX_DEFAULT,
787						 net->ipv6.devconf_dflt,
788						 NETLINK_CB(cb->skb).portid,
789						 nlh->nlmsg_seq,
790						 RTM_NEWNETCONF, NLM_F_MULTI,
791						 NETCONFA_ALL);
792		if (err < 0)
793			goto done;
794		ctx->all_default++;
795	}
796done:
797	rcu_read_unlock();
798	return err;
799}
800
801#ifdef CONFIG_SYSCTL
802static void dev_forward_change(struct inet6_dev *idev)
803{
804	struct net_device *dev;
805	struct inet6_ifaddr *ifa;
806	LIST_HEAD(tmp_addr_list);
807
808	if (!idev)
809		return;
810	dev = idev->dev;
811	if (idev->cnf.forwarding)
812		dev_disable_lro(dev);
813	if (dev->flags & IFF_MULTICAST) {
814		if (idev->cnf.forwarding) {
815			ipv6_dev_mc_inc(dev, &in6addr_linklocal_allrouters);
816			ipv6_dev_mc_inc(dev, &in6addr_interfacelocal_allrouters);
817			ipv6_dev_mc_inc(dev, &in6addr_sitelocal_allrouters);
818		} else {
819			ipv6_dev_mc_dec(dev, &in6addr_linklocal_allrouters);
820			ipv6_dev_mc_dec(dev, &in6addr_interfacelocal_allrouters);
821			ipv6_dev_mc_dec(dev, &in6addr_sitelocal_allrouters);
822		}
823	}
824
825	read_lock_bh(&idev->lock);
826	list_for_each_entry(ifa, &idev->addr_list, if_list) {
827		if (ifa->flags&IFA_F_TENTATIVE)
828			continue;
829		list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
830	}
831	read_unlock_bh(&idev->lock);
832
833	while (!list_empty(&tmp_addr_list)) {
834		ifa = list_first_entry(&tmp_addr_list,
835				       struct inet6_ifaddr, if_list_aux);
836		list_del(&ifa->if_list_aux);
837		if (idev->cnf.forwarding)
838			addrconf_join_anycast(ifa);
839		else
840			addrconf_leave_anycast(ifa);
841	}
842
843	inet6_netconf_notify_devconf(dev_net(dev), RTM_NEWNETCONF,
844				     NETCONFA_FORWARDING,
845				     dev->ifindex, &idev->cnf);
846}
847
848
849static void addrconf_forward_change(struct net *net, __s32 newf)
850{
851	struct net_device *dev;
852	struct inet6_dev *idev;
853
854	for_each_netdev(net, dev) {
855		idev = __in6_dev_get(dev);
856		if (idev) {
857			int changed = (!idev->cnf.forwarding) ^ (!newf);
858
859			WRITE_ONCE(idev->cnf.forwarding, newf);
860			if (changed)
861				dev_forward_change(idev);
862		}
863	}
864}
865
866static int addrconf_fixup_forwarding(struct ctl_table *table, int *p, int newf)
867{
868	struct net *net;
869	int old;
870
871	if (!rtnl_trylock())
872		return restart_syscall();
873
874	net = (struct net *)table->extra2;
875	old = *p;
876	WRITE_ONCE(*p, newf);
877
878	if (p == &net->ipv6.devconf_dflt->forwarding) {
879		if ((!newf) ^ (!old))
880			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
881						     NETCONFA_FORWARDING,
882						     NETCONFA_IFINDEX_DEFAULT,
883						     net->ipv6.devconf_dflt);
884		rtnl_unlock();
885		return 0;
886	}
887
888	if (p == &net->ipv6.devconf_all->forwarding) {
889		int old_dflt = net->ipv6.devconf_dflt->forwarding;
890
891		WRITE_ONCE(net->ipv6.devconf_dflt->forwarding, newf);
892		if ((!newf) ^ (!old_dflt))
893			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
894						     NETCONFA_FORWARDING,
895						     NETCONFA_IFINDEX_DEFAULT,
896						     net->ipv6.devconf_dflt);
897
898		addrconf_forward_change(net, newf);
899		if ((!newf) ^ (!old))
900			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
901						     NETCONFA_FORWARDING,
902						     NETCONFA_IFINDEX_ALL,
903						     net->ipv6.devconf_all);
904	} else if ((!newf) ^ (!old))
905		dev_forward_change((struct inet6_dev *)table->extra1);
906	rtnl_unlock();
907
908	if (newf)
909		rt6_purge_dflt_routers(net);
910	return 1;
911}
912
913static void addrconf_linkdown_change(struct net *net, __s32 newf)
914{
915	struct net_device *dev;
916	struct inet6_dev *idev;
917
918	for_each_netdev(net, dev) {
919		idev = __in6_dev_get(dev);
920		if (idev) {
921			int changed = (!idev->cnf.ignore_routes_with_linkdown) ^ (!newf);
922
923			WRITE_ONCE(idev->cnf.ignore_routes_with_linkdown, newf);
924			if (changed)
925				inet6_netconf_notify_devconf(dev_net(dev),
926							     RTM_NEWNETCONF,
927							     NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
928							     dev->ifindex,
929							     &idev->cnf);
930		}
931	}
932}
933
934static int addrconf_fixup_linkdown(struct ctl_table *table, int *p, int newf)
935{
936	struct net *net;
937	int old;
938
939	if (!rtnl_trylock())
940		return restart_syscall();
941
942	net = (struct net *)table->extra2;
943	old = *p;
944	WRITE_ONCE(*p, newf);
945
946	if (p == &net->ipv6.devconf_dflt->ignore_routes_with_linkdown) {
947		if ((!newf) ^ (!old))
948			inet6_netconf_notify_devconf(net,
949						     RTM_NEWNETCONF,
950						     NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
951						     NETCONFA_IFINDEX_DEFAULT,
952						     net->ipv6.devconf_dflt);
953		rtnl_unlock();
954		return 0;
955	}
956
957	if (p == &net->ipv6.devconf_all->ignore_routes_with_linkdown) {
958		WRITE_ONCE(net->ipv6.devconf_dflt->ignore_routes_with_linkdown, newf);
959		addrconf_linkdown_change(net, newf);
960		if ((!newf) ^ (!old))
961			inet6_netconf_notify_devconf(net,
962						     RTM_NEWNETCONF,
963						     NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
964						     NETCONFA_IFINDEX_ALL,
965						     net->ipv6.devconf_all);
966	}
967	rtnl_unlock();
968
969	return 1;
970}
971
972#endif
973
974/* Nobody refers to this ifaddr, destroy it */
975void inet6_ifa_finish_destroy(struct inet6_ifaddr *ifp)
976{
977	WARN_ON(!hlist_unhashed(&ifp->addr_lst));
978
979#ifdef NET_REFCNT_DEBUG
980	pr_debug("%s\n", __func__);
981#endif
982
983	in6_dev_put(ifp->idev);
984
985	if (cancel_delayed_work(&ifp->dad_work))
986		pr_notice("delayed DAD work was pending while freeing ifa=%p\n",
987			  ifp);
988
989	if (ifp->state != INET6_IFADDR_STATE_DEAD) {
990		pr_warn("Freeing alive inet6 address %p\n", ifp);
991		return;
992	}
993
994	kfree_rcu(ifp, rcu);
995}
996
997static void
998ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
999{
1000	struct list_head *p;
1001	int ifp_scope = ipv6_addr_src_scope(&ifp->addr);
1002
1003	/*
1004	 * Each device address list is sorted in order of scope -
1005	 * global before linklocal.
1006	 */
1007	list_for_each(p, &idev->addr_list) {
1008		struct inet6_ifaddr *ifa
1009			= list_entry(p, struct inet6_ifaddr, if_list);
1010		if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr))
1011			break;
1012	}
1013
1014	list_add_tail_rcu(&ifp->if_list, p);
1015}
1016
1017static u32 inet6_addr_hash(const struct net *net, const struct in6_addr *addr)
1018{
1019	u32 val = ipv6_addr_hash(addr) ^ net_hash_mix(net);
1020
1021	return hash_32(val, IN6_ADDR_HSIZE_SHIFT);
1022}
1023
1024static bool ipv6_chk_same_addr(struct net *net, const struct in6_addr *addr,
1025			       struct net_device *dev, unsigned int hash)
1026{
1027	struct inet6_ifaddr *ifp;
1028
1029	hlist_for_each_entry(ifp, &net->ipv6.inet6_addr_lst[hash], addr_lst) {
1030		if (ipv6_addr_equal(&ifp->addr, addr)) {
1031			if (!dev || ifp->idev->dev == dev)
1032				return true;
1033		}
1034	}
1035	return false;
1036}
1037
1038static int ipv6_add_addr_hash(struct net_device *dev, struct inet6_ifaddr *ifa)
1039{
1040	struct net *net = dev_net(dev);
1041	unsigned int hash = inet6_addr_hash(net, &ifa->addr);
1042	int err = 0;
1043
1044	spin_lock_bh(&net->ipv6.addrconf_hash_lock);
1045
1046	/* Ignore adding duplicate addresses on an interface */
1047	if (ipv6_chk_same_addr(net, &ifa->addr, dev, hash)) {
1048		netdev_dbg(dev, "ipv6_add_addr: already assigned\n");
1049		err = -EEXIST;
1050	} else {
1051		hlist_add_head_rcu(&ifa->addr_lst, &net->ipv6.inet6_addr_lst[hash]);
1052	}
1053
1054	spin_unlock_bh(&net->ipv6.addrconf_hash_lock);
1055
1056	return err;
1057}
1058
1059/* On success it returns ifp with increased reference count */
1060
1061static struct inet6_ifaddr *
1062ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg,
1063	      bool can_block, struct netlink_ext_ack *extack)
1064{
1065	gfp_t gfp_flags = can_block ? GFP_KERNEL : GFP_ATOMIC;
1066	int addr_type = ipv6_addr_type(cfg->pfx);
1067	struct net *net = dev_net(idev->dev);
1068	struct inet6_ifaddr *ifa = NULL;
1069	struct fib6_info *f6i = NULL;
1070	int err = 0;
1071
1072	if (addr_type == IPV6_ADDR_ANY) {
1073		NL_SET_ERR_MSG_MOD(extack, "Invalid address");
1074		return ERR_PTR(-EADDRNOTAVAIL);
1075	} else if (addr_type & IPV6_ADDR_MULTICAST &&
1076		   !(cfg->ifa_flags & IFA_F_MCAUTOJOIN)) {
1077		NL_SET_ERR_MSG_MOD(extack, "Cannot assign multicast address without \"IFA_F_MCAUTOJOIN\" flag");
1078		return ERR_PTR(-EADDRNOTAVAIL);
1079	} else if (!(idev->dev->flags & IFF_LOOPBACK) &&
1080		   !netif_is_l3_master(idev->dev) &&
1081		   addr_type & IPV6_ADDR_LOOPBACK) {
1082		NL_SET_ERR_MSG_MOD(extack, "Cannot assign loopback address on this device");
1083		return ERR_PTR(-EADDRNOTAVAIL);
1084	}
1085
1086	if (idev->dead) {
1087		NL_SET_ERR_MSG_MOD(extack, "device is going away");
1088		err = -ENODEV;
1089		goto out;
1090	}
1091
1092	if (idev->cnf.disable_ipv6) {
1093		NL_SET_ERR_MSG_MOD(extack, "IPv6 is disabled on this device");
1094		err = -EACCES;
1095		goto out;
1096	}
1097
1098	/* validator notifier needs to be blocking;
1099	 * do not call in atomic context
1100	 */
1101	if (can_block) {
1102		struct in6_validator_info i6vi = {
1103			.i6vi_addr = *cfg->pfx,
1104			.i6vi_dev = idev,
1105			.extack = extack,
1106		};
1107
1108		err = inet6addr_validator_notifier_call_chain(NETDEV_UP, &i6vi);
1109		err = notifier_to_errno(err);
1110		if (err < 0)
1111			goto out;
1112	}
1113
1114	ifa = kzalloc(sizeof(*ifa), gfp_flags | __GFP_ACCOUNT);
1115	if (!ifa) {
1116		err = -ENOBUFS;
1117		goto out;
1118	}
1119
1120	f6i = addrconf_f6i_alloc(net, idev, cfg->pfx, false, gfp_flags, extack);
1121	if (IS_ERR(f6i)) {
1122		err = PTR_ERR(f6i);
1123		f6i = NULL;
1124		goto out;
1125	}
1126
1127	neigh_parms_data_state_setall(idev->nd_parms);
1128
1129	ifa->addr = *cfg->pfx;
1130	if (cfg->peer_pfx)
1131		ifa->peer_addr = *cfg->peer_pfx;
1132
1133	spin_lock_init(&ifa->lock);
1134	INIT_DELAYED_WORK(&ifa->dad_work, addrconf_dad_work);
1135	INIT_HLIST_NODE(&ifa->addr_lst);
1136	ifa->scope = cfg->scope;
1137	ifa->prefix_len = cfg->plen;
1138	ifa->rt_priority = cfg->rt_priority;
1139	ifa->flags = cfg->ifa_flags;
1140	ifa->ifa_proto = cfg->ifa_proto;
1141	/* No need to add the TENTATIVE flag for addresses with NODAD */
1142	if (!(cfg->ifa_flags & IFA_F_NODAD))
1143		ifa->flags |= IFA_F_TENTATIVE;
1144	ifa->valid_lft = cfg->valid_lft;
1145	ifa->prefered_lft = cfg->preferred_lft;
1146	ifa->cstamp = ifa->tstamp = jiffies;
1147	ifa->tokenized = false;
1148
1149	ifa->rt = f6i;
1150
1151	ifa->idev = idev;
1152	in6_dev_hold(idev);
1153
1154	/* For caller */
1155	refcount_set(&ifa->refcnt, 1);
1156
1157	rcu_read_lock();
1158
1159	err = ipv6_add_addr_hash(idev->dev, ifa);
1160	if (err < 0) {
1161		rcu_read_unlock();
1162		goto out;
1163	}
1164
1165	write_lock_bh(&idev->lock);
1166
1167	/* Add to inet6_dev unicast addr list. */
1168	ipv6_link_dev_addr(idev, ifa);
1169
1170	if (ifa->flags&IFA_F_TEMPORARY) {
1171		list_add(&ifa->tmp_list, &idev->tempaddr_list);
1172		in6_ifa_hold(ifa);
1173	}
1174
1175	in6_ifa_hold(ifa);
1176	write_unlock_bh(&idev->lock);
1177
1178	rcu_read_unlock();
1179
1180	inet6addr_notifier_call_chain(NETDEV_UP, ifa);
1181out:
1182	if (unlikely(err < 0)) {
1183		fib6_info_release(f6i);
1184
1185		if (ifa) {
1186			if (ifa->idev)
1187				in6_dev_put(ifa->idev);
1188			kfree(ifa);
1189		}
1190		ifa = ERR_PTR(err);
1191	}
1192
1193	return ifa;
1194}
1195
1196enum cleanup_prefix_rt_t {
1197	CLEANUP_PREFIX_RT_NOP,    /* no cleanup action for prefix route */
1198	CLEANUP_PREFIX_RT_DEL,    /* delete the prefix route */
1199	CLEANUP_PREFIX_RT_EXPIRE, /* update the lifetime of the prefix route */
1200};
1201
1202/*
1203 * Check, whether the prefix for ifp would still need a prefix route
1204 * after deleting ifp. The function returns one of the CLEANUP_PREFIX_RT_*
1205 * constants.
1206 *
1207 * 1) we don't purge prefix if address was not permanent.
1208 *    prefix is managed by its own lifetime.
1209 * 2) we also don't purge, if the address was IFA_F_NOPREFIXROUTE.
1210 * 3) if there are no addresses, delete prefix.
1211 * 4) if there are still other permanent address(es),
1212 *    corresponding prefix is still permanent.
1213 * 5) if there are still other addresses with IFA_F_NOPREFIXROUTE,
1214 *    don't purge the prefix, assume user space is managing it.
1215 * 6) otherwise, update prefix lifetime to the
1216 *    longest valid lifetime among the corresponding
1217 *    addresses on the device.
1218 *    Note: subsequent RA will update lifetime.
1219 **/
1220static enum cleanup_prefix_rt_t
1221check_cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long *expires)
1222{
1223	struct inet6_ifaddr *ifa;
1224	struct inet6_dev *idev = ifp->idev;
1225	unsigned long lifetime;
1226	enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_DEL;
1227
1228	*expires = jiffies;
1229
1230	list_for_each_entry(ifa, &idev->addr_list, if_list) {
1231		if (ifa == ifp)
1232			continue;
1233		if (ifa->prefix_len != ifp->prefix_len ||
1234		    !ipv6_prefix_equal(&ifa->addr, &ifp->addr,
1235				       ifp->prefix_len))
1236			continue;
1237		if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE))
1238			return CLEANUP_PREFIX_RT_NOP;
1239
1240		action = CLEANUP_PREFIX_RT_EXPIRE;
1241
1242		spin_lock(&ifa->lock);
1243
1244		lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ);
1245		/*
1246		 * Note: Because this address is
1247		 * not permanent, lifetime <
1248		 * LONG_MAX / HZ here.
1249		 */
1250		if (time_before(*expires, ifa->tstamp + lifetime * HZ))
1251			*expires = ifa->tstamp + lifetime * HZ;
1252		spin_unlock(&ifa->lock);
1253	}
1254
1255	return action;
1256}
1257
1258static void
1259cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires,
1260		     bool del_rt, bool del_peer)
1261{
1262	struct fib6_table *table;
1263	struct fib6_info *f6i;
1264
1265	f6i = addrconf_get_prefix_route(del_peer ? &ifp->peer_addr : &ifp->addr,
1266					ifp->prefix_len,
1267					ifp->idev->dev, 0, RTF_DEFAULT, true);
1268	if (f6i) {
1269		if (del_rt)
1270			ip6_del_rt(dev_net(ifp->idev->dev), f6i, false);
1271		else {
1272			if (!(f6i->fib6_flags & RTF_EXPIRES)) {
1273				table = f6i->fib6_table;
1274				spin_lock_bh(&table->tb6_lock);
1275
1276				fib6_set_expires(f6i, expires);
1277				fib6_add_gc_list(f6i);
1278
1279				spin_unlock_bh(&table->tb6_lock);
1280			}
1281			fib6_info_release(f6i);
1282		}
1283	}
1284}
1285
1286
1287/* This function wants to get referenced ifp and releases it before return */
1288
1289static void ipv6_del_addr(struct inet6_ifaddr *ifp)
1290{
1291	enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_NOP;
1292	struct net *net = dev_net(ifp->idev->dev);
1293	unsigned long expires;
1294	int state;
1295
1296	ASSERT_RTNL();
1297
1298	spin_lock_bh(&ifp->lock);
1299	state = ifp->state;
1300	ifp->state = INET6_IFADDR_STATE_DEAD;
1301	spin_unlock_bh(&ifp->lock);
1302
1303	if (state == INET6_IFADDR_STATE_DEAD)
1304		goto out;
1305
1306	spin_lock_bh(&net->ipv6.addrconf_hash_lock);
1307	hlist_del_init_rcu(&ifp->addr_lst);
1308	spin_unlock_bh(&net->ipv6.addrconf_hash_lock);
1309
1310	write_lock_bh(&ifp->idev->lock);
1311
1312	if (ifp->flags&IFA_F_TEMPORARY) {
1313		list_del(&ifp->tmp_list);
1314		if (ifp->ifpub) {
1315			in6_ifa_put(ifp->ifpub);
1316			ifp->ifpub = NULL;
1317		}
1318		__in6_ifa_put(ifp);
1319	}
1320
1321	if (ifp->flags & IFA_F_PERMANENT && !(ifp->flags & IFA_F_NOPREFIXROUTE))
1322		action = check_cleanup_prefix_route(ifp, &expires);
1323
1324	list_del_rcu(&ifp->if_list);
1325	__in6_ifa_put(ifp);
1326
1327	write_unlock_bh(&ifp->idev->lock);
1328
1329	addrconf_del_dad_work(ifp);
1330
1331	ipv6_ifa_notify(RTM_DELADDR, ifp);
1332
1333	inet6addr_notifier_call_chain(NETDEV_DOWN, ifp);
1334
1335	if (action != CLEANUP_PREFIX_RT_NOP) {
1336		cleanup_prefix_route(ifp, expires,
1337			action == CLEANUP_PREFIX_RT_DEL, false);
1338	}
1339
1340	/* clean up prefsrc entries */
1341	rt6_remove_prefsrc(ifp);
1342out:
1343	in6_ifa_put(ifp);
1344}
1345
1346static unsigned long ipv6_get_regen_advance(const struct inet6_dev *idev)
1347{
1348	return READ_ONCE(idev->cnf.regen_min_advance) +
1349		READ_ONCE(idev->cnf.regen_max_retry) *
1350		READ_ONCE(idev->cnf.dad_transmits) *
1351		max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
1352}
1353
1354static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
1355{
1356	struct inet6_dev *idev = ifp->idev;
1357	unsigned long tmp_tstamp, age;
1358	unsigned long regen_advance;
1359	unsigned long now = jiffies;
1360	u32 if_public_preferred_lft;
1361	s32 cnf_temp_preferred_lft;
1362	struct inet6_ifaddr *ift;
1363	struct ifa6_config cfg;
1364	long max_desync_factor;
1365	struct in6_addr addr;
1366	int ret = 0;
1367
1368	write_lock_bh(&idev->lock);
1369
1370retry:
1371	in6_dev_hold(idev);
1372	if (READ_ONCE(idev->cnf.use_tempaddr) <= 0) {
1373		write_unlock_bh(&idev->lock);
1374		pr_info("%s: use_tempaddr is disabled\n", __func__);
1375		in6_dev_put(idev);
1376		ret = -1;
1377		goto out;
1378	}
1379	spin_lock_bh(&ifp->lock);
1380	if (ifp->regen_count++ >= READ_ONCE(idev->cnf.regen_max_retry)) {
1381		WRITE_ONCE(idev->cnf.use_tempaddr, -1);	/*XXX*/
1382		spin_unlock_bh(&ifp->lock);
1383		write_unlock_bh(&idev->lock);
1384		pr_warn("%s: regeneration time exceeded - disabled temporary address support\n",
1385			__func__);
1386		in6_dev_put(idev);
1387		ret = -1;
1388		goto out;
1389	}
1390	in6_ifa_hold(ifp);
1391	memcpy(addr.s6_addr, ifp->addr.s6_addr, 8);
1392	ipv6_gen_rnd_iid(&addr);
1393
1394	age = (now - ifp->tstamp) / HZ;
1395
1396	regen_advance = ipv6_get_regen_advance(idev);
1397
1398	/* recalculate max_desync_factor each time and update
1399	 * idev->desync_factor if it's larger
1400	 */
1401	cnf_temp_preferred_lft = READ_ONCE(idev->cnf.temp_prefered_lft);
1402	max_desync_factor = min_t(long,
1403				  READ_ONCE(idev->cnf.max_desync_factor),
1404				  cnf_temp_preferred_lft - regen_advance);
1405
1406	if (unlikely(idev->desync_factor > max_desync_factor)) {
1407		if (max_desync_factor > 0) {
1408			get_random_bytes(&idev->desync_factor,
1409					 sizeof(idev->desync_factor));
1410			idev->desync_factor %= max_desync_factor;
1411		} else {
1412			idev->desync_factor = 0;
1413		}
1414	}
1415
1416	if_public_preferred_lft = ifp->prefered_lft;
1417
1418	memset(&cfg, 0, sizeof(cfg));
1419	cfg.valid_lft = min_t(__u32, ifp->valid_lft,
1420			      READ_ONCE(idev->cnf.temp_valid_lft) + age);
1421	cfg.preferred_lft = cnf_temp_preferred_lft + age - idev->desync_factor;
1422	cfg.preferred_lft = min_t(__u32, if_public_preferred_lft, cfg.preferred_lft);
1423	cfg.preferred_lft = min_t(__u32, cfg.valid_lft, cfg.preferred_lft);
1424
1425	cfg.plen = ifp->prefix_len;
1426	tmp_tstamp = ifp->tstamp;
1427	spin_unlock_bh(&ifp->lock);
1428
1429	write_unlock_bh(&idev->lock);
1430
1431	/* From RFC 4941:
1432	 *
1433	 *     A temporary address is created only if this calculated Preferred
1434	 *     Lifetime is greater than REGEN_ADVANCE time units.  In
1435	 *     particular, an implementation must not create a temporary address
1436	 *     with a zero Preferred Lifetime.
1437	 *
1438	 *     ...
1439	 *
1440	 *     When creating a temporary address, the lifetime values MUST be
1441	 *     derived from the corresponding prefix as follows:
1442	 *
1443	 *     ...
1444	 *
1445	 *     *  Its Preferred Lifetime is the lower of the Preferred Lifetime
1446	 *        of the public address or TEMP_PREFERRED_LIFETIME -
1447	 *        DESYNC_FACTOR.
1448	 *
1449	 * To comply with the RFC's requirements, clamp the preferred lifetime
1450	 * to a minimum of regen_advance, unless that would exceed valid_lft or
1451	 * ifp->prefered_lft.
1452	 *
1453	 * Use age calculation as in addrconf_verify to avoid unnecessary
1454	 * temporary addresses being generated.
1455	 */
1456	age = (now - tmp_tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
1457	if (cfg.preferred_lft <= regen_advance + age) {
1458		cfg.preferred_lft = regen_advance + age + 1;
1459		if (cfg.preferred_lft > cfg.valid_lft ||
1460		    cfg.preferred_lft > if_public_preferred_lft) {
1461			in6_ifa_put(ifp);
1462			in6_dev_put(idev);
1463			ret = -1;
1464			goto out;
1465		}
1466	}
1467
1468	cfg.ifa_flags = IFA_F_TEMPORARY;
1469	/* set in addrconf_prefix_rcv() */
1470	if (ifp->flags & IFA_F_OPTIMISTIC)
1471		cfg.ifa_flags |= IFA_F_OPTIMISTIC;
1472
1473	cfg.pfx = &addr;
1474	cfg.scope = ipv6_addr_scope(cfg.pfx);
1475
1476	ift = ipv6_add_addr(idev, &cfg, block, NULL);
1477	if (IS_ERR(ift)) {
1478		in6_ifa_put(ifp);
1479		in6_dev_put(idev);
1480		pr_info("%s: retry temporary address regeneration\n", __func__);
1481		write_lock_bh(&idev->lock);
1482		goto retry;
1483	}
1484
1485	spin_lock_bh(&ift->lock);
1486	ift->ifpub = ifp;
1487	ift->cstamp = now;
1488	ift->tstamp = tmp_tstamp;
1489	spin_unlock_bh(&ift->lock);
1490
1491	addrconf_dad_start(ift);
1492	in6_ifa_put(ift);
1493	in6_dev_put(idev);
1494out:
1495	return ret;
1496}
1497
1498/*
1499 *	Choose an appropriate source address (RFC3484)
1500 */
1501enum {
1502	IPV6_SADDR_RULE_INIT = 0,
1503	IPV6_SADDR_RULE_LOCAL,
1504	IPV6_SADDR_RULE_SCOPE,
1505	IPV6_SADDR_RULE_PREFERRED,
1506#ifdef CONFIG_IPV6_MIP6
1507	IPV6_SADDR_RULE_HOA,
1508#endif
1509	IPV6_SADDR_RULE_OIF,
1510	IPV6_SADDR_RULE_LABEL,
1511	IPV6_SADDR_RULE_PRIVACY,
1512	IPV6_SADDR_RULE_ORCHID,
1513	IPV6_SADDR_RULE_PREFIX,
1514#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1515	IPV6_SADDR_RULE_NOT_OPTIMISTIC,
1516#endif
1517	IPV6_SADDR_RULE_MAX
1518};
1519
1520struct ipv6_saddr_score {
1521	int			rule;
1522	int			addr_type;
1523	struct inet6_ifaddr	*ifa;
1524	DECLARE_BITMAP(scorebits, IPV6_SADDR_RULE_MAX);
1525	int			scopedist;
1526	int			matchlen;
1527};
1528
1529struct ipv6_saddr_dst {
1530	const struct in6_addr *addr;
1531	int ifindex;
1532	int scope;
1533	int label;
1534	unsigned int prefs;
1535};
1536
1537static inline int ipv6_saddr_preferred(int type)
1538{
1539	if (type & (IPV6_ADDR_MAPPED|IPV6_ADDR_COMPATv4|IPV6_ADDR_LOOPBACK))
1540		return 1;
1541	return 0;
1542}
1543
1544static bool ipv6_use_optimistic_addr(const struct net *net,
1545				     const struct inet6_dev *idev)
1546{
1547#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1548	if (!idev)
1549		return false;
1550	if (!READ_ONCE(net->ipv6.devconf_all->optimistic_dad) &&
1551	    !READ_ONCE(idev->cnf.optimistic_dad))
1552		return false;
1553	if (!READ_ONCE(net->ipv6.devconf_all->use_optimistic) &&
1554	    !READ_ONCE(idev->cnf.use_optimistic))
1555		return false;
1556
1557	return true;
1558#else
1559	return false;
1560#endif
1561}
1562
1563static bool ipv6_allow_optimistic_dad(const struct net *net,
1564				      const struct inet6_dev *idev)
1565{
1566#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1567	if (!idev)
1568		return false;
1569	if (!READ_ONCE(net->ipv6.devconf_all->optimistic_dad) &&
1570	    !READ_ONCE(idev->cnf.optimistic_dad))
1571		return false;
1572
1573	return true;
1574#else
1575	return false;
1576#endif
1577}
1578
1579static int ipv6_get_saddr_eval(struct net *net,
1580			       struct ipv6_saddr_score *score,
1581			       struct ipv6_saddr_dst *dst,
1582			       int i)
1583{
1584	int ret;
1585
1586	if (i <= score->rule) {
1587		switch (i) {
1588		case IPV6_SADDR_RULE_SCOPE:
1589			ret = score->scopedist;
1590			break;
1591		case IPV6_SADDR_RULE_PREFIX:
1592			ret = score->matchlen;
1593			break;
1594		default:
1595			ret = !!test_bit(i, score->scorebits);
1596		}
1597		goto out;
1598	}
1599
1600	switch (i) {
1601	case IPV6_SADDR_RULE_INIT:
1602		/* Rule 0: remember if hiscore is not ready yet */
1603		ret = !!score->ifa;
1604		break;
1605	case IPV6_SADDR_RULE_LOCAL:
1606		/* Rule 1: Prefer same address */
1607		ret = ipv6_addr_equal(&score->ifa->addr, dst->addr);
1608		break;
1609	case IPV6_SADDR_RULE_SCOPE:
1610		/* Rule 2: Prefer appropriate scope
1611		 *
1612		 *      ret
1613		 *       ^
1614		 *    -1 |  d 15
1615		 *    ---+--+-+---> scope
1616		 *       |
1617		 *       |             d is scope of the destination.
1618		 *  B-d  |  \
1619		 *       |   \      <- smaller scope is better if
1620		 *  B-15 |    \        if scope is enough for destination.
1621		 *       |             ret = B - scope (-1 <= scope >= d <= 15).
1622		 * d-C-1 | /
1623		 *       |/         <- greater is better
1624		 *   -C  /             if scope is not enough for destination.
1625		 *      /|             ret = scope - C (-1 <= d < scope <= 15).
1626		 *
1627		 * d - C - 1 < B -15 (for all -1 <= d <= 15).
1628		 * C > d + 14 - B >= 15 + 14 - B = 29 - B.
1629		 * Assume B = 0 and we get C > 29.
1630		 */
1631		ret = __ipv6_addr_src_scope(score->addr_type);
1632		if (ret >= dst->scope)
1633			ret = -ret;
1634		else
1635			ret -= 128;	/* 30 is enough */
1636		score->scopedist = ret;
1637		break;
1638	case IPV6_SADDR_RULE_PREFERRED:
1639	    {
1640		/* Rule 3: Avoid deprecated and optimistic addresses */
1641		u8 avoid = IFA_F_DEPRECATED;
1642
1643		if (!ipv6_use_optimistic_addr(net, score->ifa->idev))
1644			avoid |= IFA_F_OPTIMISTIC;
1645		ret = ipv6_saddr_preferred(score->addr_type) ||
1646		      !(score->ifa->flags & avoid);
1647		break;
1648	    }
1649#ifdef CONFIG_IPV6_MIP6
1650	case IPV6_SADDR_RULE_HOA:
1651	    {
1652		/* Rule 4: Prefer home address */
1653		int prefhome = !(dst->prefs & IPV6_PREFER_SRC_COA);
1654		ret = !(score->ifa->flags & IFA_F_HOMEADDRESS) ^ prefhome;
1655		break;
1656	    }
1657#endif
1658	case IPV6_SADDR_RULE_OIF:
1659		/* Rule 5: Prefer outgoing interface */
1660		ret = (!dst->ifindex ||
1661		       dst->ifindex == score->ifa->idev->dev->ifindex);
1662		break;
1663	case IPV6_SADDR_RULE_LABEL:
1664		/* Rule 6: Prefer matching label */
1665		ret = ipv6_addr_label(net,
1666				      &score->ifa->addr, score->addr_type,
1667				      score->ifa->idev->dev->ifindex) == dst->label;
1668		break;
1669	case IPV6_SADDR_RULE_PRIVACY:
1670	    {
1671		/* Rule 7: Prefer public address
1672		 * Note: prefer temporary address if use_tempaddr >= 2
1673		 */
1674		int preftmp = dst->prefs & (IPV6_PREFER_SRC_PUBLIC|IPV6_PREFER_SRC_TMP) ?
1675				!!(dst->prefs & IPV6_PREFER_SRC_TMP) :
1676				READ_ONCE(score->ifa->idev->cnf.use_tempaddr) >= 2;
1677		ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
1678		break;
1679	    }
1680	case IPV6_SADDR_RULE_ORCHID:
1681		/* Rule 8-: Prefer ORCHID vs ORCHID or
1682		 *	    non-ORCHID vs non-ORCHID
1683		 */
1684		ret = !(ipv6_addr_orchid(&score->ifa->addr) ^
1685			ipv6_addr_orchid(dst->addr));
1686		break;
1687	case IPV6_SADDR_RULE_PREFIX:
1688		/* Rule 8: Use longest matching prefix */
1689		ret = ipv6_addr_diff(&score->ifa->addr, dst->addr);
1690		if (ret > score->ifa->prefix_len)
1691			ret = score->ifa->prefix_len;
1692		score->matchlen = ret;
1693		break;
1694#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1695	case IPV6_SADDR_RULE_NOT_OPTIMISTIC:
1696		/* Optimistic addresses still have lower precedence than other
1697		 * preferred addresses.
1698		 */
1699		ret = !(score->ifa->flags & IFA_F_OPTIMISTIC);
1700		break;
1701#endif
1702	default:
1703		ret = 0;
1704	}
1705
1706	if (ret)
1707		__set_bit(i, score->scorebits);
1708	score->rule = i;
1709out:
1710	return ret;
1711}
1712
1713static int __ipv6_dev_get_saddr(struct net *net,
1714				struct ipv6_saddr_dst *dst,
1715				struct inet6_dev *idev,
1716				struct ipv6_saddr_score *scores,
1717				int hiscore_idx)
1718{
1719	struct ipv6_saddr_score *score = &scores[1 - hiscore_idx], *hiscore = &scores[hiscore_idx];
1720
1721	list_for_each_entry_rcu(score->ifa, &idev->addr_list, if_list) {
1722		int i;
1723
1724		/*
1725		 * - Tentative Address (RFC2462 section 5.4)
1726		 *  - A tentative address is not considered
1727		 *    "assigned to an interface" in the traditional
1728		 *    sense, unless it is also flagged as optimistic.
1729		 * - Candidate Source Address (section 4)
1730		 *  - In any case, anycast addresses, multicast
1731		 *    addresses, and the unspecified address MUST
1732		 *    NOT be included in a candidate set.
1733		 */
1734		if ((score->ifa->flags & IFA_F_TENTATIVE) &&
1735		    (!(score->ifa->flags & IFA_F_OPTIMISTIC)))
1736			continue;
1737
1738		score->addr_type = __ipv6_addr_type(&score->ifa->addr);
1739
1740		if (unlikely(score->addr_type == IPV6_ADDR_ANY ||
1741			     score->addr_type & IPV6_ADDR_MULTICAST)) {
1742			net_dbg_ratelimited("ADDRCONF: unspecified / multicast address assigned as unicast address on %s",
1743					    idev->dev->name);
1744			continue;
1745		}
1746
1747		score->rule = -1;
1748		bitmap_zero(score->scorebits, IPV6_SADDR_RULE_MAX);
1749
1750		for (i = 0; i < IPV6_SADDR_RULE_MAX; i++) {
1751			int minihiscore, miniscore;
1752
1753			minihiscore = ipv6_get_saddr_eval(net, hiscore, dst, i);
1754			miniscore = ipv6_get_saddr_eval(net, score, dst, i);
1755
1756			if (minihiscore > miniscore) {
1757				if (i == IPV6_SADDR_RULE_SCOPE &&
1758				    score->scopedist > 0) {
1759					/*
1760					 * special case:
1761					 * each remaining entry
1762					 * has too small (not enough)
1763					 * scope, because ifa entries
1764					 * are sorted by their scope
1765					 * values.
1766					 */
1767					goto out;
1768				}
1769				break;
1770			} else if (minihiscore < miniscore) {
1771				swap(hiscore, score);
1772				hiscore_idx = 1 - hiscore_idx;
1773
1774				/* restore our iterator */
1775				score->ifa = hiscore->ifa;
1776
1777				break;
1778			}
1779		}
1780	}
1781out:
1782	return hiscore_idx;
1783}
1784
1785static int ipv6_get_saddr_master(struct net *net,
1786				 const struct net_device *dst_dev,
1787				 const struct net_device *master,
1788				 struct ipv6_saddr_dst *dst,
1789				 struct ipv6_saddr_score *scores,
1790				 int hiscore_idx)
1791{
1792	struct inet6_dev *idev;
1793
1794	idev = __in6_dev_get(dst_dev);
1795	if (idev)
1796		hiscore_idx = __ipv6_dev_get_saddr(net, dst, idev,
1797						   scores, hiscore_idx);
1798
1799	idev = __in6_dev_get(master);
1800	if (idev)
1801		hiscore_idx = __ipv6_dev_get_saddr(net, dst, idev,
1802						   scores, hiscore_idx);
1803
1804	return hiscore_idx;
1805}
1806
1807int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev,
1808		       const struct in6_addr *daddr, unsigned int prefs,
1809		       struct in6_addr *saddr)
1810{
1811	struct ipv6_saddr_score scores[2], *hiscore;
1812	struct ipv6_saddr_dst dst;
1813	struct inet6_dev *idev;
1814	struct net_device *dev;
1815	int dst_type;
1816	bool use_oif_addr = false;
1817	int hiscore_idx = 0;
1818	int ret = 0;
1819
1820	dst_type = __ipv6_addr_type(daddr);
1821	dst.addr = daddr;
1822	dst.ifindex = dst_dev ? dst_dev->ifindex : 0;
1823	dst.scope = __ipv6_addr_src_scope(dst_type);
1824	dst.label = ipv6_addr_label(net, daddr, dst_type, dst.ifindex);
1825	dst.prefs = prefs;
1826
1827	scores[hiscore_idx].rule = -1;
1828	scores[hiscore_idx].ifa = NULL;
1829
1830	rcu_read_lock();
1831
1832	/* Candidate Source Address (section 4)
1833	 *  - multicast and link-local destination address,
1834	 *    the set of candidate source address MUST only
1835	 *    include addresses assigned to interfaces
1836	 *    belonging to the same link as the outgoing
1837	 *    interface.
1838	 * (- For site-local destination addresses, the
1839	 *    set of candidate source addresses MUST only
1840	 *    include addresses assigned to interfaces
1841	 *    belonging to the same site as the outgoing
1842	 *    interface.)
1843	 *  - "It is RECOMMENDED that the candidate source addresses
1844	 *    be the set of unicast addresses assigned to the
1845	 *    interface that will be used to send to the destination
1846	 *    (the 'outgoing' interface)." (RFC 6724)
1847	 */
1848	if (dst_dev) {
1849		idev = __in6_dev_get(dst_dev);
1850		if ((dst_type & IPV6_ADDR_MULTICAST) ||
1851		    dst.scope <= IPV6_ADDR_SCOPE_LINKLOCAL ||
1852		    (idev && READ_ONCE(idev->cnf.use_oif_addrs_only))) {
1853			use_oif_addr = true;
1854		}
1855	}
1856
1857	if (use_oif_addr) {
1858		if (idev)
1859			hiscore_idx = __ipv6_dev_get_saddr(net, &dst, idev, scores, hiscore_idx);
1860	} else {
1861		const struct net_device *master;
1862		int master_idx = 0;
1863
1864		/* if dst_dev exists and is enslaved to an L3 device, then
1865		 * prefer addresses from dst_dev and then the master over
1866		 * any other enslaved devices in the L3 domain.
1867		 */
1868		master = l3mdev_master_dev_rcu(dst_dev);
1869		if (master) {
1870			master_idx = master->ifindex;
1871
1872			hiscore_idx = ipv6_get_saddr_master(net, dst_dev,
1873							    master, &dst,
1874							    scores, hiscore_idx);
1875
1876			if (scores[hiscore_idx].ifa)
1877				goto out;
1878		}
1879
1880		for_each_netdev_rcu(net, dev) {
1881			/* only consider addresses on devices in the
1882			 * same L3 domain
1883			 */
1884			if (l3mdev_master_ifindex_rcu(dev) != master_idx)
1885				continue;
1886			idev = __in6_dev_get(dev);
1887			if (!idev)
1888				continue;
1889			hiscore_idx = __ipv6_dev_get_saddr(net, &dst, idev, scores, hiscore_idx);
1890		}
1891	}
1892
1893out:
1894	hiscore = &scores[hiscore_idx];
1895	if (!hiscore->ifa)
1896		ret = -EADDRNOTAVAIL;
1897	else
1898		*saddr = hiscore->ifa->addr;
1899
1900	rcu_read_unlock();
1901	return ret;
1902}
1903EXPORT_SYMBOL(ipv6_dev_get_saddr);
1904
1905static int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
1906			      u32 banned_flags)
1907{
1908	struct inet6_ifaddr *ifp;
1909	int err = -EADDRNOTAVAIL;
1910
1911	list_for_each_entry_reverse(ifp, &idev->addr_list, if_list) {
1912		if (ifp->scope > IFA_LINK)
1913			break;
1914		if (ifp->scope == IFA_LINK &&
1915		    !(ifp->flags & banned_flags)) {
1916			*addr = ifp->addr;
1917			err = 0;
1918			break;
1919		}
1920	}
1921	return err;
1922}
1923
1924int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
1925		    u32 banned_flags)
1926{
1927	struct inet6_dev *idev;
1928	int err = -EADDRNOTAVAIL;
1929
1930	rcu_read_lock();
1931	idev = __in6_dev_get(dev);
1932	if (idev) {
1933		read_lock_bh(&idev->lock);
1934		err = __ipv6_get_lladdr(idev, addr, banned_flags);
1935		read_unlock_bh(&idev->lock);
1936	}
1937	rcu_read_unlock();
1938	return err;
1939}
1940
1941static int ipv6_count_addresses(const struct inet6_dev *idev)
1942{
1943	const struct inet6_ifaddr *ifp;
1944	int cnt = 0;
1945
1946	rcu_read_lock();
1947	list_for_each_entry_rcu(ifp, &idev->addr_list, if_list)
1948		cnt++;
1949	rcu_read_unlock();
1950	return cnt;
1951}
1952
1953int ipv6_chk_addr(struct net *net, const struct in6_addr *addr,
1954		  const struct net_device *dev, int strict)
1955{
1956	return ipv6_chk_addr_and_flags(net, addr, dev, !dev,
1957				       strict, IFA_F_TENTATIVE);
1958}
1959EXPORT_SYMBOL(ipv6_chk_addr);
1960
1961/* device argument is used to find the L3 domain of interest. If
1962 * skip_dev_check is set, then the ifp device is not checked against
1963 * the passed in dev argument. So the 2 cases for addresses checks are:
1964 *   1. does the address exist in the L3 domain that dev is part of
1965 *      (skip_dev_check = true), or
1966 *
1967 *   2. does the address exist on the specific device
1968 *      (skip_dev_check = false)
1969 */
1970static struct net_device *
1971__ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
1972			  const struct net_device *dev, bool skip_dev_check,
1973			  int strict, u32 banned_flags)
1974{
1975	unsigned int hash = inet6_addr_hash(net, addr);
1976	struct net_device *l3mdev, *ndev;
1977	struct inet6_ifaddr *ifp;
1978	u32 ifp_flags;
1979
1980	rcu_read_lock();
1981
1982	l3mdev = l3mdev_master_dev_rcu(dev);
1983	if (skip_dev_check)
1984		dev = NULL;
1985
1986	hlist_for_each_entry_rcu(ifp, &net->ipv6.inet6_addr_lst[hash], addr_lst) {
1987		ndev = ifp->idev->dev;
1988
1989		if (l3mdev_master_dev_rcu(ndev) != l3mdev)
1990			continue;
1991
1992		/* Decouple optimistic from tentative for evaluation here.
1993		 * Ban optimistic addresses explicitly, when required.
1994		 */
1995		ifp_flags = (ifp->flags&IFA_F_OPTIMISTIC)
1996			    ? (ifp->flags&~IFA_F_TENTATIVE)
1997			    : ifp->flags;
1998		if (ipv6_addr_equal(&ifp->addr, addr) &&
1999		    !(ifp_flags&banned_flags) &&
2000		    (!dev || ndev == dev ||
2001		     !(ifp->scope&(IFA_LINK|IFA_HOST) || strict))) {
2002			rcu_read_unlock();
2003			return ndev;
2004		}
2005	}
2006
2007	rcu_read_unlock();
2008	return NULL;
2009}
2010
2011int ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
2012			    const struct net_device *dev, bool skip_dev_check,
2013			    int strict, u32 banned_flags)
2014{
2015	return __ipv6_chk_addr_and_flags(net, addr, dev, skip_dev_check,
2016					 strict, banned_flags) ? 1 : 0;
2017}
2018EXPORT_SYMBOL(ipv6_chk_addr_and_flags);
2019
2020
2021/* Compares an address/prefix_len with addresses on device @dev.
2022 * If one is found it returns true.
2023 */
2024bool ipv6_chk_custom_prefix(const struct in6_addr *addr,
2025	const unsigned int prefix_len, struct net_device *dev)
2026{
2027	const struct inet6_ifaddr *ifa;
2028	const struct inet6_dev *idev;
2029	bool ret = false;
2030
2031	rcu_read_lock();
2032	idev = __in6_dev_get(dev);
2033	if (idev) {
2034		list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
2035			ret = ipv6_prefix_equal(addr, &ifa->addr, prefix_len);
2036			if (ret)
2037				break;
2038		}
2039	}
2040	rcu_read_unlock();
2041
2042	return ret;
2043}
2044EXPORT_SYMBOL(ipv6_chk_custom_prefix);
2045
2046int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
2047{
2048	const struct inet6_ifaddr *ifa;
2049	const struct inet6_dev *idev;
2050	int	onlink;
2051
2052	onlink = 0;
2053	rcu_read_lock();
2054	idev = __in6_dev_get(dev);
2055	if (idev) {
2056		list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
2057			onlink = ipv6_prefix_equal(addr, &ifa->addr,
2058						   ifa->prefix_len);
2059			if (onlink)
2060				break;
2061		}
2062	}
2063	rcu_read_unlock();
2064	return onlink;
2065}
2066EXPORT_SYMBOL(ipv6_chk_prefix);
2067
2068/**
2069 * ipv6_dev_find - find the first device with a given source address.
2070 * @net: the net namespace
2071 * @addr: the source address
2072 * @dev: used to find the L3 domain of interest
2073 *
2074 * The caller should be protected by RCU, or RTNL.
2075 */
2076struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr,
2077				 struct net_device *dev)
2078{
2079	return __ipv6_chk_addr_and_flags(net, addr, dev, !dev, 1,
2080					 IFA_F_TENTATIVE);
2081}
2082EXPORT_SYMBOL(ipv6_dev_find);
2083
2084struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
2085				     struct net_device *dev, int strict)
2086{
2087	unsigned int hash = inet6_addr_hash(net, addr);
2088	struct inet6_ifaddr *ifp, *result = NULL;
2089
2090	rcu_read_lock();
2091	hlist_for_each_entry_rcu(ifp, &net->ipv6.inet6_addr_lst[hash], addr_lst) {
2092		if (ipv6_addr_equal(&ifp->addr, addr)) {
2093			if (!dev || ifp->idev->dev == dev ||
2094			    !(ifp->scope&(IFA_LINK|IFA_HOST) || strict)) {
2095				if (in6_ifa_hold_safe(ifp)) {
2096					result = ifp;
2097					break;
2098				}
2099			}
2100		}
2101	}
2102	rcu_read_unlock();
2103
2104	return result;
2105}
2106
2107/* Gets referenced address, destroys ifaddr */
2108
2109static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
2110{
2111	if (dad_failed)
2112		ifp->flags |= IFA_F_DADFAILED;
2113
2114	if (ifp->flags&IFA_F_TEMPORARY) {
2115		struct inet6_ifaddr *ifpub;
2116		spin_lock_bh(&ifp->lock);
2117		ifpub = ifp->ifpub;
2118		if (ifpub) {
2119			in6_ifa_hold(ifpub);
2120			spin_unlock_bh(&ifp->lock);
2121			ipv6_create_tempaddr(ifpub, true);
2122			in6_ifa_put(ifpub);
2123		} else {
2124			spin_unlock_bh(&ifp->lock);
2125		}
2126		ipv6_del_addr(ifp);
2127	} else if (ifp->flags&IFA_F_PERMANENT || !dad_failed) {
2128		spin_lock_bh(&ifp->lock);
2129		addrconf_del_dad_work(ifp);
2130		ifp->flags |= IFA_F_TENTATIVE;
2131		if (dad_failed)
2132			ifp->flags &= ~IFA_F_OPTIMISTIC;
2133		spin_unlock_bh(&ifp->lock);
2134		if (dad_failed)
2135			ipv6_ifa_notify(0, ifp);
2136		in6_ifa_put(ifp);
2137	} else {
2138		ipv6_del_addr(ifp);
2139	}
2140}
2141
2142static int addrconf_dad_end(struct inet6_ifaddr *ifp)
2143{
2144	int err = -ENOENT;
2145
2146	spin_lock_bh(&ifp->lock);
2147	if (ifp->state == INET6_IFADDR_STATE_DAD) {
2148		ifp->state = INET6_IFADDR_STATE_POSTDAD;
2149		err = 0;
2150	}
2151	spin_unlock_bh(&ifp->lock);
2152
2153	return err;
2154}
2155
2156void addrconf_dad_failure(struct sk_buff *skb, struct inet6_ifaddr *ifp)
2157{
2158	struct inet6_dev *idev = ifp->idev;
2159	struct net *net = dev_net(idev->dev);
2160	int max_addresses;
2161
2162	if (addrconf_dad_end(ifp)) {
2163		in6_ifa_put(ifp);
2164		return;
2165	}
2166
2167	net_info_ratelimited("%s: IPv6 duplicate address %pI6c used by %pM detected!\n",
2168			     ifp->idev->dev->name, &ifp->addr, eth_hdr(skb)->h_source);
2169
2170	spin_lock_bh(&ifp->lock);
2171
2172	if (ifp->flags & IFA_F_STABLE_PRIVACY) {
2173		struct in6_addr new_addr;
2174		struct inet6_ifaddr *ifp2;
2175		int retries = ifp->stable_privacy_retry + 1;
2176		struct ifa6_config cfg = {
2177			.pfx = &new_addr,
2178			.plen = ifp->prefix_len,
2179			.ifa_flags = ifp->flags,
2180			.valid_lft = ifp->valid_lft,
2181			.preferred_lft = ifp->prefered_lft,
2182			.scope = ifp->scope,
2183		};
2184
2185		if (retries > net->ipv6.sysctl.idgen_retries) {
2186			net_info_ratelimited("%s: privacy stable address generation failed because of DAD conflicts!\n",
2187					     ifp->idev->dev->name);
2188			goto errdad;
2189		}
2190
2191		new_addr = ifp->addr;
2192		if (ipv6_generate_stable_address(&new_addr, retries,
2193						 idev))
2194			goto errdad;
2195
2196		spin_unlock_bh(&ifp->lock);
2197
2198		max_addresses = READ_ONCE(idev->cnf.max_addresses);
2199		if (max_addresses &&
2200		    ipv6_count_addresses(idev) >= max_addresses)
2201			goto lock_errdad;
2202
2203		net_info_ratelimited("%s: generating new stable privacy address because of DAD conflict\n",
2204				     ifp->idev->dev->name);
2205
2206		ifp2 = ipv6_add_addr(idev, &cfg, false, NULL);
2207		if (IS_ERR(ifp2))
2208			goto lock_errdad;
2209
2210		spin_lock_bh(&ifp2->lock);
2211		ifp2->stable_privacy_retry = retries;
2212		ifp2->state = INET6_IFADDR_STATE_PREDAD;
2213		spin_unlock_bh(&ifp2->lock);
2214
2215		addrconf_mod_dad_work(ifp2, net->ipv6.sysctl.idgen_delay);
2216		in6_ifa_put(ifp2);
2217lock_errdad:
2218		spin_lock_bh(&ifp->lock);
2219	}
2220
2221errdad:
2222	/* transition from _POSTDAD to _ERRDAD */
2223	ifp->state = INET6_IFADDR_STATE_ERRDAD;
2224	spin_unlock_bh(&ifp->lock);
2225
2226	addrconf_mod_dad_work(ifp, 0);
2227	in6_ifa_put(ifp);
2228}
2229
2230/* Join to solicited addr multicast group.
2231 * caller must hold RTNL */
2232void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
2233{
2234	struct in6_addr maddr;
2235
2236	if (dev->flags&(IFF_LOOPBACK|IFF_NOARP))
2237		return;
2238
2239	addrconf_addr_solict_mult(addr, &maddr);
2240	ipv6_dev_mc_inc(dev, &maddr);
2241}
2242
2243/* caller must hold RTNL */
2244void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
2245{
2246	struct in6_addr maddr;
2247
2248	if (idev->dev->flags&(IFF_LOOPBACK|IFF_NOARP))
2249		return;
2250
2251	addrconf_addr_solict_mult(addr, &maddr);
2252	__ipv6_dev_mc_dec(idev, &maddr);
2253}
2254
2255/* caller must hold RTNL */
2256static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
2257{
2258	struct in6_addr addr;
2259
2260	if (ifp->prefix_len >= 127) /* RFC 6164 */
2261		return;
2262	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
2263	if (ipv6_addr_any(&addr))
2264		return;
2265	__ipv6_dev_ac_inc(ifp->idev, &addr);
2266}
2267
2268/* caller must hold RTNL */
2269static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
2270{
2271	struct in6_addr addr;
2272
2273	if (ifp->prefix_len >= 127) /* RFC 6164 */
2274		return;
2275	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
2276	if (ipv6_addr_any(&addr))
2277		return;
2278	__ipv6_dev_ac_dec(ifp->idev, &addr);
2279}
2280
2281static int addrconf_ifid_6lowpan(u8 *eui, struct net_device *dev)
2282{
2283	switch (dev->addr_len) {
2284	case ETH_ALEN:
2285		memcpy(eui, dev->dev_addr, 3);
2286		eui[3] = 0xFF;
2287		eui[4] = 0xFE;
2288		memcpy(eui + 5, dev->dev_addr + 3, 3);
2289		break;
2290	case EUI64_ADDR_LEN:
2291		memcpy(eui, dev->dev_addr, EUI64_ADDR_LEN);
2292		eui[0] ^= 2;
2293		break;
2294	default:
2295		return -1;
2296	}
2297
2298	return 0;
2299}
2300
2301static int addrconf_ifid_ieee1394(u8 *eui, struct net_device *dev)
2302{
2303	const union fwnet_hwaddr *ha;
2304
2305	if (dev->addr_len != FWNET_ALEN)
2306		return -1;
2307
2308	ha = (const union fwnet_hwaddr *)dev->dev_addr;
2309
2310	memcpy(eui, &ha->uc.uniq_id, sizeof(ha->uc.uniq_id));
2311	eui[0] ^= 2;
2312	return 0;
2313}
2314
2315static int addrconf_ifid_arcnet(u8 *eui, struct net_device *dev)
2316{
2317	/* XXX: inherit EUI-64 from other interface -- yoshfuji */
2318	if (dev->addr_len != ARCNET_ALEN)
2319		return -1;
2320	memset(eui, 0, 7);
2321	eui[7] = *(u8 *)dev->dev_addr;
2322	return 0;
2323}
2324
2325static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev)
2326{
2327	if (dev->addr_len != INFINIBAND_ALEN)
2328		return -1;
2329	memcpy(eui, dev->dev_addr + 12, 8);
2330	eui[0] |= 2;
2331	return 0;
2332}
2333
2334static int __ipv6_isatap_ifid(u8 *eui, __be32 addr)
2335{
2336	if (addr == 0)
2337		return -1;
2338	eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
2339		  ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
2340		  ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
2341		  ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
2342		  ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
2343		  ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
2344	eui[1] = 0;
2345	eui[2] = 0x5E;
2346	eui[3] = 0xFE;
2347	memcpy(eui + 4, &addr, 4);
2348	return 0;
2349}
2350
2351static int addrconf_ifid_sit(u8 *eui, struct net_device *dev)
2352{
2353	if (dev->priv_flags & IFF_ISATAP)
2354		return __ipv6_isatap_ifid(eui, *(__be32 *)dev->dev_addr);
2355	return -1;
2356}
2357
2358static int addrconf_ifid_gre(u8 *eui, struct net_device *dev)
2359{
2360	return __ipv6_isatap_ifid(eui, *(__be32 *)dev->dev_addr);
2361}
2362
2363static int addrconf_ifid_ip6tnl(u8 *eui, struct net_device *dev)
2364{
2365	memcpy(eui, dev->perm_addr, 3);
2366	memcpy(eui + 5, dev->perm_addr + 3, 3);
2367	eui[3] = 0xFF;
2368	eui[4] = 0xFE;
2369	eui[0] ^= 2;
2370	return 0;
2371}
2372
2373static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
2374{
2375	switch (dev->type) {
2376	case ARPHRD_ETHER:
2377	case ARPHRD_FDDI:
2378		return addrconf_ifid_eui48(eui, dev);
2379	case ARPHRD_ARCNET:
2380		return addrconf_ifid_arcnet(eui, dev);
2381	case ARPHRD_INFINIBAND:
2382		return addrconf_ifid_infiniband(eui, dev);
2383	case ARPHRD_SIT:
2384		return addrconf_ifid_sit(eui, dev);
2385	case ARPHRD_IPGRE:
2386	case ARPHRD_TUNNEL:
2387		return addrconf_ifid_gre(eui, dev);
2388	case ARPHRD_6LOWPAN:
2389		return addrconf_ifid_6lowpan(eui, dev);
2390	case ARPHRD_IEEE1394:
2391		return addrconf_ifid_ieee1394(eui, dev);
2392	case ARPHRD_TUNNEL6:
2393	case ARPHRD_IP6GRE:
2394	case ARPHRD_RAWIP:
2395		return addrconf_ifid_ip6tnl(eui, dev);
2396	}
2397	return -1;
2398}
2399
2400static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)
2401{
2402	int err = -1;
2403	struct inet6_ifaddr *ifp;
2404
2405	read_lock_bh(&idev->lock);
2406	list_for_each_entry_reverse(ifp, &idev->addr_list, if_list) {
2407		if (ifp->scope > IFA_LINK)
2408			break;
2409		if (ifp->scope == IFA_LINK && !(ifp->flags&IFA_F_TENTATIVE)) {
2410			memcpy(eui, ifp->addr.s6_addr+8, 8);
2411			err = 0;
2412			break;
2413		}
2414	}
2415	read_unlock_bh(&idev->lock);
2416	return err;
2417}
2418
2419/* Generation of a randomized Interface Identifier
2420 * draft-ietf-6man-rfc4941bis, Section 3.3.1
2421 */
2422
2423static void ipv6_gen_rnd_iid(struct in6_addr *addr)
2424{
2425regen:
2426	get_random_bytes(&addr->s6_addr[8], 8);
2427
2428	/* <draft-ietf-6man-rfc4941bis-08.txt>, Section 3.3.1:
2429	 * check if generated address is not inappropriate:
2430	 *
2431	 * - Reserved IPv6 Interface Identifiers
2432	 * - XXX: already assigned to an address on the device
2433	 */
2434
2435	/* Subnet-router anycast: 0000:0000:0000:0000 */
2436	if (!(addr->s6_addr32[2] | addr->s6_addr32[3]))
2437		goto regen;
2438
2439	/* IANA Ethernet block: 0200:5EFF:FE00:0000-0200:5EFF:FE00:5212
2440	 * Proxy Mobile IPv6:   0200:5EFF:FE00:5213
2441	 * IANA Ethernet block: 0200:5EFF:FE00:5214-0200:5EFF:FEFF:FFFF
2442	 */
2443	if (ntohl(addr->s6_addr32[2]) == 0x02005eff &&
2444	    (ntohl(addr->s6_addr32[3]) & 0Xff000000) == 0xfe000000)
2445		goto regen;
2446
2447	/* Reserved subnet anycast addresses */
2448	if (ntohl(addr->s6_addr32[2]) == 0xfdffffff &&
2449	    ntohl(addr->s6_addr32[3]) >= 0Xffffff80)
2450		goto regen;
2451}
2452
2453/*
2454 *	Add prefix route.
2455 */
2456
2457static void
2458addrconf_prefix_route(struct in6_addr *pfx, int plen, u32 metric,
2459		      struct net_device *dev, unsigned long expires,
2460		      u32 flags, gfp_t gfp_flags)
2461{
2462	struct fib6_config cfg = {
2463		.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX,
2464		.fc_metric = metric ? : IP6_RT_PRIO_ADDRCONF,
2465		.fc_ifindex = dev->ifindex,
2466		.fc_expires = expires,
2467		.fc_dst_len = plen,
2468		.fc_flags = RTF_UP | flags,
2469		.fc_nlinfo.nl_net = dev_net(dev),
2470		.fc_protocol = RTPROT_KERNEL,
2471		.fc_type = RTN_UNICAST,
2472	};
2473
2474	cfg.fc_dst = *pfx;
2475
2476	/* Prevent useless cloning on PtP SIT.
2477	   This thing is done here expecting that the whole
2478	   class of non-broadcast devices need not cloning.
2479	 */
2480#if IS_ENABLED(CONFIG_IPV6_SIT)
2481	if (dev->type == ARPHRD_SIT && (dev->flags & IFF_POINTOPOINT))
2482		cfg.fc_flags |= RTF_NONEXTHOP;
2483#endif
2484
2485	ip6_route_add(&cfg, gfp_flags, NULL);
2486}
2487
2488
2489static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
2490						  int plen,
2491						  const struct net_device *dev,
2492						  u32 flags, u32 noflags,
2493						  bool no_gw)
2494{
2495	struct fib6_node *fn;
2496	struct fib6_info *rt = NULL;
2497	struct fib6_table *table;
2498	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX;
2499
2500	table = fib6_get_table(dev_net(dev), tb_id);
2501	if (!table)
2502		return NULL;
2503
2504	rcu_read_lock();
2505	fn = fib6_locate(&table->tb6_root, pfx, plen, NULL, 0, true);
2506	if (!fn)
2507		goto out;
2508
2509	for_each_fib6_node_rt_rcu(fn) {
2510		/* prefix routes only use builtin fib6_nh */
2511		if (rt->nh)
2512			continue;
2513
2514		if (rt->fib6_nh->fib_nh_dev->ifindex != dev->ifindex)
2515			continue;
2516		if (no_gw && rt->fib6_nh->fib_nh_gw_family)
2517			continue;
2518		if ((rt->fib6_flags & flags) != flags)
2519			continue;
2520		if ((rt->fib6_flags & noflags) != 0)
2521			continue;
2522		if (!fib6_info_hold_safe(rt))
2523			continue;
2524		break;
2525	}
2526out:
2527	rcu_read_unlock();
2528	return rt;
2529}
2530
2531
2532/* Create "default" multicast route to the interface */
2533
2534static void addrconf_add_mroute(struct net_device *dev)
2535{
2536	struct fib6_config cfg = {
2537		.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_LOCAL,
2538		.fc_metric = IP6_RT_PRIO_ADDRCONF,
2539		.fc_ifindex = dev->ifindex,
2540		.fc_dst_len = 8,
2541		.fc_flags = RTF_UP,
2542		.fc_type = RTN_MULTICAST,
2543		.fc_nlinfo.nl_net = dev_net(dev),
2544		.fc_protocol = RTPROT_KERNEL,
2545	};
2546
2547	ipv6_addr_set(&cfg.fc_dst, htonl(0xFF000000), 0, 0, 0);
2548
2549	ip6_route_add(&cfg, GFP_KERNEL, NULL);
2550}
2551
2552static struct inet6_dev *addrconf_add_dev(struct net_device *dev)
2553{
2554	struct inet6_dev *idev;
2555
2556	ASSERT_RTNL();
2557
2558	idev = ipv6_find_idev(dev);
2559	if (IS_ERR(idev))
2560		return idev;
2561
2562	if (idev->cnf.disable_ipv6)
2563		return ERR_PTR(-EACCES);
2564
2565	/* Add default multicast route */
2566	if (!(dev->flags & IFF_LOOPBACK) && !netif_is_l3_master(dev))
2567		addrconf_add_mroute(dev);
2568
2569	return idev;
2570}
2571
2572static void manage_tempaddrs(struct inet6_dev *idev,
2573			     struct inet6_ifaddr *ifp,
2574			     __u32 valid_lft, __u32 prefered_lft,
2575			     bool create, unsigned long now)
2576{
2577	u32 flags;
2578	struct inet6_ifaddr *ift;
2579
2580	read_lock_bh(&idev->lock);
2581	/* update all temporary addresses in the list */
2582	list_for_each_entry(ift, &idev->tempaddr_list, tmp_list) {
2583		int age, max_valid, max_prefered;
2584
2585		if (ifp != ift->ifpub)
2586			continue;
2587
2588		/* RFC 4941 section 3.3:
2589		 * If a received option will extend the lifetime of a public
2590		 * address, the lifetimes of temporary addresses should
2591		 * be extended, subject to the overall constraint that no
2592		 * temporary addresses should ever remain "valid" or "preferred"
2593		 * for a time longer than (TEMP_VALID_LIFETIME) or
2594		 * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR), respectively.
2595		 */
2596		age = (now - ift->cstamp) / HZ;
2597		max_valid = READ_ONCE(idev->cnf.temp_valid_lft) - age;
2598		if (max_valid < 0)
2599			max_valid = 0;
2600
2601		max_prefered = READ_ONCE(idev->cnf.temp_prefered_lft) -
2602			       idev->desync_factor - age;
2603		if (max_prefered < 0)
2604			max_prefered = 0;
2605
2606		if (valid_lft > max_valid)
2607			valid_lft = max_valid;
2608
2609		if (prefered_lft > max_prefered)
2610			prefered_lft = max_prefered;
2611
2612		spin_lock(&ift->lock);
2613		flags = ift->flags;
2614		ift->valid_lft = valid_lft;
2615		ift->prefered_lft = prefered_lft;
2616		ift->tstamp = now;
2617		if (prefered_lft > 0)
2618			ift->flags &= ~IFA_F_DEPRECATED;
2619
2620		spin_unlock(&ift->lock);
2621		if (!(flags&IFA_F_TENTATIVE))
2622			ipv6_ifa_notify(0, ift);
2623	}
2624
2625	/* Also create a temporary address if it's enabled but no temporary
2626	 * address currently exists.
2627	 * However, we get called with valid_lft == 0, prefered_lft == 0, create == false
2628	 * as part of cleanup (ie. deleting the mngtmpaddr).
2629	 * We don't want that to result in creating a new temporary ip address.
2630	 */
2631	if (list_empty(&idev->tempaddr_list) && (valid_lft || prefered_lft))
2632		create = true;
2633
2634	if (create && READ_ONCE(idev->cnf.use_tempaddr) > 0) {
2635		/* When a new public address is created as described
2636		 * in [ADDRCONF], also create a new temporary address.
2637		 */
2638		read_unlock_bh(&idev->lock);
2639		ipv6_create_tempaddr(ifp, false);
2640	} else {
2641		read_unlock_bh(&idev->lock);
2642	}
2643}
2644
2645static bool is_addr_mode_generate_stable(struct inet6_dev *idev)
2646{
2647	return idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_STABLE_PRIVACY ||
2648	       idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_RANDOM;
2649}
2650
2651int addrconf_prefix_rcv_add_addr(struct net *net, struct net_device *dev,
2652				 const struct prefix_info *pinfo,
2653				 struct inet6_dev *in6_dev,
2654				 const struct in6_addr *addr, int addr_type,
2655				 u32 addr_flags, bool sllao, bool tokenized,
2656				 __u32 valid_lft, u32 prefered_lft)
2657{
2658	struct inet6_ifaddr *ifp = ipv6_get_ifaddr(net, addr, dev, 1);
2659	int create = 0, update_lft = 0;
2660
2661	if (!ifp && valid_lft) {
2662		int max_addresses = READ_ONCE(in6_dev->cnf.max_addresses);
2663		struct ifa6_config cfg = {
2664			.pfx = addr,
2665			.plen = pinfo->prefix_len,
2666			.ifa_flags = addr_flags,
2667			.valid_lft = valid_lft,
2668			.preferred_lft = prefered_lft,
2669			.scope = addr_type & IPV6_ADDR_SCOPE_MASK,
2670			.ifa_proto = IFAPROT_KERNEL_RA
2671		};
2672
2673#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
2674		if ((READ_ONCE(net->ipv6.devconf_all->optimistic_dad) ||
2675		     READ_ONCE(in6_dev->cnf.optimistic_dad)) &&
2676		    !net->ipv6.devconf_all->forwarding && sllao)
2677			cfg.ifa_flags |= IFA_F_OPTIMISTIC;
2678#endif
2679
2680		/* Do not allow to create too much of autoconfigured
2681		 * addresses; this would be too easy way to crash kernel.
2682		 */
2683		if (!max_addresses ||
2684		    ipv6_count_addresses(in6_dev) < max_addresses)
2685			ifp = ipv6_add_addr(in6_dev, &cfg, false, NULL);
2686
2687		if (IS_ERR_OR_NULL(ifp))
2688			return -1;
2689
2690		create = 1;
2691		spin_lock_bh(&ifp->lock);
2692		ifp->flags |= IFA_F_MANAGETEMPADDR;
2693		ifp->cstamp = jiffies;
2694		ifp->tokenized = tokenized;
2695		spin_unlock_bh(&ifp->lock);
2696		addrconf_dad_start(ifp);
2697	}
2698
2699	if (ifp) {
2700		u32 flags;
2701		unsigned long now;
2702		u32 stored_lft;
2703
2704		/* update lifetime (RFC2462 5.5.3 e) */
2705		spin_lock_bh(&ifp->lock);
2706		now = jiffies;
2707		if (ifp->valid_lft > (now - ifp->tstamp) / HZ)
2708			stored_lft = ifp->valid_lft - (now - ifp->tstamp) / HZ;
2709		else
2710			stored_lft = 0;
2711
2712		/* RFC4862 Section 5.5.3e:
2713		 * "Note that the preferred lifetime of the
2714		 *  corresponding address is always reset to
2715		 *  the Preferred Lifetime in the received
2716		 *  Prefix Information option, regardless of
2717		 *  whether the valid lifetime is also reset or
2718		 *  ignored."
2719		 *
2720		 * So we should always update prefered_lft here.
2721		 */
2722		update_lft = !create && stored_lft;
2723
2724		if (update_lft && !READ_ONCE(in6_dev->cnf.ra_honor_pio_life)) {
2725			const u32 minimum_lft = min_t(u32,
2726				stored_lft, MIN_VALID_LIFETIME);
2727			valid_lft = max(valid_lft, minimum_lft);
2728		}
2729
2730		if (update_lft) {
2731			ifp->valid_lft = valid_lft;
2732			ifp->prefered_lft = prefered_lft;
2733			WRITE_ONCE(ifp->tstamp, now);
2734			flags = ifp->flags;
2735			ifp->flags &= ~IFA_F_DEPRECATED;
2736			spin_unlock_bh(&ifp->lock);
2737
2738			if (!(flags&IFA_F_TENTATIVE))
2739				ipv6_ifa_notify(0, ifp);
2740		} else
2741			spin_unlock_bh(&ifp->lock);
2742
2743		manage_tempaddrs(in6_dev, ifp, valid_lft, prefered_lft,
2744				 create, now);
2745
2746		in6_ifa_put(ifp);
2747		addrconf_verify(net);
2748	}
2749
2750	return 0;
2751}
2752EXPORT_SYMBOL_GPL(addrconf_prefix_rcv_add_addr);
2753
2754void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
2755{
2756	struct prefix_info *pinfo;
2757	struct fib6_table *table;
2758	__u32 valid_lft;
2759	__u32 prefered_lft;
2760	int addr_type, err;
2761	u32 addr_flags = 0;
2762	struct inet6_dev *in6_dev;
2763	struct net *net = dev_net(dev);
2764
2765	pinfo = (struct prefix_info *) opt;
2766
2767	if (len < sizeof(struct prefix_info)) {
2768		netdev_dbg(dev, "addrconf: prefix option too short\n");
2769		return;
2770	}
2771
2772	/*
2773	 *	Validation checks ([ADDRCONF], page 19)
2774	 */
2775
2776	addr_type = ipv6_addr_type(&pinfo->prefix);
2777
2778	if (addr_type & (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL))
2779		return;
2780
2781	valid_lft = ntohl(pinfo->valid);
2782	prefered_lft = ntohl(pinfo->prefered);
2783
2784	if (prefered_lft > valid_lft) {
2785		net_warn_ratelimited("addrconf: prefix option has invalid lifetime\n");
2786		return;
2787	}
2788
2789	in6_dev = in6_dev_get(dev);
2790
2791	if (!in6_dev) {
2792		net_dbg_ratelimited("addrconf: device %s not configured\n",
2793				    dev->name);
2794		return;
2795	}
2796
2797	if (valid_lft != 0 && valid_lft < in6_dev->cnf.accept_ra_min_lft)
2798		goto put;
2799
2800	/*
2801	 *	Two things going on here:
2802	 *	1) Add routes for on-link prefixes
2803	 *	2) Configure prefixes with the auto flag set
2804	 */
2805
2806	if (pinfo->onlink) {
2807		struct fib6_info *rt;
2808		unsigned long rt_expires;
2809
2810		/* Avoid arithmetic overflow. Really, we could
2811		 * save rt_expires in seconds, likely valid_lft,
2812		 * but it would require division in fib gc, that it
2813		 * not good.
2814		 */
2815		if (HZ > USER_HZ)
2816			rt_expires = addrconf_timeout_fixup(valid_lft, HZ);
2817		else
2818			rt_expires = addrconf_timeout_fixup(valid_lft, USER_HZ);
2819
2820		if (addrconf_finite_timeout(rt_expires))
2821			rt_expires *= HZ;
2822
2823		rt = addrconf_get_prefix_route(&pinfo->prefix,
2824					       pinfo->prefix_len,
2825					       dev,
2826					       RTF_ADDRCONF | RTF_PREFIX_RT,
2827					       RTF_DEFAULT, true);
2828
2829		if (rt) {
2830			/* Autoconf prefix route */
2831			if (valid_lft == 0) {
2832				ip6_del_rt(net, rt, false);
2833				rt = NULL;
2834			} else {
2835				table = rt->fib6_table;
2836				spin_lock_bh(&table->tb6_lock);
2837
2838				if (addrconf_finite_timeout(rt_expires)) {
2839					/* not infinity */
2840					fib6_set_expires(rt, jiffies + rt_expires);
2841					fib6_add_gc_list(rt);
2842				} else {
2843					fib6_clean_expires(rt);
2844					fib6_remove_gc_list(rt);
2845				}
2846
2847				spin_unlock_bh(&table->tb6_lock);
2848			}
2849		} else if (valid_lft) {
2850			clock_t expires = 0;
2851			int flags = RTF_ADDRCONF | RTF_PREFIX_RT;
2852			if (addrconf_finite_timeout(rt_expires)) {
2853				/* not infinity */
2854				flags |= RTF_EXPIRES;
2855				expires = jiffies_to_clock_t(rt_expires);
2856			}
2857			addrconf_prefix_route(&pinfo->prefix, pinfo->prefix_len,
2858					      0, dev, expires, flags,
2859					      GFP_ATOMIC);
2860		}
2861		fib6_info_release(rt);
2862	}
2863
2864	/* Try to figure out our local address for this prefix */
2865
2866	if (pinfo->autoconf && in6_dev->cnf.autoconf) {
2867		struct in6_addr addr;
2868		bool tokenized = false, dev_addr_generated = false;
2869
2870		if (pinfo->prefix_len == 64) {
2871			memcpy(&addr, &pinfo->prefix, 8);
2872
2873			if (!ipv6_addr_any(&in6_dev->token)) {
2874				read_lock_bh(&in6_dev->lock);
2875				memcpy(addr.s6_addr + 8,
2876				       in6_dev->token.s6_addr + 8, 8);
2877				read_unlock_bh(&in6_dev->lock);
2878				tokenized = true;
2879			} else if (is_addr_mode_generate_stable(in6_dev) &&
2880				   !ipv6_generate_stable_address(&addr, 0,
2881								 in6_dev)) {
2882				addr_flags |= IFA_F_STABLE_PRIVACY;
2883				goto ok;
2884			} else if (ipv6_generate_eui64(addr.s6_addr + 8, dev) &&
2885				   ipv6_inherit_eui64(addr.s6_addr + 8, in6_dev)) {
2886				goto put;
2887			} else {
2888				dev_addr_generated = true;
2889			}
2890			goto ok;
2891		}
2892		net_dbg_ratelimited("IPv6 addrconf: prefix with wrong length %d\n",
2893				    pinfo->prefix_len);
2894		goto put;
2895
2896ok:
2897		err = addrconf_prefix_rcv_add_addr(net, dev, pinfo, in6_dev,
2898						   &addr, addr_type,
2899						   addr_flags, sllao,
2900						   tokenized, valid_lft,
2901						   prefered_lft);
2902		if (err)
2903			goto put;
2904
2905		/* Ignore error case here because previous prefix add addr was
2906		 * successful which will be notified.
2907		 */
2908		ndisc_ops_prefix_rcv_add_addr(net, dev, pinfo, in6_dev, &addr,
2909					      addr_type, addr_flags, sllao,
2910					      tokenized, valid_lft,
2911					      prefered_lft,
2912					      dev_addr_generated);
2913	}
2914	inet6_prefix_notify(RTM_NEWPREFIX, in6_dev, pinfo);
2915put:
2916	in6_dev_put(in6_dev);
2917}
2918
2919static int addrconf_set_sit_dstaddr(struct net *net, struct net_device *dev,
2920		struct in6_ifreq *ireq)
2921{
2922	struct ip_tunnel_parm_kern p = { };
2923	int err;
2924
2925	if (!(ipv6_addr_type(&ireq->ifr6_addr) & IPV6_ADDR_COMPATv4))
2926		return -EADDRNOTAVAIL;
2927
2928	p.iph.daddr = ireq->ifr6_addr.s6_addr32[3];
2929	p.iph.version = 4;
2930	p.iph.ihl = 5;
2931	p.iph.protocol = IPPROTO_IPV6;
2932	p.iph.ttl = 64;
2933
2934	if (!dev->netdev_ops->ndo_tunnel_ctl)
2935		return -EOPNOTSUPP;
2936	err = dev->netdev_ops->ndo_tunnel_ctl(dev, &p, SIOCADDTUNNEL);
2937	if (err)
2938		return err;
2939
2940	dev = __dev_get_by_name(net, p.name);
2941	if (!dev)
2942		return -ENOBUFS;
2943	return dev_open(dev, NULL);
2944}
2945
2946/*
2947 *	Set destination address.
2948 *	Special case for SIT interfaces where we create a new "virtual"
2949 *	device.
2950 */
2951int addrconf_set_dstaddr(struct net *net, void __user *arg)
2952{
2953	struct net_device *dev;
2954	struct in6_ifreq ireq;
2955	int err = -ENODEV;
2956
2957	if (!IS_ENABLED(CONFIG_IPV6_SIT))
2958		return -ENODEV;
2959	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
2960		return -EFAULT;
2961
2962	rtnl_lock();
2963	dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
2964	if (dev && dev->type == ARPHRD_SIT)
2965		err = addrconf_set_sit_dstaddr(net, dev, &ireq);
2966	rtnl_unlock();
2967	return err;
2968}
2969
2970static int ipv6_mc_config(struct sock *sk, bool join,
2971			  const struct in6_addr *addr, int ifindex)
2972{
2973	int ret;
2974
2975	ASSERT_RTNL();
2976
2977	lock_sock(sk);
2978	if (join)
2979		ret = ipv6_sock_mc_join(sk, ifindex, addr);
2980	else
2981		ret = ipv6_sock_mc_drop(sk, ifindex, addr);
2982	release_sock(sk);
2983
2984	return ret;
2985}
2986
2987/*
2988 *	Manual configuration of address on an interface
2989 */
2990static int inet6_addr_add(struct net *net, int ifindex,
2991			  struct ifa6_config *cfg,
2992			  struct netlink_ext_ack *extack)
2993{
2994	struct inet6_ifaddr *ifp;
2995	struct inet6_dev *idev;
2996	struct net_device *dev;
2997	unsigned long timeout;
2998	clock_t expires;
2999	u32 flags;
3000
3001	ASSERT_RTNL();
3002
3003	if (cfg->plen > 128) {
3004		NL_SET_ERR_MSG_MOD(extack, "Invalid prefix length");
3005		return -EINVAL;
3006	}
3007
3008	/* check the lifetime */
3009	if (!cfg->valid_lft || cfg->preferred_lft > cfg->valid_lft) {
3010		NL_SET_ERR_MSG_MOD(extack, "address lifetime invalid");
3011		return -EINVAL;
3012	}
3013
3014	if (cfg->ifa_flags & IFA_F_MANAGETEMPADDR && cfg->plen != 64) {
3015		NL_SET_ERR_MSG_MOD(extack, "address with \"mngtmpaddr\" flag must have a prefix length of 64");
3016		return -EINVAL;
3017	}
3018
3019	dev = __dev_get_by_index(net, ifindex);
3020	if (!dev)
3021		return -ENODEV;
3022
3023	idev = addrconf_add_dev(dev);
3024	if (IS_ERR(idev)) {
3025		NL_SET_ERR_MSG_MOD(extack, "IPv6 is disabled on this device");
3026		return PTR_ERR(idev);
3027	}
3028
3029	if (cfg->ifa_flags & IFA_F_MCAUTOJOIN) {
3030		int ret = ipv6_mc_config(net->ipv6.mc_autojoin_sk,
3031					 true, cfg->pfx, ifindex);
3032
3033		if (ret < 0) {
3034			NL_SET_ERR_MSG_MOD(extack, "Multicast auto join failed");
3035			return ret;
3036		}
3037	}
3038
3039	cfg->scope = ipv6_addr_scope(cfg->pfx);
3040
3041	timeout = addrconf_timeout_fixup(cfg->valid_lft, HZ);
3042	if (addrconf_finite_timeout(timeout)) {
3043		expires = jiffies_to_clock_t(timeout * HZ);
3044		cfg->valid_lft = timeout;
3045		flags = RTF_EXPIRES;
3046	} else {
3047		expires = 0;
3048		flags = 0;
3049		cfg->ifa_flags |= IFA_F_PERMANENT;
3050	}
3051
3052	timeout = addrconf_timeout_fixup(cfg->preferred_lft, HZ);
3053	if (addrconf_finite_timeout(timeout)) {
3054		if (timeout == 0)
3055			cfg->ifa_flags |= IFA_F_DEPRECATED;
3056		cfg->preferred_lft = timeout;
3057	}
3058
3059	ifp = ipv6_add_addr(idev, cfg, true, extack);
3060	if (!IS_ERR(ifp)) {
3061		if (!(cfg->ifa_flags & IFA_F_NOPREFIXROUTE)) {
3062			addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
3063					      ifp->rt_priority, dev, expires,
3064					      flags, GFP_KERNEL);
3065		}
3066
3067		/* Send a netlink notification if DAD is enabled and
3068		 * optimistic flag is not set
3069		 */
3070		if (!(ifp->flags & (IFA_F_OPTIMISTIC | IFA_F_NODAD)))
3071			ipv6_ifa_notify(0, ifp);
3072		/*
3073		 * Note that section 3.1 of RFC 4429 indicates
3074		 * that the Optimistic flag should not be set for
3075		 * manually configured addresses
3076		 */
3077		addrconf_dad_start(ifp);
3078		if (cfg->ifa_flags & IFA_F_MANAGETEMPADDR)
3079			manage_tempaddrs(idev, ifp, cfg->valid_lft,
3080					 cfg->preferred_lft, true, jiffies);
3081		in6_ifa_put(ifp);
3082		addrconf_verify_rtnl(net);
3083		return 0;
3084	} else if (cfg->ifa_flags & IFA_F_MCAUTOJOIN) {
3085		ipv6_mc_config(net->ipv6.mc_autojoin_sk, false,
3086			       cfg->pfx, ifindex);
3087	}
3088
3089	return PTR_ERR(ifp);
3090}
3091
3092static int inet6_addr_del(struct net *net, int ifindex, u32 ifa_flags,
3093			  const struct in6_addr *pfx, unsigned int plen,
3094			  struct netlink_ext_ack *extack)
3095{
3096	struct inet6_ifaddr *ifp;
3097	struct inet6_dev *idev;
3098	struct net_device *dev;
3099
3100	if (plen > 128) {
3101		NL_SET_ERR_MSG_MOD(extack, "Invalid prefix length");
3102		return -EINVAL;
3103	}
3104
3105	dev = __dev_get_by_index(net, ifindex);
3106	if (!dev) {
3107		NL_SET_ERR_MSG_MOD(extack, "Unable to find the interface");
3108		return -ENODEV;
3109	}
3110
3111	idev = __in6_dev_get(dev);
3112	if (!idev) {
3113		NL_SET_ERR_MSG_MOD(extack, "IPv6 is disabled on this device");
3114		return -ENXIO;
3115	}
3116
3117	read_lock_bh(&idev->lock);
3118	list_for_each_entry(ifp, &idev->addr_list, if_list) {
3119		if (ifp->prefix_len == plen &&
3120		    ipv6_addr_equal(pfx, &ifp->addr)) {
3121			in6_ifa_hold(ifp);
3122			read_unlock_bh(&idev->lock);
3123
3124			if (!(ifp->flags & IFA_F_TEMPORARY) &&
3125			    (ifa_flags & IFA_F_MANAGETEMPADDR))
3126				manage_tempaddrs(idev, ifp, 0, 0, false,
3127						 jiffies);
3128			ipv6_del_addr(ifp);
3129			addrconf_verify_rtnl(net);
3130			if (ipv6_addr_is_multicast(pfx)) {
3131				ipv6_mc_config(net->ipv6.mc_autojoin_sk,
3132					       false, pfx, dev->ifindex);
3133			}
3134			return 0;
3135		}
3136	}
3137	read_unlock_bh(&idev->lock);
3138
3139	NL_SET_ERR_MSG_MOD(extack, "address not found");
3140	return -EADDRNOTAVAIL;
3141}
3142
3143
3144int addrconf_add_ifaddr(struct net *net, void __user *arg)
3145{
3146	struct ifa6_config cfg = {
3147		.ifa_flags = IFA_F_PERMANENT,
3148		.preferred_lft = INFINITY_LIFE_TIME,
3149		.valid_lft = INFINITY_LIFE_TIME,
3150	};
3151	struct in6_ifreq ireq;
3152	int err;
3153
3154	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
3155		return -EPERM;
3156
3157	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
3158		return -EFAULT;
3159
3160	cfg.pfx = &ireq.ifr6_addr;
3161	cfg.plen = ireq.ifr6_prefixlen;
3162
3163	rtnl_lock();
3164	err = inet6_addr_add(net, ireq.ifr6_ifindex, &cfg, NULL);
3165	rtnl_unlock();
3166	return err;
3167}
3168
3169int addrconf_del_ifaddr(struct net *net, void __user *arg)
3170{
3171	struct in6_ifreq ireq;
3172	int err;
3173
3174	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
3175		return -EPERM;
3176
3177	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
3178		return -EFAULT;
3179
3180	rtnl_lock();
3181	err = inet6_addr_del(net, ireq.ifr6_ifindex, 0, &ireq.ifr6_addr,
3182			     ireq.ifr6_prefixlen, NULL);
3183	rtnl_unlock();
3184	return err;
3185}
3186
3187static void add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
3188		     int plen, int scope, u8 proto)
3189{
3190	struct inet6_ifaddr *ifp;
3191	struct ifa6_config cfg = {
3192		.pfx = addr,
3193		.plen = plen,
3194		.ifa_flags = IFA_F_PERMANENT,
3195		.valid_lft = INFINITY_LIFE_TIME,
3196		.preferred_lft = INFINITY_LIFE_TIME,
3197		.scope = scope,
3198		.ifa_proto = proto
3199	};
3200
3201	ifp = ipv6_add_addr(idev, &cfg, true, NULL);
3202	if (!IS_ERR(ifp)) {
3203		spin_lock_bh(&ifp->lock);
3204		ifp->flags &= ~IFA_F_TENTATIVE;
3205		spin_unlock_bh(&ifp->lock);
3206		rt_genid_bump_ipv6(dev_net(idev->dev));
3207		ipv6_ifa_notify(RTM_NEWADDR, ifp);
3208		in6_ifa_put(ifp);
3209	}
3210}
3211
3212#if IS_ENABLED(CONFIG_IPV6_SIT) || IS_ENABLED(CONFIG_NET_IPGRE) || IS_ENABLED(CONFIG_IPV6_GRE)
3213static void add_v4_addrs(struct inet6_dev *idev)
3214{
3215	struct in6_addr addr;
3216	struct net_device *dev;
3217	struct net *net = dev_net(idev->dev);
3218	int scope, plen, offset = 0;
3219	u32 pflags = 0;
3220
3221	ASSERT_RTNL();
3222
3223	memset(&addr, 0, sizeof(struct in6_addr));
3224	/* in case of IP6GRE the dev_addr is an IPv6 and therefore we use only the last 4 bytes */
3225	if (idev->dev->addr_len == sizeof(struct in6_addr))
3226		offset = sizeof(struct in6_addr) - 4;
3227	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);
3228
3229	if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) {
3230		scope = IPV6_ADDR_COMPATv4;
3231		plen = 96;
3232		pflags |= RTF_NONEXTHOP;
3233	} else {
3234		if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
3235			return;
3236
3237		addr.s6_addr32[0] = htonl(0xfe800000);
3238		scope = IFA_LINK;
3239		plen = 64;
3240	}
3241
3242	if (addr.s6_addr32[3]) {
3243		add_addr(idev, &addr, plen, scope, IFAPROT_UNSPEC);
3244		addrconf_prefix_route(&addr, plen, 0, idev->dev, 0, pflags,
3245				      GFP_KERNEL);
3246		return;
3247	}
3248
3249	for_each_netdev(net, dev) {
3250		struct in_device *in_dev = __in_dev_get_rtnl(dev);
3251		if (in_dev && (dev->flags & IFF_UP)) {
3252			struct in_ifaddr *ifa;
3253			int flag = scope;
3254
3255			in_dev_for_each_ifa_rtnl(ifa, in_dev) {
3256				addr.s6_addr32[3] = ifa->ifa_local;
3257
3258				if (ifa->ifa_scope == RT_SCOPE_LINK)
3259					continue;
3260				if (ifa->ifa_scope >= RT_SCOPE_HOST) {
3261					if (idev->dev->flags&IFF_POINTOPOINT)
3262						continue;
3263					flag |= IFA_HOST;
3264				}
3265
3266				add_addr(idev, &addr, plen, flag,
3267					 IFAPROT_UNSPEC);
3268				addrconf_prefix_route(&addr, plen, 0, idev->dev,
3269						      0, pflags, GFP_KERNEL);
3270			}
3271		}
3272	}
3273}
3274#endif
3275
3276static void init_loopback(struct net_device *dev)
3277{
3278	struct inet6_dev  *idev;
3279
3280	/* ::1 */
3281
3282	ASSERT_RTNL();
3283
3284	idev = ipv6_find_idev(dev);
3285	if (IS_ERR(idev)) {
3286		pr_debug("%s: add_dev failed\n", __func__);
3287		return;
3288	}
3289
3290	add_addr(idev, &in6addr_loopback, 128, IFA_HOST, IFAPROT_KERNEL_LO);
3291}
3292
3293void addrconf_add_linklocal(struct inet6_dev *idev,
3294			    const struct in6_addr *addr, u32 flags)
3295{
3296	struct ifa6_config cfg = {
3297		.pfx = addr,
3298		.plen = 64,
3299		.ifa_flags = flags | IFA_F_PERMANENT,
3300		.valid_lft = INFINITY_LIFE_TIME,
3301		.preferred_lft = INFINITY_LIFE_TIME,
3302		.scope = IFA_LINK,
3303		.ifa_proto = IFAPROT_KERNEL_LL
3304	};
3305	struct inet6_ifaddr *ifp;
3306
3307#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
3308	if ((READ_ONCE(dev_net(idev->dev)->ipv6.devconf_all->optimistic_dad) ||
3309	     READ_ONCE(idev->cnf.optimistic_dad)) &&
3310	    !dev_net(idev->dev)->ipv6.devconf_all->forwarding)
3311		cfg.ifa_flags |= IFA_F_OPTIMISTIC;
3312#endif
3313
3314	ifp = ipv6_add_addr(idev, &cfg, true, NULL);
3315	if (!IS_ERR(ifp)) {
3316		addrconf_prefix_route(&ifp->addr, ifp->prefix_len, 0, idev->dev,
3317				      0, 0, GFP_ATOMIC);
3318		addrconf_dad_start(ifp);
3319		in6_ifa_put(ifp);
3320	}
3321}
3322EXPORT_SYMBOL_GPL(addrconf_add_linklocal);
3323
3324static bool ipv6_reserved_interfaceid(struct in6_addr address)
3325{
3326	if ((address.s6_addr32[2] | address.s6_addr32[3]) == 0)
3327		return true;
3328
3329	if (address.s6_addr32[2] == htonl(0x02005eff) &&
3330	    ((address.s6_addr32[3] & htonl(0xfe000000)) == htonl(0xfe000000)))
3331		return true;
3332
3333	if (address.s6_addr32[2] == htonl(0xfdffffff) &&
3334	    ((address.s6_addr32[3] & htonl(0xffffff80)) == htonl(0xffffff80)))
3335		return true;
3336
3337	return false;
3338}
3339
3340static int ipv6_generate_stable_address(struct in6_addr *address,
3341					u8 dad_count,
3342					const struct inet6_dev *idev)
3343{
3344	static DEFINE_SPINLOCK(lock);
3345	static __u32 digest[SHA1_DIGEST_WORDS];
3346	static __u32 workspace[SHA1_WORKSPACE_WORDS];
3347
3348	static union {
3349		char __data[SHA1_BLOCK_SIZE];
3350		struct {
3351			struct in6_addr secret;
3352			__be32 prefix[2];
3353			unsigned char hwaddr[MAX_ADDR_LEN];
3354			u8 dad_count;
3355		} __packed;
3356	} data;
3357
3358	struct in6_addr secret;
3359	struct in6_addr temp;
3360	struct net *net = dev_net(idev->dev);
3361
3362	BUILD_BUG_ON(sizeof(data.__data) != sizeof(data));
3363
3364	if (idev->cnf.stable_secret.initialized)
3365		secret = idev->cnf.stable_secret.secret;
3366	else if (net->ipv6.devconf_dflt->stable_secret.initialized)
3367		secret = net->ipv6.devconf_dflt->stable_secret.secret;
3368	else
3369		return -1;
3370
3371retry:
3372	spin_lock_bh(&lock);
3373
3374	sha1_init(digest);
3375	memset(&data, 0, sizeof(data));
3376	memset(workspace, 0, sizeof(workspace));
3377	memcpy(data.hwaddr, idev->dev->perm_addr, idev->dev->addr_len);
3378	data.prefix[0] = address->s6_addr32[0];
3379	data.prefix[1] = address->s6_addr32[1];
3380	data.secret = secret;
3381	data.dad_count = dad_count;
3382
3383	sha1_transform(digest, data.__data, workspace);
3384
3385	temp = *address;
3386	temp.s6_addr32[2] = (__force __be32)digest[0];
3387	temp.s6_addr32[3] = (__force __be32)digest[1];
3388
3389	spin_unlock_bh(&lock);
3390
3391	if (ipv6_reserved_interfaceid(temp)) {
3392		dad_count++;
3393		if (dad_count > dev_net(idev->dev)->ipv6.sysctl.idgen_retries)
3394			return -1;
3395		goto retry;
3396	}
3397
3398	*address = temp;
3399	return 0;
3400}
3401
3402static void ipv6_gen_mode_random_init(struct inet6_dev *idev)
3403{
3404	struct ipv6_stable_secret *s = &idev->cnf.stable_secret;
3405
3406	if (s->initialized)
3407		return;
3408	s = &idev->cnf.stable_secret;
3409	get_random_bytes(&s->secret, sizeof(s->secret));
3410	s->initialized = true;
3411}
3412
3413static void addrconf_addr_gen(struct inet6_dev *idev, bool prefix_route)
3414{
3415	struct in6_addr addr;
3416
3417	/* no link local addresses on L3 master devices */
3418	if (netif_is_l3_master(idev->dev))
3419		return;
3420
3421	/* no link local addresses on devices flagged as slaves */
3422	if (idev->dev->priv_flags & IFF_NO_ADDRCONF)
3423		return;
3424
3425	ipv6_addr_set(&addr, htonl(0xFE800000), 0, 0, 0);
3426
3427	switch (idev->cnf.addr_gen_mode) {
3428	case IN6_ADDR_GEN_MODE_RANDOM:
3429		ipv6_gen_mode_random_init(idev);
3430		fallthrough;
3431	case IN6_ADDR_GEN_MODE_STABLE_PRIVACY:
3432		if (!ipv6_generate_stable_address(&addr, 0, idev))
3433			addrconf_add_linklocal(idev, &addr,
3434					       IFA_F_STABLE_PRIVACY);
3435		else if (prefix_route)
3436			addrconf_prefix_route(&addr, 64, 0, idev->dev,
3437					      0, 0, GFP_KERNEL);
3438		break;
3439	case IN6_ADDR_GEN_MODE_EUI64:
3440		/* addrconf_add_linklocal also adds a prefix_route and we
3441		 * only need to care about prefix routes if ipv6_generate_eui64
3442		 * couldn't generate one.
3443		 */
3444		if (ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) == 0)
3445			addrconf_add_linklocal(idev, &addr, 0);
3446		else if (prefix_route)
3447			addrconf_prefix_route(&addr, 64, 0, idev->dev,
3448					      0, 0, GFP_KERNEL);
3449		break;
3450	case IN6_ADDR_GEN_MODE_NONE:
3451	default:
3452		/* will not add any link local address */
3453		break;
3454	}
3455}
3456
3457static void addrconf_dev_config(struct net_device *dev)
3458{
3459	struct inet6_dev *idev;
3460
3461	ASSERT_RTNL();
3462
3463	if ((dev->type != ARPHRD_ETHER) &&
3464	    (dev->type != ARPHRD_FDDI) &&
3465	    (dev->type != ARPHRD_ARCNET) &&
3466	    (dev->type != ARPHRD_INFINIBAND) &&
3467	    (dev->type != ARPHRD_IEEE1394) &&
3468	    (dev->type != ARPHRD_TUNNEL6) &&
3469	    (dev->type != ARPHRD_6LOWPAN) &&
3470	    (dev->type != ARPHRD_TUNNEL) &&
3471	    (dev->type != ARPHRD_NONE) &&
3472	    (dev->type != ARPHRD_RAWIP)) {
3473		/* Alas, we support only Ethernet autoconfiguration. */
3474		idev = __in6_dev_get(dev);
3475		if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
3476		    dev->flags & IFF_MULTICAST)
3477			ipv6_mc_up(idev);
3478		return;
3479	}
3480
3481	idev = addrconf_add_dev(dev);
3482	if (IS_ERR(idev))
3483		return;
3484
3485	/* this device type has no EUI support */
3486	if (dev->type == ARPHRD_NONE &&
3487	    idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_EUI64)
3488		WRITE_ONCE(idev->cnf.addr_gen_mode,
3489			   IN6_ADDR_GEN_MODE_RANDOM);
3490
3491	addrconf_addr_gen(idev, false);
3492}
3493
3494#if IS_ENABLED(CONFIG_IPV6_SIT)
3495static void addrconf_sit_config(struct net_device *dev)
3496{
3497	struct inet6_dev *idev;
3498
3499	ASSERT_RTNL();
3500
3501	/*
3502	 * Configure the tunnel with one of our IPv4
3503	 * addresses... we should configure all of
3504	 * our v4 addrs in the tunnel
3505	 */
3506
3507	idev = ipv6_find_idev(dev);
3508	if (IS_ERR(idev)) {
3509		pr_debug("%s: add_dev failed\n", __func__);
3510		return;
3511	}
3512
3513	if (dev->priv_flags & IFF_ISATAP) {
3514		addrconf_addr_gen(idev, false);
3515		return;
3516	}
3517
3518	add_v4_addrs(idev);
3519
3520	if (dev->flags&IFF_POINTOPOINT)
3521		addrconf_add_mroute(dev);
3522}
3523#endif
3524
3525#if IS_ENABLED(CONFIG_NET_IPGRE) || IS_ENABLED(CONFIG_IPV6_GRE)
3526static void addrconf_gre_config(struct net_device *dev)
3527{
3528	struct inet6_dev *idev;
3529
3530	ASSERT_RTNL();
3531
3532	idev = ipv6_find_idev(dev);
3533	if (IS_ERR(idev)) {
3534		pr_debug("%s: add_dev failed\n", __func__);
3535		return;
3536	}
3537
3538	if (dev->type == ARPHRD_ETHER) {
3539		addrconf_addr_gen(idev, true);
3540		return;
3541	}
3542
3543	add_v4_addrs(idev);
3544
3545	if (dev->flags & IFF_POINTOPOINT)
3546		addrconf_add_mroute(dev);
3547}
3548#endif
3549
3550static void addrconf_init_auto_addrs(struct net_device *dev)
3551{
3552	switch (dev->type) {
3553#if IS_ENABLED(CONFIG_IPV6_SIT)
3554	case ARPHRD_SIT:
3555		addrconf_sit_config(dev);
3556		break;
3557#endif
3558#if IS_ENABLED(CONFIG_NET_IPGRE) || IS_ENABLED(CONFIG_IPV6_GRE)
3559	case ARPHRD_IP6GRE:
3560	case ARPHRD_IPGRE:
3561		addrconf_gre_config(dev);
3562		break;
3563#endif
3564	case ARPHRD_LOOPBACK:
3565		init_loopback(dev);
3566		break;
3567
3568	default:
3569		addrconf_dev_config(dev);
3570		break;
3571	}
3572}
3573
3574static int fixup_permanent_addr(struct net *net,
3575				struct inet6_dev *idev,
3576				struct inet6_ifaddr *ifp)
3577{
3578	/* !fib6_node means the host route was removed from the
3579	 * FIB, for example, if 'lo' device is taken down. In that
3580	 * case regenerate the host route.
3581	 */
3582	if (!ifp->rt || !ifp->rt->fib6_node) {
3583		struct fib6_info *f6i, *prev;
3584
3585		f6i = addrconf_f6i_alloc(net, idev, &ifp->addr, false,
3586					 GFP_ATOMIC, NULL);
3587		if (IS_ERR(f6i))
3588			return PTR_ERR(f6i);
3589
3590		/* ifp->rt can be accessed outside of rtnl */
3591		spin_lock(&ifp->lock);
3592		prev = ifp->rt;
3593		ifp->rt = f6i;
3594		spin_unlock(&ifp->lock);
3595
3596		fib6_info_release(prev);
3597	}
3598
3599	if (!(ifp->flags & IFA_F_NOPREFIXROUTE)) {
3600		addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
3601				      ifp->rt_priority, idev->dev, 0, 0,
3602				      GFP_ATOMIC);
3603	}
3604
3605	if (ifp->state == INET6_IFADDR_STATE_PREDAD)
3606		addrconf_dad_start(ifp);
3607
3608	return 0;
3609}
3610
3611static void addrconf_permanent_addr(struct net *net, struct net_device *dev)
3612{
3613	struct inet6_ifaddr *ifp, *tmp;
3614	struct inet6_dev *idev;
3615
3616	idev = __in6_dev_get(dev);
3617	if (!idev)
3618		return;
3619
3620	write_lock_bh(&idev->lock);
3621
3622	list_for_each_entry_safe(ifp, tmp, &idev->addr_list, if_list) {
3623		if ((ifp->flags & IFA_F_PERMANENT) &&
3624		    fixup_permanent_addr(net, idev, ifp) < 0) {
3625			write_unlock_bh(&idev->lock);
3626			in6_ifa_hold(ifp);
3627			ipv6_del_addr(ifp);
3628			write_lock_bh(&idev->lock);
3629
3630			net_info_ratelimited("%s: Failed to add prefix route for address %pI6c; dropping\n",
3631					     idev->dev->name, &ifp->addr);
3632		}
3633	}
3634
3635	write_unlock_bh(&idev->lock);
3636}
3637
3638static int addrconf_notify(struct notifier_block *this, unsigned long event,
3639			   void *ptr)
3640{
3641	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
3642	struct netdev_notifier_change_info *change_info;
3643	struct netdev_notifier_changeupper_info *info;
3644	struct inet6_dev *idev = __in6_dev_get(dev);
3645	struct net *net = dev_net(dev);
3646	int run_pending = 0;
3647	int err;
3648
3649	switch (event) {
3650	case NETDEV_REGISTER:
3651		if (!idev && dev->mtu >= IPV6_MIN_MTU) {
3652			idev = ipv6_add_dev(dev);
3653			if (IS_ERR(idev))
3654				return notifier_from_errno(PTR_ERR(idev));
3655		}
3656		break;
3657
3658	case NETDEV_CHANGEMTU:
3659		/* if MTU under IPV6_MIN_MTU stop IPv6 on this interface. */
3660		if (dev->mtu < IPV6_MIN_MTU) {
3661			addrconf_ifdown(dev, dev != net->loopback_dev);
3662			break;
3663		}
3664
3665		if (idev) {
3666			rt6_mtu_change(dev, dev->mtu);
3667			WRITE_ONCE(idev->cnf.mtu6, dev->mtu);
3668			break;
3669		}
3670
3671		/* allocate new idev */
3672		idev = ipv6_add_dev(dev);
3673		if (IS_ERR(idev))
3674			break;
3675
3676		/* device is still not ready */
3677		if (!(idev->if_flags & IF_READY))
3678			break;
3679
3680		run_pending = 1;
3681		fallthrough;
3682	case NETDEV_UP:
3683	case NETDEV_CHANGE:
3684		if (idev && idev->cnf.disable_ipv6)
3685			break;
3686
3687		if (dev->priv_flags & IFF_NO_ADDRCONF) {
3688			if (event == NETDEV_UP && !IS_ERR_OR_NULL(idev) &&
3689			    dev->flags & IFF_UP && dev->flags & IFF_MULTICAST)
3690				ipv6_mc_up(idev);
3691			break;
3692		}
3693
3694		if (event == NETDEV_UP) {
3695			/* restore routes for permanent addresses */
3696			addrconf_permanent_addr(net, dev);
3697
3698			if (!addrconf_link_ready(dev)) {
3699				/* device is not ready yet. */
3700				pr_debug("ADDRCONF(NETDEV_UP): %s: link is not ready\n",
3701					 dev->name);
3702				break;
3703			}
3704
3705			if (!idev && dev->mtu >= IPV6_MIN_MTU)
3706				idev = ipv6_add_dev(dev);
3707
3708			if (!IS_ERR_OR_NULL(idev)) {
3709				idev->if_flags |= IF_READY;
3710				run_pending = 1;
3711			}
3712		} else if (event == NETDEV_CHANGE) {
3713			if (!addrconf_link_ready(dev)) {
3714				/* device is still not ready. */
3715				rt6_sync_down_dev(dev, event);
3716				break;
3717			}
3718
3719			if (!IS_ERR_OR_NULL(idev)) {
3720				if (idev->if_flags & IF_READY) {
3721					/* device is already configured -
3722					 * but resend MLD reports, we might
3723					 * have roamed and need to update
3724					 * multicast snooping switches
3725					 */
3726					ipv6_mc_up(idev);
3727					change_info = ptr;
3728					if (change_info->flags_changed & IFF_NOARP)
3729						addrconf_dad_run(idev, true);
3730					rt6_sync_up(dev, RTNH_F_LINKDOWN);
3731					break;
3732				}
3733				idev->if_flags |= IF_READY;
3734			}
3735
3736			pr_debug("ADDRCONF(NETDEV_CHANGE): %s: link becomes ready\n",
3737				 dev->name);
3738
3739			run_pending = 1;
3740		}
3741
3742		addrconf_init_auto_addrs(dev);
3743
3744		if (!IS_ERR_OR_NULL(idev)) {
3745			if (run_pending)
3746				addrconf_dad_run(idev, false);
3747
3748			/* Device has an address by now */
3749			rt6_sync_up(dev, RTNH_F_DEAD);
3750
3751			/*
3752			 * If the MTU changed during the interface down,
3753			 * when the interface up, the changed MTU must be
3754			 * reflected in the idev as well as routers.
3755			 */
3756			if (idev->cnf.mtu6 != dev->mtu &&
3757			    dev->mtu >= IPV6_MIN_MTU) {
3758				rt6_mtu_change(dev, dev->mtu);
3759				WRITE_ONCE(idev->cnf.mtu6, dev->mtu);
3760			}
3761			WRITE_ONCE(idev->tstamp, jiffies);
3762			inet6_ifinfo_notify(RTM_NEWLINK, idev);
3763
3764			/*
3765			 * If the changed mtu during down is lower than
3766			 * IPV6_MIN_MTU stop IPv6 on this interface.
3767			 */
3768			if (dev->mtu < IPV6_MIN_MTU)
3769				addrconf_ifdown(dev, dev != net->loopback_dev);
3770		}
3771		break;
3772
3773	case NETDEV_DOWN:
3774	case NETDEV_UNREGISTER:
3775		/*
3776		 *	Remove all addresses from this interface.
3777		 */
3778		addrconf_ifdown(dev, event != NETDEV_DOWN);
3779		break;
3780
3781	case NETDEV_CHANGENAME:
3782		if (idev) {
3783			snmp6_unregister_dev(idev);
3784			addrconf_sysctl_unregister(idev);
3785			err = addrconf_sysctl_register(idev);
3786			if (err)
3787				return notifier_from_errno(err);
3788			err = snmp6_register_dev(idev);
3789			if (err) {
3790				addrconf_sysctl_unregister(idev);
3791				return notifier_from_errno(err);
3792			}
3793		}
3794		break;
3795
3796	case NETDEV_PRE_TYPE_CHANGE:
3797	case NETDEV_POST_TYPE_CHANGE:
3798		if (idev)
3799			addrconf_type_change(dev, event);
3800		break;
3801
3802	case NETDEV_CHANGEUPPER:
3803		info = ptr;
3804
3805		/* flush all routes if dev is linked to or unlinked from
3806		 * an L3 master device (e.g., VRF)
3807		 */
3808		if (info->upper_dev && netif_is_l3_master(info->upper_dev))
3809			addrconf_ifdown(dev, false);
3810	}
3811
3812	return NOTIFY_OK;
3813}
3814
3815/*
3816 *	addrconf module should be notified of a device going up
3817 */
3818static struct notifier_block ipv6_dev_notf = {
3819	.notifier_call = addrconf_notify,
3820	.priority = ADDRCONF_NOTIFY_PRIORITY,
3821};
3822
3823static void addrconf_type_change(struct net_device *dev, unsigned long event)
3824{
3825	struct inet6_dev *idev;
3826	ASSERT_RTNL();
3827
3828	idev = __in6_dev_get(dev);
3829
3830	if (event == NETDEV_POST_TYPE_CHANGE)
3831		ipv6_mc_remap(idev);
3832	else if (event == NETDEV_PRE_TYPE_CHANGE)
3833		ipv6_mc_unmap(idev);
3834}
3835
3836static bool addr_is_local(const struct in6_addr *addr)
3837{
3838	return ipv6_addr_type(addr) &
3839		(IPV6_ADDR_LINKLOCAL | IPV6_ADDR_LOOPBACK);
3840}
3841
3842static int addrconf_ifdown(struct net_device *dev, bool unregister)
3843{
3844	unsigned long event = unregister ? NETDEV_UNREGISTER : NETDEV_DOWN;
3845	struct net *net = dev_net(dev);
3846	struct inet6_dev *idev;
3847	struct inet6_ifaddr *ifa;
3848	LIST_HEAD(tmp_addr_list);
3849	bool keep_addr = false;
3850	bool was_ready;
3851	int state, i;
3852
3853	ASSERT_RTNL();
3854
3855	rt6_disable_ip(dev, event);
3856
3857	idev = __in6_dev_get(dev);
3858	if (!idev)
3859		return -ENODEV;
3860
3861	/*
3862	 * Step 1: remove reference to ipv6 device from parent device.
3863	 *	   Do not dev_put!
3864	 */
3865	if (unregister) {
3866		idev->dead = 1;
3867
3868		/* protected by rtnl_lock */
3869		RCU_INIT_POINTER(dev->ip6_ptr, NULL);
3870
3871		/* Step 1.5: remove snmp6 entry */
3872		snmp6_unregister_dev(idev);
3873
3874	}
3875
3876	/* combine the user config with event to determine if permanent
3877	 * addresses are to be removed from address hash table
3878	 */
3879	if (!unregister && !idev->cnf.disable_ipv6) {
3880		/* aggregate the system setting and interface setting */
3881		int _keep_addr = READ_ONCE(net->ipv6.devconf_all->keep_addr_on_down);
3882
3883		if (!_keep_addr)
3884			_keep_addr = READ_ONCE(idev->cnf.keep_addr_on_down);
3885
3886		keep_addr = (_keep_addr > 0);
3887	}
3888
3889	/* Step 2: clear hash table */
3890	for (i = 0; i < IN6_ADDR_HSIZE; i++) {
3891		struct hlist_head *h = &net->ipv6.inet6_addr_lst[i];
3892
3893		spin_lock_bh(&net->ipv6.addrconf_hash_lock);
3894restart:
3895		hlist_for_each_entry_rcu(ifa, h, addr_lst) {
3896			if (ifa->idev == idev) {
3897				addrconf_del_dad_work(ifa);
3898				/* combined flag + permanent flag decide if
3899				 * address is retained on a down event
3900				 */
3901				if (!keep_addr ||
3902				    !(ifa->flags & IFA_F_PERMANENT) ||
3903				    addr_is_local(&ifa->addr)) {
3904					hlist_del_init_rcu(&ifa->addr_lst);
3905					goto restart;
3906				}
3907			}
3908		}
3909		spin_unlock_bh(&net->ipv6.addrconf_hash_lock);
3910	}
3911
3912	write_lock_bh(&idev->lock);
3913
3914	addrconf_del_rs_timer(idev);
3915
3916	/* Step 2: clear flags for stateless addrconf, repeated down
3917	 *         detection
3918	 */
3919	was_ready = idev->if_flags & IF_READY;
3920	if (!unregister)
3921		idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);
3922
3923	/* Step 3: clear tempaddr list */
3924	while (!list_empty(&idev->tempaddr_list)) {
3925		ifa = list_first_entry(&idev->tempaddr_list,
3926				       struct inet6_ifaddr, tmp_list);
3927		list_del(&ifa->tmp_list);
3928		write_unlock_bh(&idev->lock);
3929		spin_lock_bh(&ifa->lock);
3930
3931		if (ifa->ifpub) {
3932			in6_ifa_put(ifa->ifpub);
3933			ifa->ifpub = NULL;
3934		}
3935		spin_unlock_bh(&ifa->lock);
3936		in6_ifa_put(ifa);
3937		write_lock_bh(&idev->lock);
3938	}
3939
3940	list_for_each_entry(ifa, &idev->addr_list, if_list)
3941		list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
3942	write_unlock_bh(&idev->lock);
3943
3944	while (!list_empty(&tmp_addr_list)) {
3945		struct fib6_info *rt = NULL;
3946		bool keep;
3947
3948		ifa = list_first_entry(&tmp_addr_list,
3949				       struct inet6_ifaddr, if_list_aux);
3950		list_del(&ifa->if_list_aux);
3951
3952		addrconf_del_dad_work(ifa);
3953
3954		keep = keep_addr && (ifa->flags & IFA_F_PERMANENT) &&
3955			!addr_is_local(&ifa->addr);
3956
3957		spin_lock_bh(&ifa->lock);
3958
3959		if (keep) {
3960			/* set state to skip the notifier below */
3961			state = INET6_IFADDR_STATE_DEAD;
3962			ifa->state = INET6_IFADDR_STATE_PREDAD;
3963			if (!(ifa->flags & IFA_F_NODAD))
3964				ifa->flags |= IFA_F_TENTATIVE;
3965
3966			rt = ifa->rt;
3967			ifa->rt = NULL;
3968		} else {
3969			state = ifa->state;
3970			ifa->state = INET6_IFADDR_STATE_DEAD;
3971		}
3972
3973		spin_unlock_bh(&ifa->lock);
3974
3975		if (rt)
3976			ip6_del_rt(net, rt, false);
3977
3978		if (state != INET6_IFADDR_STATE_DEAD) {
3979			__ipv6_ifa_notify(RTM_DELADDR, ifa);
3980			inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
3981		} else {
3982			if (idev->cnf.forwarding)
3983				addrconf_leave_anycast(ifa);
3984			addrconf_leave_solict(ifa->idev, &ifa->addr);
3985		}
3986
3987		if (!keep) {
3988			write_lock_bh(&idev->lock);
3989			list_del_rcu(&ifa->if_list);
3990			write_unlock_bh(&idev->lock);
3991			in6_ifa_put(ifa);
3992		}
3993	}
3994
3995	/* Step 5: Discard anycast and multicast list */
3996	if (unregister) {
3997		ipv6_ac_destroy_dev(idev);
3998		ipv6_mc_destroy_dev(idev);
3999	} else if (was_ready) {
4000		ipv6_mc_down(idev);
4001	}
4002
4003	WRITE_ONCE(idev->tstamp, jiffies);
4004	idev->ra_mtu = 0;
4005
4006	/* Last: Shot the device (if unregistered) */
4007	if (unregister) {
4008		addrconf_sysctl_unregister(idev);
4009		neigh_parms_release(&nd_tbl, idev->nd_parms);
4010		neigh_ifdown(&nd_tbl, dev);
4011		in6_dev_put(idev);
4012	}
4013	return 0;
4014}
4015
4016static void addrconf_rs_timer(struct timer_list *t)
4017{
4018	struct inet6_dev *idev = from_timer(idev, t, rs_timer);
4019	struct net_device *dev = idev->dev;
4020	struct in6_addr lladdr;
4021	int rtr_solicits;
4022
4023	write_lock(&idev->lock);
4024	if (idev->dead || !(idev->if_flags & IF_READY))
4025		goto out;
4026
4027	if (!ipv6_accept_ra(idev))
4028		goto out;
4029
4030	/* Announcement received after solicitation was sent */
4031	if (idev->if_flags & IF_RA_RCVD)
4032		goto out;
4033
4034	rtr_solicits = READ_ONCE(idev->cnf.rtr_solicits);
4035
4036	if (idev->rs_probes++ < rtr_solicits || rtr_solicits < 0) {
4037		write_unlock(&idev->lock);
4038		if (!ipv6_get_lladdr(dev, &lladdr, IFA_F_TENTATIVE))
4039			ndisc_send_rs(dev, &lladdr,
4040				      &in6addr_linklocal_allrouters);
4041		else
4042			goto put;
4043
4044		write_lock(&idev->lock);
4045		idev->rs_interval = rfc3315_s14_backoff_update(
4046				idev->rs_interval,
4047				READ_ONCE(idev->cnf.rtr_solicit_max_interval));
4048		/* The wait after the last probe can be shorter */
4049		addrconf_mod_rs_timer(idev, (idev->rs_probes ==
4050					     READ_ONCE(idev->cnf.rtr_solicits)) ?
4051				      READ_ONCE(idev->cnf.rtr_solicit_delay) :
4052				      idev->rs_interval);
4053	} else {
4054		/*
4055		 * Note: we do not support deprecated "all on-link"
4056		 * assumption any longer.
4057		 */
4058		pr_debug("%s: no IPv6 routers present\n", idev->dev->name);
4059	}
4060
4061out:
4062	write_unlock(&idev->lock);
4063put:
4064	in6_dev_put(idev);
4065}
4066
4067/*
4068 *	Duplicate Address Detection
4069 */
4070static void addrconf_dad_kick(struct inet6_ifaddr *ifp)
4071{
4072	struct inet6_dev *idev = ifp->idev;
4073	unsigned long rand_num;
4074	u64 nonce;
4075
4076	if (ifp->flags & IFA_F_OPTIMISTIC)
4077		rand_num = 0;
4078	else
4079		rand_num = get_random_u32_below(
4080				READ_ONCE(idev->cnf.rtr_solicit_delay) ? : 1);
4081
4082	nonce = 0;
4083	if (READ_ONCE(idev->cnf.enhanced_dad) ||
4084	    READ_ONCE(dev_net(idev->dev)->ipv6.devconf_all->enhanced_dad)) {
4085		do
4086			get_random_bytes(&nonce, 6);
4087		while (nonce == 0);
4088	}
4089	ifp->dad_nonce = nonce;
4090	ifp->dad_probes = READ_ONCE(idev->cnf.dad_transmits);
4091	addrconf_mod_dad_work(ifp, rand_num);
4092}
4093
4094static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
4095{
4096	struct inet6_dev *idev = ifp->idev;
4097	struct net_device *dev = idev->dev;
4098	bool bump_id, notify = false;
4099	struct net *net;
4100
4101	addrconf_join_solict(dev, &ifp->addr);
4102
4103	read_lock_bh(&idev->lock);
4104	spin_lock(&ifp->lock);
4105	if (ifp->state == INET6_IFADDR_STATE_DEAD)
4106		goto out;
4107
4108	net = dev_net(dev);
4109	if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) ||
4110	    (READ_ONCE(net->ipv6.devconf_all->accept_dad) < 1 &&
4111	     READ_ONCE(idev->cnf.accept_dad) < 1) ||
4112	    !(ifp->flags&IFA_F_TENTATIVE) ||
4113	    ifp->flags & IFA_F_NODAD) {
4114		bool send_na = false;
4115
4116		if (ifp->flags & IFA_F_TENTATIVE &&
4117		    !(ifp->flags & IFA_F_OPTIMISTIC))
4118			send_na = true;
4119		bump_id = ifp->flags & IFA_F_TENTATIVE;
4120		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
4121		spin_unlock(&ifp->lock);
4122		read_unlock_bh(&idev->lock);
4123
4124		addrconf_dad_completed(ifp, bump_id, send_na);
4125		return;
4126	}
4127
4128	if (!(idev->if_flags & IF_READY)) {
4129		spin_unlock(&ifp->lock);
4130		read_unlock_bh(&idev->lock);
4131		/*
4132		 * If the device is not ready:
4133		 * - keep it tentative if it is a permanent address.
4134		 * - otherwise, kill it.
4135		 */
4136		in6_ifa_hold(ifp);
4137		addrconf_dad_stop(ifp, 0);
4138		return;
4139	}
4140
4141	/*
4142	 * Optimistic nodes can start receiving
4143	 * Frames right away
4144	 */
4145	if (ifp->flags & IFA_F_OPTIMISTIC) {
4146		ip6_ins_rt(net, ifp->rt);
4147		if (ipv6_use_optimistic_addr(net, idev)) {
4148			/* Because optimistic nodes can use this address,
4149			 * notify listeners. If DAD fails, RTM_DELADDR is sent.
4150			 */
4151			notify = true;
4152		}
4153	}
4154
4155	addrconf_dad_kick(ifp);
4156out:
4157	spin_unlock(&ifp->lock);
4158	read_unlock_bh(&idev->lock);
4159	if (notify)
4160		ipv6_ifa_notify(RTM_NEWADDR, ifp);
4161}
4162
4163static void addrconf_dad_start(struct inet6_ifaddr *ifp)
4164{
4165	bool begin_dad = false;
4166
4167	spin_lock_bh(&ifp->lock);
4168	if (ifp->state != INET6_IFADDR_STATE_DEAD) {
4169		ifp->state = INET6_IFADDR_STATE_PREDAD;
4170		begin_dad = true;
4171	}
4172	spin_unlock_bh(&ifp->lock);
4173
4174	if (begin_dad)
4175		addrconf_mod_dad_work(ifp, 0);
4176}
4177
4178static void addrconf_dad_work(struct work_struct *w)
4179{
4180	struct inet6_ifaddr *ifp = container_of(to_delayed_work(w),
4181						struct inet6_ifaddr,
4182						dad_work);
4183	struct inet6_dev *idev = ifp->idev;
4184	bool bump_id, disable_ipv6 = false;
4185	struct in6_addr mcaddr;
4186
4187	enum {
4188		DAD_PROCESS,
4189		DAD_BEGIN,
4190		DAD_ABORT,
4191	} action = DAD_PROCESS;
4192
4193	rtnl_lock();
4194
4195	spin_lock_bh(&ifp->lock);
4196	if (ifp->state == INET6_IFADDR_STATE_PREDAD) {
4197		action = DAD_BEGIN;
4198		ifp->state = INET6_IFADDR_STATE_DAD;
4199	} else if (ifp->state == INET6_IFADDR_STATE_ERRDAD) {
4200		action = DAD_ABORT;
4201		ifp->state = INET6_IFADDR_STATE_POSTDAD;
4202
4203		if ((READ_ONCE(dev_net(idev->dev)->ipv6.devconf_all->accept_dad) > 1 ||
4204		     READ_ONCE(idev->cnf.accept_dad) > 1) &&
4205		    !idev->cnf.disable_ipv6 &&
4206		    !(ifp->flags & IFA_F_STABLE_PRIVACY)) {
4207			struct in6_addr addr;
4208
4209			addr.s6_addr32[0] = htonl(0xfe800000);
4210			addr.s6_addr32[1] = 0;
4211
4212			if (!ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) &&
4213			    ipv6_addr_equal(&ifp->addr, &addr)) {
4214				/* DAD failed for link-local based on MAC */
4215				WRITE_ONCE(idev->cnf.disable_ipv6, 1);
4216
4217				pr_info("%s: IPv6 being disabled!\n",
4218					ifp->idev->dev->name);
4219				disable_ipv6 = true;
4220			}
4221		}
4222	}
4223	spin_unlock_bh(&ifp->lock);
4224
4225	if (action == DAD_BEGIN) {
4226		addrconf_dad_begin(ifp);
4227		goto out;
4228	} else if (action == DAD_ABORT) {
4229		in6_ifa_hold(ifp);
4230		addrconf_dad_stop(ifp, 1);
4231		if (disable_ipv6)
4232			addrconf_ifdown(idev->dev, false);
4233		goto out;
4234	}
4235
4236	if (!ifp->dad_probes && addrconf_dad_end(ifp))
4237		goto out;
4238
4239	write_lock_bh(&idev->lock);
4240	if (idev->dead || !(idev->if_flags & IF_READY)) {
4241		write_unlock_bh(&idev->lock);
4242		goto out;
4243	}
4244
4245	spin_lock(&ifp->lock);
4246	if (ifp->state == INET6_IFADDR_STATE_DEAD) {
4247		spin_unlock(&ifp->lock);
4248		write_unlock_bh(&idev->lock);
4249		goto out;
4250	}
4251
4252	if (ifp->dad_probes == 0) {
4253		bool send_na = false;
4254
4255		/*
4256		 * DAD was successful
4257		 */
4258
4259		if (ifp->flags & IFA_F_TENTATIVE &&
4260		    !(ifp->flags & IFA_F_OPTIMISTIC))
4261			send_na = true;
4262		bump_id = ifp->flags & IFA_F_TENTATIVE;
4263		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
4264		spin_unlock(&ifp->lock);
4265		write_unlock_bh(&idev->lock);
4266
4267		addrconf_dad_completed(ifp, bump_id, send_na);
4268
4269		goto out;
4270	}
4271
4272	ifp->dad_probes--;
4273	addrconf_mod_dad_work(ifp,
4274			      max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME),
4275				  HZ/100));
4276	spin_unlock(&ifp->lock);
4277	write_unlock_bh(&idev->lock);
4278
4279	/* send a neighbour solicitation for our addr */
4280	addrconf_addr_solict_mult(&ifp->addr, &mcaddr);
4281	ndisc_send_ns(ifp->idev->dev, &ifp->addr, &mcaddr, &in6addr_any,
4282		      ifp->dad_nonce);
4283out:
4284	in6_ifa_put(ifp);
4285	rtnl_unlock();
4286}
4287
4288/* ifp->idev must be at least read locked */
4289static bool ipv6_lonely_lladdr(struct inet6_ifaddr *ifp)
4290{
4291	struct inet6_ifaddr *ifpiter;
4292	struct inet6_dev *idev = ifp->idev;
4293
4294	list_for_each_entry_reverse(ifpiter, &idev->addr_list, if_list) {
4295		if (ifpiter->scope > IFA_LINK)
4296			break;
4297		if (ifp != ifpiter && ifpiter->scope == IFA_LINK &&
4298		    (ifpiter->flags & (IFA_F_PERMANENT|IFA_F_TENTATIVE|
4299				       IFA_F_OPTIMISTIC|IFA_F_DADFAILED)) ==
4300		    IFA_F_PERMANENT)
4301			return false;
4302	}
4303	return true;
4304}
4305
4306static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
4307				   bool send_na)
4308{
4309	struct net_device *dev = ifp->idev->dev;
4310	struct in6_addr lladdr;
4311	bool send_rs, send_mld;
4312
4313	addrconf_del_dad_work(ifp);
4314
4315	/*
4316	 *	Configure the address for reception. Now it is valid.
4317	 */
4318
4319	ipv6_ifa_notify(RTM_NEWADDR, ifp);
4320
4321	/* If added prefix is link local and we are prepared to process
4322	   router advertisements, start sending router solicitations.
4323	 */
4324
4325	read_lock_bh(&ifp->idev->lock);
4326	send_mld = ifp->scope == IFA_LINK && ipv6_lonely_lladdr(ifp);
4327	send_rs = send_mld &&
4328		  ipv6_accept_ra(ifp->idev) &&
4329		  READ_ONCE(ifp->idev->cnf.rtr_solicits) != 0 &&
4330		  (dev->flags & IFF_LOOPBACK) == 0 &&
4331		  (dev->type != ARPHRD_TUNNEL) &&
4332		  !netif_is_team_port(dev);
4333	read_unlock_bh(&ifp->idev->lock);
4334
4335	/* While dad is in progress mld report's source address is in6_addrany.
4336	 * Resend with proper ll now.
4337	 */
4338	if (send_mld)
4339		ipv6_mc_dad_complete(ifp->idev);
4340
4341	/* send unsolicited NA if enabled */
4342	if (send_na &&
4343	    (READ_ONCE(ifp->idev->cnf.ndisc_notify) ||
4344	     READ_ONCE(dev_net(dev)->ipv6.devconf_all->ndisc_notify))) {
4345		ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifp->addr,
4346			      /*router=*/ !!ifp->idev->cnf.forwarding,
4347			      /*solicited=*/ false, /*override=*/ true,
4348			      /*inc_opt=*/ true);
4349	}
4350
4351	if (send_rs) {
4352		/*
4353		 *	If a host as already performed a random delay
4354		 *	[...] as part of DAD [...] there is no need
4355		 *	to delay again before sending the first RS
4356		 */
4357		if (ipv6_get_lladdr(dev, &lladdr, IFA_F_TENTATIVE))
4358			return;
4359		ndisc_send_rs(dev, &lladdr, &in6addr_linklocal_allrouters);
4360
4361		write_lock_bh(&ifp->idev->lock);
4362		spin_lock(&ifp->lock);
4363		ifp->idev->rs_interval = rfc3315_s14_backoff_init(
4364			READ_ONCE(ifp->idev->cnf.rtr_solicit_interval));
4365		ifp->idev->rs_probes = 1;
4366		ifp->idev->if_flags |= IF_RS_SENT;
4367		addrconf_mod_rs_timer(ifp->idev, ifp->idev->rs_interval);
4368		spin_unlock(&ifp->lock);
4369		write_unlock_bh(&ifp->idev->lock);
4370	}
4371
4372	if (bump_id)
4373		rt_genid_bump_ipv6(dev_net(dev));
4374
4375	/* Make sure that a new temporary address will be created
4376	 * before this temporary address becomes deprecated.
4377	 */
4378	if (ifp->flags & IFA_F_TEMPORARY)
4379		addrconf_verify_rtnl(dev_net(dev));
4380}
4381
4382static void addrconf_dad_run(struct inet6_dev *idev, bool restart)
4383{
4384	struct inet6_ifaddr *ifp;
4385
4386	read_lock_bh(&idev->lock);
4387	list_for_each_entry(ifp, &idev->addr_list, if_list) {
4388		spin_lock(&ifp->lock);
4389		if ((ifp->flags & IFA_F_TENTATIVE &&
4390		     ifp->state == INET6_IFADDR_STATE_DAD) || restart) {
4391			if (restart)
4392				ifp->state = INET6_IFADDR_STATE_PREDAD;
4393			addrconf_dad_kick(ifp);
4394		}
4395		spin_unlock(&ifp->lock);
4396	}
4397	read_unlock_bh(&idev->lock);
4398}
4399
4400#ifdef CONFIG_PROC_FS
4401struct if6_iter_state {
4402	struct seq_net_private p;
4403	int bucket;
4404	int offset;
4405};
4406
4407static struct inet6_ifaddr *if6_get_first(struct seq_file *seq, loff_t pos)
4408{
4409	struct if6_iter_state *state = seq->private;
4410	struct net *net = seq_file_net(seq);
4411	struct inet6_ifaddr *ifa = NULL;
4412	int p = 0;
4413
4414	/* initial bucket if pos is 0 */
4415	if (pos == 0) {
4416		state->bucket = 0;
4417		state->offset = 0;
4418	}
4419
4420	for (; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) {
4421		hlist_for_each_entry_rcu(ifa, &net->ipv6.inet6_addr_lst[state->bucket],
4422					 addr_lst) {
4423			/* sync with offset */
4424			if (p < state->offset) {
4425				p++;
4426				continue;
4427			}
4428			return ifa;
4429		}
4430
4431		/* prepare for next bucket */
4432		state->offset = 0;
4433		p = 0;
4434	}
4435	return NULL;
4436}
4437
4438static struct inet6_ifaddr *if6_get_next(struct seq_file *seq,
4439					 struct inet6_ifaddr *ifa)
4440{
4441	struct if6_iter_state *state = seq->private;
4442	struct net *net = seq_file_net(seq);
4443
4444	hlist_for_each_entry_continue_rcu(ifa, addr_lst) {
4445		state->offset++;
4446		return ifa;
4447	}
4448
4449	state->offset = 0;
4450	while (++state->bucket < IN6_ADDR_HSIZE) {
4451		hlist_for_each_entry_rcu(ifa,
4452				     &net->ipv6.inet6_addr_lst[state->bucket], addr_lst) {
4453			return ifa;
4454		}
4455	}
4456
4457	return NULL;
4458}
4459
4460static void *if6_seq_start(struct seq_file *seq, loff_t *pos)
4461	__acquires(rcu)
4462{
4463	rcu_read_lock();
4464	return if6_get_first(seq, *pos);
4465}
4466
4467static void *if6_seq_next(struct seq_file *seq, void *v, loff_t *pos)
4468{
4469	struct inet6_ifaddr *ifa;
4470
4471	ifa = if6_get_next(seq, v);
4472	++*pos;
4473	return ifa;
4474}
4475
4476static void if6_seq_stop(struct seq_file *seq, void *v)
4477	__releases(rcu)
4478{
4479	rcu_read_unlock();
4480}
4481
4482static int if6_seq_show(struct seq_file *seq, void *v)
4483{
4484	struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
4485	seq_printf(seq, "%pi6 %02x %02x %02x %02x %8s\n",
4486		   &ifp->addr,
4487		   ifp->idev->dev->ifindex,
4488		   ifp->prefix_len,
4489		   ifp->scope,
4490		   (u8) ifp->flags,
4491		   ifp->idev->dev->name);
4492	return 0;
4493}
4494
4495static const struct seq_operations if6_seq_ops = {
4496	.start	= if6_seq_start,
4497	.next	= if6_seq_next,
4498	.show	= if6_seq_show,
4499	.stop	= if6_seq_stop,
4500};
4501
4502static int __net_init if6_proc_net_init(struct net *net)
4503{
4504	if (!proc_create_net("if_inet6", 0444, net->proc_net, &if6_seq_ops,
4505			sizeof(struct if6_iter_state)))
4506		return -ENOMEM;
4507	return 0;
4508}
4509
4510static void __net_exit if6_proc_net_exit(struct net *net)
4511{
4512	remove_proc_entry("if_inet6", net->proc_net);
4513}
4514
4515static struct pernet_operations if6_proc_net_ops = {
4516	.init = if6_proc_net_init,
4517	.exit = if6_proc_net_exit,
4518};
4519
4520int __init if6_proc_init(void)
4521{
4522	return register_pernet_subsys(&if6_proc_net_ops);
4523}
4524
4525void if6_proc_exit(void)
4526{
4527	unregister_pernet_subsys(&if6_proc_net_ops);
4528}
4529#endif	/* CONFIG_PROC_FS */
4530
4531#if IS_ENABLED(CONFIG_IPV6_MIP6)
4532/* Check if address is a home address configured on any interface. */
4533int ipv6_chk_home_addr(struct net *net, const struct in6_addr *addr)
4534{
4535	unsigned int hash = inet6_addr_hash(net, addr);
4536	struct inet6_ifaddr *ifp = NULL;
4537	int ret = 0;
4538
4539	rcu_read_lock();
4540	hlist_for_each_entry_rcu(ifp, &net->ipv6.inet6_addr_lst[hash], addr_lst) {
4541		if (ipv6_addr_equal(&ifp->addr, addr) &&
4542		    (ifp->flags & IFA_F_HOMEADDRESS)) {
4543			ret = 1;
4544			break;
4545		}
4546	}
4547	rcu_read_unlock();
4548	return ret;
4549}
4550#endif
4551
4552/* RFC6554 has some algorithm to avoid loops in segment routing by
4553 * checking if the segments contains any of a local interface address.
4554 *
4555 * Quote:
4556 *
4557 * To detect loops in the SRH, a router MUST determine if the SRH
4558 * includes multiple addresses assigned to any interface on that router.
4559 * If such addresses appear more than once and are separated by at least
4560 * one address not assigned to that router.
4561 */
4562int ipv6_chk_rpl_srh_loop(struct net *net, const struct in6_addr *segs,
4563			  unsigned char nsegs)
4564{
4565	const struct in6_addr *addr;
4566	int i, ret = 0, found = 0;
4567	struct inet6_ifaddr *ifp;
4568	bool separated = false;
4569	unsigned int hash;
4570	bool hash_found;
4571
4572	rcu_read_lock();
4573	for (i = 0; i < nsegs; i++) {
4574		addr = &segs[i];
4575		hash = inet6_addr_hash(net, addr);
4576
4577		hash_found = false;
4578		hlist_for_each_entry_rcu(ifp, &net->ipv6.inet6_addr_lst[hash], addr_lst) {
4579
4580			if (ipv6_addr_equal(&ifp->addr, addr)) {
4581				hash_found = true;
4582				break;
4583			}
4584		}
4585
4586		if (hash_found) {
4587			if (found > 1 && separated) {
4588				ret = 1;
4589				break;
4590			}
4591
4592			separated = false;
4593			found++;
4594		} else {
4595			separated = true;
4596		}
4597	}
4598	rcu_read_unlock();
4599
4600	return ret;
4601}
4602
4603/*
4604 *	Periodic address status verification
4605 */
4606
4607static void addrconf_verify_rtnl(struct net *net)
4608{
4609	unsigned long now, next, next_sec, next_sched;
4610	struct inet6_ifaddr *ifp;
4611	int i;
4612
4613	ASSERT_RTNL();
4614
4615	rcu_read_lock_bh();
4616	now = jiffies;
4617	next = round_jiffies_up(now + ADDR_CHECK_FREQUENCY);
4618
4619	cancel_delayed_work(&net->ipv6.addr_chk_work);
4620
4621	for (i = 0; i < IN6_ADDR_HSIZE; i++) {
4622restart:
4623		hlist_for_each_entry_rcu_bh(ifp, &net->ipv6.inet6_addr_lst[i], addr_lst) {
4624			unsigned long age;
4625
4626			/* When setting preferred_lft to a value not zero or
4627			 * infinity, while valid_lft is infinity
4628			 * IFA_F_PERMANENT has a non-infinity life time.
4629			 */
4630			if ((ifp->flags & IFA_F_PERMANENT) &&
4631			    (ifp->prefered_lft == INFINITY_LIFE_TIME))
4632				continue;
4633
4634			spin_lock(&ifp->lock);
4635			/* We try to batch several events at once. */
4636			age = (now - ifp->tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
4637
4638			if ((ifp->flags&IFA_F_TEMPORARY) &&
4639			    !(ifp->flags&IFA_F_TENTATIVE) &&
4640			    ifp->prefered_lft != INFINITY_LIFE_TIME &&
4641			    !ifp->regen_count && ifp->ifpub) {
4642				/* This is a non-regenerated temporary addr. */
4643
4644				unsigned long regen_advance = ipv6_get_regen_advance(ifp->idev);
4645
4646				if (age + regen_advance >= ifp->prefered_lft) {
4647					struct inet6_ifaddr *ifpub = ifp->ifpub;
4648					if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
4649						next = ifp->tstamp + ifp->prefered_lft * HZ;
4650
4651					ifp->regen_count++;
4652					in6_ifa_hold(ifp);
4653					in6_ifa_hold(ifpub);
4654					spin_unlock(&ifp->lock);
4655
4656					spin_lock(&ifpub->lock);
4657					ifpub->regen_count = 0;
4658					spin_unlock(&ifpub->lock);
4659					rcu_read_unlock_bh();
4660					ipv6_create_tempaddr(ifpub, true);
4661					in6_ifa_put(ifpub);
4662					in6_ifa_put(ifp);
4663					rcu_read_lock_bh();
4664					goto restart;
4665				} else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next))
4666					next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ;
4667			}
4668
4669			if (ifp->valid_lft != INFINITY_LIFE_TIME &&
4670			    age >= ifp->valid_lft) {
4671				spin_unlock(&ifp->lock);
4672				in6_ifa_hold(ifp);
4673				rcu_read_unlock_bh();
4674				ipv6_del_addr(ifp);
4675				rcu_read_lock_bh();
4676				goto restart;
4677			} else if (ifp->prefered_lft == INFINITY_LIFE_TIME) {
4678				spin_unlock(&ifp->lock);
4679				continue;
4680			} else if (age >= ifp->prefered_lft) {
4681				/* jiffies - ifp->tstamp > age >= ifp->prefered_lft */
4682				int deprecate = 0;
4683
4684				if (!(ifp->flags&IFA_F_DEPRECATED)) {
4685					deprecate = 1;
4686					ifp->flags |= IFA_F_DEPRECATED;
4687				}
4688
4689				if ((ifp->valid_lft != INFINITY_LIFE_TIME) &&
4690				    (time_before(ifp->tstamp + ifp->valid_lft * HZ, next)))
4691					next = ifp->tstamp + ifp->valid_lft * HZ;
4692
4693				spin_unlock(&ifp->lock);
4694
4695				if (deprecate) {
4696					in6_ifa_hold(ifp);
4697
4698					ipv6_ifa_notify(0, ifp);
4699					in6_ifa_put(ifp);
4700					goto restart;
4701				}
4702			} else {
4703				/* ifp->prefered_lft <= ifp->valid_lft */
4704				if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
4705					next = ifp->tstamp + ifp->prefered_lft * HZ;
4706				spin_unlock(&ifp->lock);
4707			}
4708		}
4709	}
4710
4711	next_sec = round_jiffies_up(next);
4712	next_sched = next;
4713
4714	/* If rounded timeout is accurate enough, accept it. */
4715	if (time_before(next_sec, next + ADDRCONF_TIMER_FUZZ))
4716		next_sched = next_sec;
4717
4718	/* And minimum interval is ADDRCONF_TIMER_FUZZ_MAX. */
4719	if (time_before(next_sched, jiffies + ADDRCONF_TIMER_FUZZ_MAX))
4720		next_sched = jiffies + ADDRCONF_TIMER_FUZZ_MAX;
4721
4722	pr_debug("now = %lu, schedule = %lu, rounded schedule = %lu => %lu\n",
4723		 now, next, next_sec, next_sched);
4724	mod_delayed_work(addrconf_wq, &net->ipv6.addr_chk_work, next_sched - now);
4725	rcu_read_unlock_bh();
4726}
4727
4728static void addrconf_verify_work(struct work_struct *w)
4729{
4730	struct net *net = container_of(to_delayed_work(w), struct net,
4731				       ipv6.addr_chk_work);
4732
4733	rtnl_lock();
4734	addrconf_verify_rtnl(net);
4735	rtnl_unlock();
4736}
4737
4738static void addrconf_verify(struct net *net)
4739{
4740	mod_delayed_work(addrconf_wq, &net->ipv6.addr_chk_work, 0);
4741}
4742
4743static struct in6_addr *extract_addr(struct nlattr *addr, struct nlattr *local,
4744				     struct in6_addr **peer_pfx)
4745{
4746	struct in6_addr *pfx = NULL;
4747
4748	*peer_pfx = NULL;
4749
4750	if (addr)
4751		pfx = nla_data(addr);
4752
4753	if (local) {
4754		if (pfx && nla_memcmp(local, pfx, sizeof(*pfx)))
4755			*peer_pfx = pfx;
4756		pfx = nla_data(local);
4757	}
4758
4759	return pfx;
4760}
4761
4762static const struct nla_policy ifa_ipv6_policy[IFA_MAX+1] = {
4763	[IFA_ADDRESS]		= { .len = sizeof(struct in6_addr) },
4764	[IFA_LOCAL]		= { .len = sizeof(struct in6_addr) },
4765	[IFA_CACHEINFO]		= { .len = sizeof(struct ifa_cacheinfo) },
4766	[IFA_FLAGS]		= { .len = sizeof(u32) },
4767	[IFA_RT_PRIORITY]	= { .len = sizeof(u32) },
4768	[IFA_TARGET_NETNSID]	= { .type = NLA_S32 },
4769	[IFA_PROTO]		= { .type = NLA_U8 },
4770};
4771
4772static int
4773inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
4774		  struct netlink_ext_ack *extack)
4775{
4776	struct net *net = sock_net(skb->sk);
4777	struct ifaddrmsg *ifm;
4778	struct nlattr *tb[IFA_MAX+1];
4779	struct in6_addr *pfx, *peer_pfx;
4780	u32 ifa_flags;
4781	int err;
4782
4783	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
4784				     ifa_ipv6_policy, extack);
4785	if (err < 0)
4786		return err;
4787
4788	ifm = nlmsg_data(nlh);
4789	pfx = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL], &peer_pfx);
4790	if (!pfx)
4791		return -EINVAL;
4792
4793	ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : ifm->ifa_flags;
4794
4795	/* We ignore other flags so far. */
4796	ifa_flags &= IFA_F_MANAGETEMPADDR;
4797
4798	return inet6_addr_del(net, ifm->ifa_index, ifa_flags, pfx,
4799			      ifm->ifa_prefixlen, extack);
4800}
4801
4802static int modify_prefix_route(struct inet6_ifaddr *ifp,
4803			       unsigned long expires, u32 flags,
4804			       bool modify_peer)
4805{
4806	struct fib6_table *table;
4807	struct fib6_info *f6i;
4808	u32 prio;
4809
4810	f6i = addrconf_get_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4811					ifp->prefix_len,
4812					ifp->idev->dev, 0, RTF_DEFAULT, true);
4813	if (!f6i)
4814		return -ENOENT;
4815
4816	prio = ifp->rt_priority ? : IP6_RT_PRIO_ADDRCONF;
4817	if (f6i->fib6_metric != prio) {
4818		/* delete old one */
4819		ip6_del_rt(dev_net(ifp->idev->dev), f6i, false);
4820
4821		/* add new one */
4822		addrconf_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4823				      ifp->prefix_len,
4824				      ifp->rt_priority, ifp->idev->dev,
4825				      expires, flags, GFP_KERNEL);
4826	} else {
4827		table = f6i->fib6_table;
4828		spin_lock_bh(&table->tb6_lock);
4829
4830		if (!(flags & RTF_EXPIRES)) {
4831			fib6_clean_expires(f6i);
4832			fib6_remove_gc_list(f6i);
4833		} else {
4834			fib6_set_expires(f6i, expires);
4835			fib6_add_gc_list(f6i);
4836		}
4837
4838		spin_unlock_bh(&table->tb6_lock);
4839
4840		fib6_info_release(f6i);
4841	}
4842
4843	return 0;
4844}
4845
4846static int inet6_addr_modify(struct net *net, struct inet6_ifaddr *ifp,
4847			     struct ifa6_config *cfg)
4848{
4849	u32 flags;
4850	clock_t expires;
4851	unsigned long timeout;
4852	bool was_managetempaddr;
4853	bool had_prefixroute;
4854	bool new_peer = false;
4855
4856	ASSERT_RTNL();
4857
4858	if (!cfg->valid_lft || cfg->preferred_lft > cfg->valid_lft)
4859		return -EINVAL;
4860
4861	if (cfg->ifa_flags & IFA_F_MANAGETEMPADDR &&
4862	    (ifp->flags & IFA_F_TEMPORARY || ifp->prefix_len != 64))
4863		return -EINVAL;
4864
4865	if (!(ifp->flags & IFA_F_TENTATIVE) || ifp->flags & IFA_F_DADFAILED)
4866		cfg->ifa_flags &= ~IFA_F_OPTIMISTIC;
4867
4868	timeout = addrconf_timeout_fixup(cfg->valid_lft, HZ);
4869	if (addrconf_finite_timeout(timeout)) {
4870		expires = jiffies_to_clock_t(timeout * HZ);
4871		cfg->valid_lft = timeout;
4872		flags = RTF_EXPIRES;
4873	} else {
4874		expires = 0;
4875		flags = 0;
4876		cfg->ifa_flags |= IFA_F_PERMANENT;
4877	}
4878
4879	timeout = addrconf_timeout_fixup(cfg->preferred_lft, HZ);
4880	if (addrconf_finite_timeout(timeout)) {
4881		if (timeout == 0)
4882			cfg->ifa_flags |= IFA_F_DEPRECATED;
4883		cfg->preferred_lft = timeout;
4884	}
4885
4886	if (cfg->peer_pfx &&
4887	    memcmp(&ifp->peer_addr, cfg->peer_pfx, sizeof(struct in6_addr))) {
4888		if (!ipv6_addr_any(&ifp->peer_addr))
4889			cleanup_prefix_route(ifp, expires, true, true);
4890		new_peer = true;
4891	}
4892
4893	spin_lock_bh(&ifp->lock);
4894	was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR;
4895	had_prefixroute = ifp->flags & IFA_F_PERMANENT &&
4896			  !(ifp->flags & IFA_F_NOPREFIXROUTE);
4897	ifp->flags &= ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD |
4898			IFA_F_HOMEADDRESS | IFA_F_MANAGETEMPADDR |
4899			IFA_F_NOPREFIXROUTE);
4900	ifp->flags |= cfg->ifa_flags;
4901	WRITE_ONCE(ifp->tstamp, jiffies);
4902	WRITE_ONCE(ifp->valid_lft, cfg->valid_lft);
4903	WRITE_ONCE(ifp->prefered_lft, cfg->preferred_lft);
4904	WRITE_ONCE(ifp->ifa_proto, cfg->ifa_proto);
4905
4906	if (cfg->rt_priority && cfg->rt_priority != ifp->rt_priority)
4907		WRITE_ONCE(ifp->rt_priority, cfg->rt_priority);
4908
4909	if (new_peer)
4910		ifp->peer_addr = *cfg->peer_pfx;
4911
4912	spin_unlock_bh(&ifp->lock);
4913	if (!(ifp->flags&IFA_F_TENTATIVE))
4914		ipv6_ifa_notify(0, ifp);
4915
4916	if (!(cfg->ifa_flags & IFA_F_NOPREFIXROUTE)) {
4917		int rc = -ENOENT;
4918
4919		if (had_prefixroute)
4920			rc = modify_prefix_route(ifp, expires, flags, false);
4921
4922		/* prefix route could have been deleted; if so restore it */
4923		if (rc == -ENOENT) {
4924			addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
4925					      ifp->rt_priority, ifp->idev->dev,
4926					      expires, flags, GFP_KERNEL);
4927		}
4928
4929		if (had_prefixroute && !ipv6_addr_any(&ifp->peer_addr))
4930			rc = modify_prefix_route(ifp, expires, flags, true);
4931
4932		if (rc == -ENOENT && !ipv6_addr_any(&ifp->peer_addr)) {
4933			addrconf_prefix_route(&ifp->peer_addr, ifp->prefix_len,
4934					      ifp->rt_priority, ifp->idev->dev,
4935					      expires, flags, GFP_KERNEL);
4936		}
4937	} else if (had_prefixroute) {
4938		enum cleanup_prefix_rt_t action;
4939		unsigned long rt_expires;
4940
4941		write_lock_bh(&ifp->idev->lock);
4942		action = check_cleanup_prefix_route(ifp, &rt_expires);
4943		write_unlock_bh(&ifp->idev->lock);
4944
4945		if (action != CLEANUP_PREFIX_RT_NOP) {
4946			cleanup_prefix_route(ifp, rt_expires,
4947				action == CLEANUP_PREFIX_RT_DEL, false);
4948		}
4949	}
4950
4951	if (was_managetempaddr || ifp->flags & IFA_F_MANAGETEMPADDR) {
4952		if (was_managetempaddr &&
4953		    !(ifp->flags & IFA_F_MANAGETEMPADDR)) {
4954			cfg->valid_lft = 0;
4955			cfg->preferred_lft = 0;
4956		}
4957		manage_tempaddrs(ifp->idev, ifp, cfg->valid_lft,
4958				 cfg->preferred_lft, !was_managetempaddr,
4959				 jiffies);
4960	}
4961
4962	addrconf_verify_rtnl(net);
4963
4964	return 0;
4965}
4966
4967static int
4968inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
4969		  struct netlink_ext_ack *extack)
4970{
4971	struct net *net = sock_net(skb->sk);
4972	struct ifaddrmsg *ifm;
4973	struct nlattr *tb[IFA_MAX+1];
4974	struct in6_addr *peer_pfx;
4975	struct inet6_ifaddr *ifa;
4976	struct net_device *dev;
4977	struct inet6_dev *idev;
4978	struct ifa6_config cfg;
4979	int err;
4980
4981	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
4982				     ifa_ipv6_policy, extack);
4983	if (err < 0)
4984		return err;
4985
4986	memset(&cfg, 0, sizeof(cfg));
4987
4988	ifm = nlmsg_data(nlh);
4989	cfg.pfx = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL], &peer_pfx);
4990	if (!cfg.pfx)
4991		return -EINVAL;
4992
4993	cfg.peer_pfx = peer_pfx;
4994	cfg.plen = ifm->ifa_prefixlen;
4995	if (tb[IFA_RT_PRIORITY])
4996		cfg.rt_priority = nla_get_u32(tb[IFA_RT_PRIORITY]);
4997
4998	if (tb[IFA_PROTO])
4999		cfg.ifa_proto = nla_get_u8(tb[IFA_PROTO]);
5000
5001	cfg.valid_lft = INFINITY_LIFE_TIME;
5002	cfg.preferred_lft = INFINITY_LIFE_TIME;
5003
5004	if (tb[IFA_CACHEINFO]) {
5005		struct ifa_cacheinfo *ci;
5006
5007		ci = nla_data(tb[IFA_CACHEINFO]);
5008		cfg.valid_lft = ci->ifa_valid;
5009		cfg.preferred_lft = ci->ifa_prefered;
5010	}
5011
5012	dev =  __dev_get_by_index(net, ifm->ifa_index);
5013	if (!dev) {
5014		NL_SET_ERR_MSG_MOD(extack, "Unable to find the interface");
5015		return -ENODEV;
5016	}
5017
5018	if (tb[IFA_FLAGS])
5019		cfg.ifa_flags = nla_get_u32(tb[IFA_FLAGS]);
5020	else
5021		cfg.ifa_flags = ifm->ifa_flags;
5022
5023	/* We ignore other flags so far. */
5024	cfg.ifa_flags &= IFA_F_NODAD | IFA_F_HOMEADDRESS |
5025			 IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE |
5026			 IFA_F_MCAUTOJOIN | IFA_F_OPTIMISTIC;
5027
5028	idev = ipv6_find_idev(dev);
5029	if (IS_ERR(idev))
5030		return PTR_ERR(idev);
5031
5032	if (!ipv6_allow_optimistic_dad(net, idev))
5033		cfg.ifa_flags &= ~IFA_F_OPTIMISTIC;
5034
5035	if (cfg.ifa_flags & IFA_F_NODAD &&
5036	    cfg.ifa_flags & IFA_F_OPTIMISTIC) {
5037		NL_SET_ERR_MSG(extack, "IFA_F_NODAD and IFA_F_OPTIMISTIC are mutually exclusive");
5038		return -EINVAL;
5039	}
5040
5041	ifa = ipv6_get_ifaddr(net, cfg.pfx, dev, 1);
5042	if (!ifa) {
5043		/*
5044		 * It would be best to check for !NLM_F_CREATE here but
5045		 * userspace already relies on not having to provide this.
5046		 */
5047		return inet6_addr_add(net, ifm->ifa_index, &cfg, extack);
5048	}
5049
5050	if (nlh->nlmsg_flags & NLM_F_EXCL ||
5051	    !(nlh->nlmsg_flags & NLM_F_REPLACE)) {
5052		NL_SET_ERR_MSG_MOD(extack, "address already assigned");
5053		err = -EEXIST;
5054	} else {
5055		err = inet6_addr_modify(net, ifa, &cfg);
5056	}
5057
5058	in6_ifa_put(ifa);
5059
5060	return err;
5061}
5062
5063static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u32 flags,
5064			  u8 scope, int ifindex)
5065{
5066	struct ifaddrmsg *ifm;
5067
5068	ifm = nlmsg_data(nlh);
5069	ifm->ifa_family = AF_INET6;
5070	ifm->ifa_prefixlen = prefixlen;
5071	ifm->ifa_flags = flags;
5072	ifm->ifa_scope = scope;
5073	ifm->ifa_index = ifindex;
5074}
5075
5076static int put_cacheinfo(struct sk_buff *skb, unsigned long cstamp,
5077			 unsigned long tstamp, u32 preferred, u32 valid)
5078{
5079	struct ifa_cacheinfo ci;
5080
5081	ci.cstamp = cstamp_delta(cstamp);
5082	ci.tstamp = cstamp_delta(tstamp);
5083	ci.ifa_prefered = preferred;
5084	ci.ifa_valid = valid;
5085
5086	return nla_put(skb, IFA_CACHEINFO, sizeof(ci), &ci);
5087}
5088
5089static inline int rt_scope(int ifa_scope)
5090{
5091	if (ifa_scope & IFA_HOST)
5092		return RT_SCOPE_HOST;
5093	else if (ifa_scope & IFA_LINK)
5094		return RT_SCOPE_LINK;
5095	else if (ifa_scope & IFA_SITE)
5096		return RT_SCOPE_SITE;
5097	else
5098		return RT_SCOPE_UNIVERSE;
5099}
5100
5101static inline int inet6_ifaddr_msgsize(void)
5102{
5103	return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
5104	       + nla_total_size(16) /* IFA_LOCAL */
5105	       + nla_total_size(16) /* IFA_ADDRESS */
5106	       + nla_total_size(sizeof(struct ifa_cacheinfo))
5107	       + nla_total_size(4)  /* IFA_FLAGS */
5108	       + nla_total_size(1)  /* IFA_PROTO */
5109	       + nla_total_size(4)  /* IFA_RT_PRIORITY */;
5110}
5111
5112enum addr_type_t {
5113	UNICAST_ADDR,
5114	MULTICAST_ADDR,
5115	ANYCAST_ADDR,
5116};
5117
5118struct inet6_fill_args {
5119	u32 portid;
5120	u32 seq;
5121	int event;
5122	unsigned int flags;
5123	int netnsid;
5124	int ifindex;
5125	enum addr_type_t type;
5126};
5127
5128static int inet6_fill_ifaddr(struct sk_buff *skb,
5129			     const struct inet6_ifaddr *ifa,
5130			     struct inet6_fill_args *args)
5131{
5132	struct nlmsghdr *nlh;
5133	u32 preferred, valid;
5134	u32 flags, priority;
5135	u8 proto;
5136
5137	nlh = nlmsg_put(skb, args->portid, args->seq, args->event,
5138			sizeof(struct ifaddrmsg), args->flags);
5139	if (!nlh)
5140		return -EMSGSIZE;
5141
5142	flags = READ_ONCE(ifa->flags);
5143	put_ifaddrmsg(nlh, ifa->prefix_len, ifa->flags, rt_scope(ifa->scope),
5144		      ifa->idev->dev->ifindex);
5145
5146	if (args->netnsid >= 0 &&
5147	    nla_put_s32(skb, IFA_TARGET_NETNSID, args->netnsid))
5148		goto error;
5149
5150	preferred = READ_ONCE(ifa->prefered_lft);
5151	valid = READ_ONCE(ifa->valid_lft);
5152
5153	if (!((flags & IFA_F_PERMANENT) &&
5154	      (preferred == INFINITY_LIFE_TIME))) {
5155		if (preferred != INFINITY_LIFE_TIME) {
5156			long tval = (jiffies - READ_ONCE(ifa->tstamp)) / HZ;
5157
5158			if (preferred > tval)
5159				preferred -= tval;
5160			else
5161				preferred = 0;
5162			if (valid != INFINITY_LIFE_TIME) {
5163				if (valid > tval)
5164					valid -= tval;
5165				else
5166					valid = 0;
5167			}
5168		}
5169	} else {
5170		preferred = INFINITY_LIFE_TIME;
5171		valid = INFINITY_LIFE_TIME;
5172	}
5173
5174	if (!ipv6_addr_any(&ifa->peer_addr)) {
5175		if (nla_put_in6_addr(skb, IFA_LOCAL, &ifa->addr) < 0 ||
5176		    nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->peer_addr) < 0)
5177			goto error;
5178	} else {
5179		if (nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->addr) < 0)
5180			goto error;
5181	}
5182
5183	priority = READ_ONCE(ifa->rt_priority);
5184	if (priority && nla_put_u32(skb, IFA_RT_PRIORITY, priority))
5185		goto error;
5186
5187	if (put_cacheinfo(skb, ifa->cstamp, READ_ONCE(ifa->tstamp),
5188			  preferred, valid) < 0)
5189		goto error;
5190
5191	if (nla_put_u32(skb, IFA_FLAGS, flags) < 0)
5192		goto error;
5193
5194	proto = READ_ONCE(ifa->ifa_proto);
5195	if (proto && nla_put_u8(skb, IFA_PROTO, proto))
5196		goto error;
5197
5198	nlmsg_end(skb, nlh);
5199	return 0;
5200
5201error:
5202	nlmsg_cancel(skb, nlh);
5203	return -EMSGSIZE;
5204}
5205
5206static int inet6_fill_ifmcaddr(struct sk_buff *skb,
5207			       const struct ifmcaddr6 *ifmca,
5208			       struct inet6_fill_args *args)
5209{
5210	int ifindex = ifmca->idev->dev->ifindex;
5211	u8 scope = RT_SCOPE_UNIVERSE;
5212	struct nlmsghdr *nlh;
5213
5214	if (ipv6_addr_scope(&ifmca->mca_addr) & IFA_SITE)
5215		scope = RT_SCOPE_SITE;
5216
5217	nlh = nlmsg_put(skb, args->portid, args->seq, args->event,
5218			sizeof(struct ifaddrmsg), args->flags);
5219	if (!nlh)
5220		return -EMSGSIZE;
5221
5222	if (args->netnsid >= 0 &&
5223	    nla_put_s32(skb, IFA_TARGET_NETNSID, args->netnsid)) {
5224		nlmsg_cancel(skb, nlh);
5225		return -EMSGSIZE;
5226	}
5227
5228	put_ifaddrmsg(nlh, 128, IFA_F_PERMANENT, scope, ifindex);
5229	if (nla_put_in6_addr(skb, IFA_MULTICAST, &ifmca->mca_addr) < 0 ||
5230	    put_cacheinfo(skb, ifmca->mca_cstamp, READ_ONCE(ifmca->mca_tstamp),
5231			  INFINITY_LIFE_TIME, INFINITY_LIFE_TIME) < 0) {
5232		nlmsg_cancel(skb, nlh);
5233		return -EMSGSIZE;
5234	}
5235
5236	nlmsg_end(skb, nlh);
5237	return 0;
5238}
5239
5240static int inet6_fill_ifacaddr(struct sk_buff *skb,
5241			       const struct ifacaddr6 *ifaca,
5242			       struct inet6_fill_args *args)
5243{
5244	struct net_device *dev = fib6_info_nh_dev(ifaca->aca_rt);
5245	int ifindex = dev ? dev->ifindex : 1;
5246	u8 scope = RT_SCOPE_UNIVERSE;
5247	struct nlmsghdr *nlh;
5248
5249	if (ipv6_addr_scope(&ifaca->aca_addr) & IFA_SITE)
5250		scope = RT_SCOPE_SITE;
5251
5252	nlh = nlmsg_put(skb, args->portid, args->seq, args->event,
5253			sizeof(struct ifaddrmsg), args->flags);
5254	if (!nlh)
5255		return -EMSGSIZE;
5256
5257	if (args->netnsid >= 0 &&
5258	    nla_put_s32(skb, IFA_TARGET_NETNSID, args->netnsid)) {
5259		nlmsg_cancel(skb, nlh);
5260		return -EMSGSIZE;
5261	}
5262
5263	put_ifaddrmsg(nlh, 128, IFA_F_PERMANENT, scope, ifindex);
5264	if (nla_put_in6_addr(skb, IFA_ANYCAST, &ifaca->aca_addr) < 0 ||
5265	    put_cacheinfo(skb, ifaca->aca_cstamp, READ_ONCE(ifaca->aca_tstamp),
5266			  INFINITY_LIFE_TIME, INFINITY_LIFE_TIME) < 0) {
5267		nlmsg_cancel(skb, nlh);
5268		return -EMSGSIZE;
5269	}
5270
5271	nlmsg_end(skb, nlh);
5272	return 0;
5273}
5274
5275/* called with rcu_read_lock() */
5276static int in6_dump_addrs(const struct inet6_dev *idev, struct sk_buff *skb,
5277			  struct netlink_callback *cb, int *s_ip_idx,
5278			  struct inet6_fill_args *fillargs)
5279{
5280	const struct ifmcaddr6 *ifmca;
5281	const struct ifacaddr6 *ifaca;
5282	int ip_idx = 0;
5283	int err = 0;
5284
5285	switch (fillargs->type) {
5286	case UNICAST_ADDR: {
5287		const struct inet6_ifaddr *ifa;
5288		fillargs->event = RTM_NEWADDR;
5289
5290		/* unicast address incl. temp addr */
5291		list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
5292			if (ip_idx < *s_ip_idx)
5293				goto next;
5294			err = inet6_fill_ifaddr(skb, ifa, fillargs);
5295			if (err < 0)
5296				break;
5297			nl_dump_check_consistent(cb, nlmsg_hdr(skb));
5298next:
5299			ip_idx++;
5300		}
5301		break;
5302	}
5303	case MULTICAST_ADDR:
5304		fillargs->event = RTM_GETMULTICAST;
5305
5306		/* multicast address */
5307		for (ifmca = rcu_dereference(idev->mc_list);
5308		     ifmca;
5309		     ifmca = rcu_dereference(ifmca->next), ip_idx++) {
5310			if (ip_idx < *s_ip_idx)
5311				continue;
5312			err = inet6_fill_ifmcaddr(skb, ifmca, fillargs);
5313			if (err < 0)
5314				break;
5315		}
5316		break;
5317	case ANYCAST_ADDR:
5318		fillargs->event = RTM_GETANYCAST;
5319		/* anycast address */
5320		for (ifaca = rcu_dereference(idev->ac_list); ifaca;
5321		     ifaca = rcu_dereference(ifaca->aca_next), ip_idx++) {
5322			if (ip_idx < *s_ip_idx)
5323				continue;
5324			err = inet6_fill_ifacaddr(skb, ifaca, fillargs);
5325			if (err < 0)
5326				break;
5327		}
5328		break;
5329	default:
5330		break;
5331	}
5332	*s_ip_idx = err ? ip_idx : 0;
5333	return err;
5334}
5335
5336static int inet6_valid_dump_ifaddr_req(const struct nlmsghdr *nlh,
5337				       struct inet6_fill_args *fillargs,
5338				       struct net **tgt_net, struct sock *sk,
5339				       struct netlink_callback *cb)
5340{
5341	struct netlink_ext_ack *extack = cb->extack;
5342	struct nlattr *tb[IFA_MAX+1];
5343	struct ifaddrmsg *ifm;
5344	int err, i;
5345
5346	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
5347		NL_SET_ERR_MSG_MOD(extack, "Invalid header for address dump request");
5348		return -EINVAL;
5349	}
5350
5351	ifm = nlmsg_data(nlh);
5352	if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) {
5353		NL_SET_ERR_MSG_MOD(extack, "Invalid values in header for address dump request");
5354		return -EINVAL;
5355	}
5356
5357	fillargs->ifindex = ifm->ifa_index;
5358	if (fillargs->ifindex) {
5359		cb->answer_flags |= NLM_F_DUMP_FILTERED;
5360		fillargs->flags |= NLM_F_DUMP_FILTERED;
5361	}
5362
5363	err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFA_MAX,
5364					    ifa_ipv6_policy, extack);
5365	if (err < 0)
5366		return err;
5367
5368	for (i = 0; i <= IFA_MAX; ++i) {
5369		if (!tb[i])
5370			continue;
5371
5372		if (i == IFA_TARGET_NETNSID) {
5373			struct net *net;
5374
5375			fillargs->netnsid = nla_get_s32(tb[i]);
5376			net = rtnl_get_net_ns_capable(sk, fillargs->netnsid);
5377			if (IS_ERR(net)) {
5378				fillargs->netnsid = -1;
5379				NL_SET_ERR_MSG_MOD(extack, "Invalid target network namespace id");
5380				return PTR_ERR(net);
5381			}
5382			*tgt_net = net;
5383		} else {
5384			NL_SET_ERR_MSG_MOD(extack, "Unsupported attribute in dump request");
5385			return -EINVAL;
5386		}
5387	}
5388
5389	return 0;
5390}
5391
5392static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
5393			   enum addr_type_t type)
5394{
5395	struct net *tgt_net = sock_net(skb->sk);
5396	const struct nlmsghdr *nlh = cb->nlh;
5397	struct inet6_fill_args fillargs = {
5398		.portid = NETLINK_CB(cb->skb).portid,
5399		.seq = cb->nlh->nlmsg_seq,
5400		.flags = NLM_F_MULTI,
5401		.netnsid = -1,
5402		.type = type,
5403	};
5404	struct {
5405		unsigned long ifindex;
5406		int ip_idx;
5407	} *ctx = (void *)cb->ctx;
5408	struct net_device *dev;
5409	struct inet6_dev *idev;
5410	int err = 0;
5411
5412	rcu_read_lock();
5413	if (cb->strict_check) {
5414		err = inet6_valid_dump_ifaddr_req(nlh, &fillargs, &tgt_net,
5415						  skb->sk, cb);
5416		if (err < 0)
5417			goto done;
5418
5419		err = 0;
5420		if (fillargs.ifindex) {
5421			dev = dev_get_by_index_rcu(tgt_net, fillargs.ifindex);
5422			if (!dev) {
5423				err = -ENODEV;
5424				goto done;
5425			}
5426			idev = __in6_dev_get(dev);
5427			if (idev)
5428				err = in6_dump_addrs(idev, skb, cb,
5429						     &ctx->ip_idx,
5430						     &fillargs);
5431			goto done;
5432		}
5433	}
5434
5435	cb->seq = inet6_base_seq(tgt_net);
5436	for_each_netdev_dump(tgt_net, dev, ctx->ifindex) {
5437		idev = __in6_dev_get(dev);
5438		if (!idev)
5439			continue;
5440		err = in6_dump_addrs(idev, skb, cb, &ctx->ip_idx,
5441				     &fillargs);
5442		if (err < 0)
5443			goto done;
5444	}
5445done:
5446	rcu_read_unlock();
5447	if (fillargs.netnsid >= 0)
5448		put_net(tgt_net);
5449
5450	return err;
5451}
5452
5453static int inet6_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
5454{
5455	enum addr_type_t type = UNICAST_ADDR;
5456
5457	return inet6_dump_addr(skb, cb, type);
5458}
5459
5460static int inet6_dump_ifmcaddr(struct sk_buff *skb, struct netlink_callback *cb)
5461{
5462	enum addr_type_t type = MULTICAST_ADDR;
5463
5464	return inet6_dump_addr(skb, cb, type);
5465}
5466
5467
5468static int inet6_dump_ifacaddr(struct sk_buff *skb, struct netlink_callback *cb)
5469{
5470	enum addr_type_t type = ANYCAST_ADDR;
5471
5472	return inet6_dump_addr(skb, cb, type);
5473}
5474
5475static int inet6_rtm_valid_getaddr_req(struct sk_buff *skb,
5476				       const struct nlmsghdr *nlh,
5477				       struct nlattr **tb,
5478				       struct netlink_ext_ack *extack)
5479{
5480	struct ifaddrmsg *ifm;
5481	int i, err;
5482
5483	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
5484		NL_SET_ERR_MSG_MOD(extack, "Invalid header for get address request");
5485		return -EINVAL;
5486	}
5487
5488	if (!netlink_strict_get_check(skb))
5489		return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
5490					      ifa_ipv6_policy, extack);
5491
5492	ifm = nlmsg_data(nlh);
5493	if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) {
5494		NL_SET_ERR_MSG_MOD(extack, "Invalid values in header for get address request");
5495		return -EINVAL;
5496	}
5497
5498	err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFA_MAX,
5499					    ifa_ipv6_policy, extack);
5500	if (err)
5501		return err;
5502
5503	for (i = 0; i <= IFA_MAX; i++) {
5504		if (!tb[i])
5505			continue;
5506
5507		switch (i) {
5508		case IFA_TARGET_NETNSID:
5509		case IFA_ADDRESS:
5510		case IFA_LOCAL:
5511			break;
5512		default:
5513			NL_SET_ERR_MSG_MOD(extack, "Unsupported attribute in get address request");
5514			return -EINVAL;
5515		}
5516	}
5517
5518	return 0;
5519}
5520
5521static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh,
5522			     struct netlink_ext_ack *extack)
5523{
5524	struct net *tgt_net = sock_net(in_skb->sk);
5525	struct inet6_fill_args fillargs = {
5526		.portid = NETLINK_CB(in_skb).portid,
5527		.seq = nlh->nlmsg_seq,
5528		.event = RTM_NEWADDR,
5529		.flags = 0,
5530		.netnsid = -1,
5531	};
5532	struct ifaddrmsg *ifm;
5533	struct nlattr *tb[IFA_MAX+1];
5534	struct in6_addr *addr = NULL, *peer;
5535	struct net_device *dev = NULL;
5536	struct inet6_ifaddr *ifa;
5537	struct sk_buff *skb;
5538	int err;
5539
5540	err = inet6_rtm_valid_getaddr_req(in_skb, nlh, tb, extack);
5541	if (err < 0)
5542		return err;
5543
5544	if (tb[IFA_TARGET_NETNSID]) {
5545		fillargs.netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
5546
5547		tgt_net = rtnl_get_net_ns_capable(NETLINK_CB(in_skb).sk,
5548						  fillargs.netnsid);
5549		if (IS_ERR(tgt_net))
5550			return PTR_ERR(tgt_net);
5551	}
5552
5553	addr = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL], &peer);
5554	if (!addr) {
5555		err = -EINVAL;
5556		goto errout;
5557	}
5558	ifm = nlmsg_data(nlh);
5559	if (ifm->ifa_index)
5560		dev = dev_get_by_index(tgt_net, ifm->ifa_index);
5561
5562	ifa = ipv6_get_ifaddr(tgt_net, addr, dev, 1);
5563	if (!ifa) {
5564		err = -EADDRNOTAVAIL;
5565		goto errout;
5566	}
5567
5568	skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_KERNEL);
5569	if (!skb) {
5570		err = -ENOBUFS;
5571		goto errout_ifa;
5572	}
5573
5574	err = inet6_fill_ifaddr(skb, ifa, &fillargs);
5575	if (err < 0) {
5576		/* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */
5577		WARN_ON(err == -EMSGSIZE);
5578		kfree_skb(skb);
5579		goto errout_ifa;
5580	}
5581	err = rtnl_unicast(skb, tgt_net, NETLINK_CB(in_skb).portid);
5582errout_ifa:
5583	in6_ifa_put(ifa);
5584errout:
5585	dev_put(dev);
5586	if (fillargs.netnsid >= 0)
5587		put_net(tgt_net);
5588
5589	return err;
5590}
5591
5592static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
5593{
5594	struct sk_buff *skb;
5595	struct net *net = dev_net(ifa->idev->dev);
5596	struct inet6_fill_args fillargs = {
5597		.portid = 0,
5598		.seq = 0,
5599		.event = event,
5600		.flags = 0,
5601		.netnsid = -1,
5602	};
5603	int err = -ENOBUFS;
5604
5605	skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC);
5606	if (!skb)
5607		goto errout;
5608
5609	err = inet6_fill_ifaddr(skb, ifa, &fillargs);
5610	if (err < 0) {
5611		/* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */
5612		WARN_ON(err == -EMSGSIZE);
5613		kfree_skb(skb);
5614		goto errout;
5615	}
5616	rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
5617	return;
5618errout:
5619	if (err < 0)
5620		rtnl_set_sk_err(net, RTNLGRP_IPV6_IFADDR, err);
5621}
5622
5623static void ipv6_store_devconf(const struct ipv6_devconf *cnf,
5624			       __s32 *array, int bytes)
5625{
5626	BUG_ON(bytes < (DEVCONF_MAX * 4));
5627
5628	memset(array, 0, bytes);
5629	array[DEVCONF_FORWARDING] = READ_ONCE(cnf->forwarding);
5630	array[DEVCONF_HOPLIMIT] = READ_ONCE(cnf->hop_limit);
5631	array[DEVCONF_MTU6] = READ_ONCE(cnf->mtu6);
5632	array[DEVCONF_ACCEPT_RA] = READ_ONCE(cnf->accept_ra);
5633	array[DEVCONF_ACCEPT_REDIRECTS] = READ_ONCE(cnf->accept_redirects);
5634	array[DEVCONF_AUTOCONF] = READ_ONCE(cnf->autoconf);
5635	array[DEVCONF_DAD_TRANSMITS] = READ_ONCE(cnf->dad_transmits);
5636	array[DEVCONF_RTR_SOLICITS] = READ_ONCE(cnf->rtr_solicits);
5637	array[DEVCONF_RTR_SOLICIT_INTERVAL] =
5638		jiffies_to_msecs(READ_ONCE(cnf->rtr_solicit_interval));
5639	array[DEVCONF_RTR_SOLICIT_MAX_INTERVAL] =
5640		jiffies_to_msecs(READ_ONCE(cnf->rtr_solicit_max_interval));
5641	array[DEVCONF_RTR_SOLICIT_DELAY] =
5642		jiffies_to_msecs(READ_ONCE(cnf->rtr_solicit_delay));
5643	array[DEVCONF_FORCE_MLD_VERSION] = READ_ONCE(cnf->force_mld_version);
5644	array[DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL] =
5645		jiffies_to_msecs(READ_ONCE(cnf->mldv1_unsolicited_report_interval));
5646	array[DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL] =
5647		jiffies_to_msecs(READ_ONCE(cnf->mldv2_unsolicited_report_interval));
5648	array[DEVCONF_USE_TEMPADDR] = READ_ONCE(cnf->use_tempaddr);
5649	array[DEVCONF_TEMP_VALID_LFT] = READ_ONCE(cnf->temp_valid_lft);
5650	array[DEVCONF_TEMP_PREFERED_LFT] = READ_ONCE(cnf->temp_prefered_lft);
5651	array[DEVCONF_REGEN_MAX_RETRY] = READ_ONCE(cnf->regen_max_retry);
5652	array[DEVCONF_MAX_DESYNC_FACTOR] = READ_ONCE(cnf->max_desync_factor);
5653	array[DEVCONF_MAX_ADDRESSES] = READ_ONCE(cnf->max_addresses);
5654	array[DEVCONF_ACCEPT_RA_DEFRTR] = READ_ONCE(cnf->accept_ra_defrtr);
5655	array[DEVCONF_RA_DEFRTR_METRIC] = READ_ONCE(cnf->ra_defrtr_metric);
5656	array[DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT] =
5657		READ_ONCE(cnf->accept_ra_min_hop_limit);
5658	array[DEVCONF_ACCEPT_RA_PINFO] = READ_ONCE(cnf->accept_ra_pinfo);
5659#ifdef CONFIG_IPV6_ROUTER_PREF
5660	array[DEVCONF_ACCEPT_RA_RTR_PREF] = READ_ONCE(cnf->accept_ra_rtr_pref);
5661	array[DEVCONF_RTR_PROBE_INTERVAL] =
5662		jiffies_to_msecs(READ_ONCE(cnf->rtr_probe_interval));
5663#ifdef CONFIG_IPV6_ROUTE_INFO
5664	array[DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN] =
5665		READ_ONCE(cnf->accept_ra_rt_info_min_plen);
5666	array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] =
5667		READ_ONCE(cnf->accept_ra_rt_info_max_plen);
5668#endif
5669#endif
5670	array[DEVCONF_PROXY_NDP] = READ_ONCE(cnf->proxy_ndp);
5671	array[DEVCONF_ACCEPT_SOURCE_ROUTE] =
5672		READ_ONCE(cnf->accept_source_route);
5673#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
5674	array[DEVCONF_OPTIMISTIC_DAD] = READ_ONCE(cnf->optimistic_dad);
5675	array[DEVCONF_USE_OPTIMISTIC] = READ_ONCE(cnf->use_optimistic);
5676#endif
5677#ifdef CONFIG_IPV6_MROUTE
5678	array[DEVCONF_MC_FORWARDING] = atomic_read(&cnf->mc_forwarding);
5679#endif
5680	array[DEVCONF_DISABLE_IPV6] = READ_ONCE(cnf->disable_ipv6);
5681	array[DEVCONF_ACCEPT_DAD] = READ_ONCE(cnf->accept_dad);
5682	array[DEVCONF_FORCE_TLLAO] = READ_ONCE(cnf->force_tllao);
5683	array[DEVCONF_NDISC_NOTIFY] = READ_ONCE(cnf->ndisc_notify);
5684	array[DEVCONF_SUPPRESS_FRAG_NDISC] =
5685		READ_ONCE(cnf->suppress_frag_ndisc);
5686	array[DEVCONF_ACCEPT_RA_FROM_LOCAL] =
5687		READ_ONCE(cnf->accept_ra_from_local);
5688	array[DEVCONF_ACCEPT_RA_MTU] = READ_ONCE(cnf->accept_ra_mtu);
5689	array[DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN] =
5690		READ_ONCE(cnf->ignore_routes_with_linkdown);
5691	/* we omit DEVCONF_STABLE_SECRET for now */
5692	array[DEVCONF_USE_OIF_ADDRS_ONLY] = READ_ONCE(cnf->use_oif_addrs_only);
5693	array[DEVCONF_DROP_UNICAST_IN_L2_MULTICAST] =
5694		READ_ONCE(cnf->drop_unicast_in_l2_multicast);
5695	array[DEVCONF_DROP_UNSOLICITED_NA] = READ_ONCE(cnf->drop_unsolicited_na);
5696	array[DEVCONF_KEEP_ADDR_ON_DOWN] = READ_ONCE(cnf->keep_addr_on_down);
5697	array[DEVCONF_SEG6_ENABLED] = READ_ONCE(cnf->seg6_enabled);
5698#ifdef CONFIG_IPV6_SEG6_HMAC
5699	array[DEVCONF_SEG6_REQUIRE_HMAC] = READ_ONCE(cnf->seg6_require_hmac);
5700#endif
5701	array[DEVCONF_ENHANCED_DAD] = READ_ONCE(cnf->enhanced_dad);
5702	array[DEVCONF_ADDR_GEN_MODE] = READ_ONCE(cnf->addr_gen_mode);
5703	array[DEVCONF_DISABLE_POLICY] = READ_ONCE(cnf->disable_policy);
5704	array[DEVCONF_NDISC_TCLASS] = READ_ONCE(cnf->ndisc_tclass);
5705	array[DEVCONF_RPL_SEG_ENABLED] = READ_ONCE(cnf->rpl_seg_enabled);
5706	array[DEVCONF_IOAM6_ENABLED] = READ_ONCE(cnf->ioam6_enabled);
5707	array[DEVCONF_IOAM6_ID] = READ_ONCE(cnf->ioam6_id);
5708	array[DEVCONF_IOAM6_ID_WIDE] = READ_ONCE(cnf->ioam6_id_wide);
5709	array[DEVCONF_NDISC_EVICT_NOCARRIER] =
5710		READ_ONCE(cnf->ndisc_evict_nocarrier);
5711	array[DEVCONF_ACCEPT_UNTRACKED_NA] =
5712		READ_ONCE(cnf->accept_untracked_na);
5713	array[DEVCONF_ACCEPT_RA_MIN_LFT] = READ_ONCE(cnf->accept_ra_min_lft);
5714}
5715
5716static inline size_t inet6_ifla6_size(void)
5717{
5718	return nla_total_size(4) /* IFLA_INET6_FLAGS */
5719	     + nla_total_size(sizeof(struct ifla_cacheinfo))
5720	     + nla_total_size(DEVCONF_MAX * 4) /* IFLA_INET6_CONF */
5721	     + nla_total_size(IPSTATS_MIB_MAX * 8) /* IFLA_INET6_STATS */
5722	     + nla_total_size(ICMP6_MIB_MAX * 8) /* IFLA_INET6_ICMP6STATS */
5723	     + nla_total_size(sizeof(struct in6_addr)) /* IFLA_INET6_TOKEN */
5724	     + nla_total_size(1) /* IFLA_INET6_ADDR_GEN_MODE */
5725	     + nla_total_size(4) /* IFLA_INET6_RA_MTU */
5726	     + 0;
5727}
5728
5729static inline size_t inet6_if_nlmsg_size(void)
5730{
5731	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
5732	       + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
5733	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
5734	       + nla_total_size(4) /* IFLA_MTU */
5735	       + nla_total_size(4) /* IFLA_LINK */
5736	       + nla_total_size(1) /* IFLA_OPERSTATE */
5737	       + nla_total_size(inet6_ifla6_size()); /* IFLA_PROTINFO */
5738}
5739
5740static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib,
5741					int bytes)
5742{
5743	int i;
5744	int pad = bytes - sizeof(u64) * ICMP6_MIB_MAX;
5745	BUG_ON(pad < 0);
5746
5747	/* Use put_unaligned() because stats may not be aligned for u64. */
5748	put_unaligned(ICMP6_MIB_MAX, &stats[0]);
5749	for (i = 1; i < ICMP6_MIB_MAX; i++)
5750		put_unaligned(atomic_long_read(&mib[i]), &stats[i]);
5751
5752	memset(&stats[ICMP6_MIB_MAX], 0, pad);
5753}
5754
5755static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib,
5756					int bytes, size_t syncpoff)
5757{
5758	int i, c;
5759	u64 buff[IPSTATS_MIB_MAX];
5760	int pad = bytes - sizeof(u64) * IPSTATS_MIB_MAX;
5761
5762	BUG_ON(pad < 0);
5763
5764	memset(buff, 0, sizeof(buff));
5765	buff[0] = IPSTATS_MIB_MAX;
5766
5767	for_each_possible_cpu(c) {
5768		for (i = 1; i < IPSTATS_MIB_MAX; i++)
5769			buff[i] += snmp_get_cpu_field64(mib, c, i, syncpoff);
5770	}
5771
5772	memcpy(stats, buff, IPSTATS_MIB_MAX * sizeof(u64));
5773	memset(&stats[IPSTATS_MIB_MAX], 0, pad);
5774}
5775
5776static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
5777			     int bytes)
5778{
5779	switch (attrtype) {
5780	case IFLA_INET6_STATS:
5781		__snmp6_fill_stats64(stats, idev->stats.ipv6, bytes,
5782				     offsetof(struct ipstats_mib, syncp));
5783		break;
5784	case IFLA_INET6_ICMP6STATS:
5785		__snmp6_fill_statsdev(stats, idev->stats.icmpv6dev->mibs, bytes);
5786		break;
5787	}
5788}
5789
5790static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev,
5791				  u32 ext_filter_mask)
5792{
5793	struct ifla_cacheinfo ci;
5794	struct nlattr *nla;
5795	u32 ra_mtu;
5796
5797	if (nla_put_u32(skb, IFLA_INET6_FLAGS, READ_ONCE(idev->if_flags)))
5798		goto nla_put_failure;
5799	ci.max_reasm_len = IPV6_MAXPLEN;
5800	ci.tstamp = cstamp_delta(READ_ONCE(idev->tstamp));
5801	ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time);
5802	ci.retrans_time = jiffies_to_msecs(NEIGH_VAR(idev->nd_parms, RETRANS_TIME));
5803	if (nla_put(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci))
5804		goto nla_put_failure;
5805	nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32));
5806	if (!nla)
5807		goto nla_put_failure;
5808	ipv6_store_devconf(&idev->cnf, nla_data(nla), nla_len(nla));
5809
5810	/* XXX - MC not implemented */
5811
5812	if (ext_filter_mask & RTEXT_FILTER_SKIP_STATS)
5813		return 0;
5814
5815	nla = nla_reserve(skb, IFLA_INET6_STATS, IPSTATS_MIB_MAX * sizeof(u64));
5816	if (!nla)
5817		goto nla_put_failure;
5818	snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_STATS, nla_len(nla));
5819
5820	nla = nla_reserve(skb, IFLA_INET6_ICMP6STATS, ICMP6_MIB_MAX * sizeof(u64));
5821	if (!nla)
5822		goto nla_put_failure;
5823	snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_ICMP6STATS, nla_len(nla));
5824
5825	nla = nla_reserve(skb, IFLA_INET6_TOKEN, sizeof(struct in6_addr));
5826	if (!nla)
5827		goto nla_put_failure;
5828	read_lock_bh(&idev->lock);
5829	memcpy(nla_data(nla), idev->token.s6_addr, nla_len(nla));
5830	read_unlock_bh(&idev->lock);
5831
5832	if (nla_put_u8(skb, IFLA_INET6_ADDR_GEN_MODE,
5833		       READ_ONCE(idev->cnf.addr_gen_mode)))
5834		goto nla_put_failure;
5835
5836	ra_mtu = READ_ONCE(idev->ra_mtu);
5837	if (ra_mtu && nla_put_u32(skb, IFLA_INET6_RA_MTU, ra_mtu))
5838		goto nla_put_failure;
5839
5840	return 0;
5841
5842nla_put_failure:
5843	return -EMSGSIZE;
5844}
5845
5846static size_t inet6_get_link_af_size(const struct net_device *dev,
5847				     u32 ext_filter_mask)
5848{
5849	if (!__in6_dev_get(dev))
5850		return 0;
5851
5852	return inet6_ifla6_size();
5853}
5854
5855static int inet6_fill_link_af(struct sk_buff *skb, const struct net_device *dev,
5856			      u32 ext_filter_mask)
5857{
5858	struct inet6_dev *idev = __in6_dev_get(dev);
5859
5860	if (!idev)
5861		return -ENODATA;
5862
5863	if (inet6_fill_ifla6_attrs(skb, idev, ext_filter_mask) < 0)
5864		return -EMSGSIZE;
5865
5866	return 0;
5867}
5868
5869static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token,
5870			     struct netlink_ext_ack *extack)
5871{
5872	struct inet6_ifaddr *ifp;
5873	struct net_device *dev = idev->dev;
5874	bool clear_token, update_rs = false;
5875	struct in6_addr ll_addr;
5876
5877	ASSERT_RTNL();
5878
5879	if (!token)
5880		return -EINVAL;
5881
5882	if (dev->flags & IFF_LOOPBACK) {
5883		NL_SET_ERR_MSG_MOD(extack, "Device is loopback");
5884		return -EINVAL;
5885	}
5886
5887	if (dev->flags & IFF_NOARP) {
5888		NL_SET_ERR_MSG_MOD(extack,
5889				   "Device does not do neighbour discovery");
5890		return -EINVAL;
5891	}
5892
5893	if (!ipv6_accept_ra(idev)) {
5894		NL_SET_ERR_MSG_MOD(extack,
5895				   "Router advertisement is disabled on device");
5896		return -EINVAL;
5897	}
5898
5899	if (READ_ONCE(idev->cnf.rtr_solicits) == 0) {
5900		NL_SET_ERR_MSG(extack,
5901			       "Router solicitation is disabled on device");
5902		return -EINVAL;
5903	}
5904
5905	write_lock_bh(&idev->lock);
5906
5907	BUILD_BUG_ON(sizeof(token->s6_addr) != 16);
5908	memcpy(idev->token.s6_addr + 8, token->s6_addr + 8, 8);
5909
5910	write_unlock_bh(&idev->lock);
5911
5912	clear_token = ipv6_addr_any(token);
5913	if (clear_token)
5914		goto update_lft;
5915
5916	if (!idev->dead && (idev->if_flags & IF_READY) &&
5917	    !ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE |
5918			     IFA_F_OPTIMISTIC)) {
5919		/* If we're not ready, then normal ifup will take care
5920		 * of this. Otherwise, we need to request our rs here.
5921		 */
5922		ndisc_send_rs(dev, &ll_addr, &in6addr_linklocal_allrouters);
5923		update_rs = true;
5924	}
5925
5926update_lft:
5927	write_lock_bh(&idev->lock);
5928
5929	if (update_rs) {
5930		idev->if_flags |= IF_RS_SENT;
5931		idev->rs_interval = rfc3315_s14_backoff_init(
5932			READ_ONCE(idev->cnf.rtr_solicit_interval));
5933		idev->rs_probes = 1;
5934		addrconf_mod_rs_timer(idev, idev->rs_interval);
5935	}
5936
5937	/* Well, that's kinda nasty ... */
5938	list_for_each_entry(ifp, &idev->addr_list, if_list) {
5939		spin_lock(&ifp->lock);
5940		if (ifp->tokenized) {
5941			ifp->valid_lft = 0;
5942			ifp->prefered_lft = 0;
5943		}
5944		spin_unlock(&ifp->lock);
5945	}
5946
5947	write_unlock_bh(&idev->lock);
5948	inet6_ifinfo_notify(RTM_NEWLINK, idev);
5949	addrconf_verify_rtnl(dev_net(dev));
5950	return 0;
5951}
5952
5953static const struct nla_policy inet6_af_policy[IFLA_INET6_MAX + 1] = {
5954	[IFLA_INET6_ADDR_GEN_MODE]	= { .type = NLA_U8 },
5955	[IFLA_INET6_TOKEN]		= { .len = sizeof(struct in6_addr) },
5956	[IFLA_INET6_RA_MTU]		= { .type = NLA_REJECT,
5957					    .reject_message =
5958						"IFLA_INET6_RA_MTU can not be set" },
5959};
5960
5961static int check_addr_gen_mode(int mode)
5962{
5963	if (mode != IN6_ADDR_GEN_MODE_EUI64 &&
5964	    mode != IN6_ADDR_GEN_MODE_NONE &&
5965	    mode != IN6_ADDR_GEN_MODE_STABLE_PRIVACY &&
5966	    mode != IN6_ADDR_GEN_MODE_RANDOM)
5967		return -EINVAL;
5968	return 1;
5969}
5970
5971static int check_stable_privacy(struct inet6_dev *idev, struct net *net,
5972				int mode)
5973{
5974	if (mode == IN6_ADDR_GEN_MODE_STABLE_PRIVACY &&
5975	    !idev->cnf.stable_secret.initialized &&
5976	    !net->ipv6.devconf_dflt->stable_secret.initialized)
5977		return -EINVAL;
5978	return 1;
5979}
5980
5981static int inet6_validate_link_af(const struct net_device *dev,
5982				  const struct nlattr *nla,
5983				  struct netlink_ext_ack *extack)
5984{
5985	struct nlattr *tb[IFLA_INET6_MAX + 1];
5986	struct inet6_dev *idev = NULL;
5987	int err;
5988
5989	if (dev) {
5990		idev = __in6_dev_get(dev);
5991		if (!idev)
5992			return -EAFNOSUPPORT;
5993	}
5994
5995	err = nla_parse_nested_deprecated(tb, IFLA_INET6_MAX, nla,
5996					  inet6_af_policy, extack);
5997	if (err)
5998		return err;
5999
6000	if (!tb[IFLA_INET6_TOKEN] && !tb[IFLA_INET6_ADDR_GEN_MODE])
6001		return -EINVAL;
6002
6003	if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
6004		u8 mode = nla_get_u8(tb[IFLA_INET6_ADDR_GEN_MODE]);
6005
6006		if (check_addr_gen_mode(mode) < 0)
6007			return -EINVAL;
6008		if (dev && check_stable_privacy(idev, dev_net(dev), mode) < 0)
6009			return -EINVAL;
6010	}
6011
6012	return 0;
6013}
6014
6015static int inet6_set_link_af(struct net_device *dev, const struct nlattr *nla,
6016			     struct netlink_ext_ack *extack)
6017{
6018	struct inet6_dev *idev = __in6_dev_get(dev);
6019	struct nlattr *tb[IFLA_INET6_MAX + 1];
6020	int err;
6021
6022	if (!idev)
6023		return -EAFNOSUPPORT;
6024
6025	if (nla_parse_nested_deprecated(tb, IFLA_INET6_MAX, nla, NULL, NULL) < 0)
6026		return -EINVAL;
6027
6028	if (tb[IFLA_INET6_TOKEN]) {
6029		err = inet6_set_iftoken(idev, nla_data(tb[IFLA_INET6_TOKEN]),
6030					extack);
6031		if (err)
6032			return err;
6033	}
6034
6035	if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
6036		u8 mode = nla_get_u8(tb[IFLA_INET6_ADDR_GEN_MODE]);
6037
6038		WRITE_ONCE(idev->cnf.addr_gen_mode, mode);
6039	}
6040
6041	return 0;
6042}
6043
6044static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev,
6045			     u32 portid, u32 seq, int event, unsigned int flags)
6046{
6047	struct net_device *dev = idev->dev;
6048	struct ifinfomsg *hdr;
6049	struct nlmsghdr *nlh;
6050	int ifindex, iflink;
6051	void *protoinfo;
6052
6053	nlh = nlmsg_put(skb, portid, seq, event, sizeof(*hdr), flags);
6054	if (!nlh)
6055		return -EMSGSIZE;
6056
6057	hdr = nlmsg_data(nlh);
6058	hdr->ifi_family = AF_INET6;
6059	hdr->__ifi_pad = 0;
6060	hdr->ifi_type = dev->type;
6061	ifindex = READ_ONCE(dev->ifindex);
6062	hdr->ifi_index = ifindex;
6063	hdr->ifi_flags = dev_get_flags(dev);
6064	hdr->ifi_change = 0;
6065
6066	iflink = dev_get_iflink(dev);
6067	if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
6068	    (dev->addr_len &&
6069	     nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
6070	    nla_put_u32(skb, IFLA_MTU, READ_ONCE(dev->mtu)) ||
6071	    (ifindex != iflink &&
6072	     nla_put_u32(skb, IFLA_LINK, iflink)) ||
6073	    nla_put_u8(skb, IFLA_OPERSTATE,
6074		       netif_running(dev) ? READ_ONCE(dev->operstate) : IF_OPER_DOWN))
6075		goto nla_put_failure;
6076	protoinfo = nla_nest_start_noflag(skb, IFLA_PROTINFO);
6077	if (!protoinfo)
6078		goto nla_put_failure;
6079
6080	if (inet6_fill_ifla6_attrs(skb, idev, 0) < 0)
6081		goto nla_put_failure;
6082
6083	nla_nest_end(skb, protoinfo);
6084	nlmsg_end(skb, nlh);
6085	return 0;
6086
6087nla_put_failure:
6088	nlmsg_cancel(skb, nlh);
6089	return -EMSGSIZE;
6090}
6091
6092static int inet6_valid_dump_ifinfo(const struct nlmsghdr *nlh,
6093				   struct netlink_ext_ack *extack)
6094{
6095	struct ifinfomsg *ifm;
6096
6097	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
6098		NL_SET_ERR_MSG_MOD(extack, "Invalid header for link dump request");
6099		return -EINVAL;
6100	}
6101
6102	if (nlmsg_attrlen(nlh, sizeof(*ifm))) {
6103		NL_SET_ERR_MSG_MOD(extack, "Invalid data after header");
6104		return -EINVAL;
6105	}
6106
6107	ifm = nlmsg_data(nlh);
6108	if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
6109	    ifm->ifi_change || ifm->ifi_index) {
6110		NL_SET_ERR_MSG_MOD(extack, "Invalid values in header for dump request");
6111		return -EINVAL;
6112	}
6113
6114	return 0;
6115}
6116
6117static int inet6_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
6118{
6119	struct net *net = sock_net(skb->sk);
6120	struct {
6121		unsigned long ifindex;
6122	} *ctx = (void *)cb->ctx;
6123	struct net_device *dev;
6124	struct inet6_dev *idev;
6125	int err;
6126
6127	/* only requests using strict checking can pass data to
6128	 * influence the dump
6129	 */
6130	if (cb->strict_check) {
6131		err = inet6_valid_dump_ifinfo(cb->nlh, cb->extack);
6132
6133		if (err < 0)
6134			return err;
6135	}
6136
6137	err = 0;
6138	rcu_read_lock();
6139	for_each_netdev_dump(net, dev, ctx->ifindex) {
6140		idev = __in6_dev_get(dev);
6141		if (!idev)
6142			continue;
6143		err = inet6_fill_ifinfo(skb, idev,
6144					NETLINK_CB(cb->skb).portid,
6145					cb->nlh->nlmsg_seq,
6146					RTM_NEWLINK, NLM_F_MULTI);
6147		if (err < 0)
6148			break;
6149	}
6150	rcu_read_unlock();
6151
6152	return err;
6153}
6154
6155void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
6156{
6157	struct sk_buff *skb;
6158	struct net *net = dev_net(idev->dev);
6159	int err = -ENOBUFS;
6160
6161	skb = nlmsg_new(inet6_if_nlmsg_size(), GFP_ATOMIC);
6162	if (!skb)
6163		goto errout;
6164
6165	err = inet6_fill_ifinfo(skb, idev, 0, 0, event, 0);
6166	if (err < 0) {
6167		/* -EMSGSIZE implies BUG in inet6_if_nlmsg_size() */
6168		WARN_ON(err == -EMSGSIZE);
6169		kfree_skb(skb);
6170		goto errout;
6171	}
6172	rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFINFO, NULL, GFP_ATOMIC);
6173	return;
6174errout:
6175	if (err < 0)
6176		rtnl_set_sk_err(net, RTNLGRP_IPV6_IFINFO, err);
6177}
6178
6179static inline size_t inet6_prefix_nlmsg_size(void)
6180{
6181	return NLMSG_ALIGN(sizeof(struct prefixmsg))
6182	       + nla_total_size(sizeof(struct in6_addr))
6183	       + nla_total_size(sizeof(struct prefix_cacheinfo));
6184}
6185
6186static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
6187			     struct prefix_info *pinfo, u32 portid, u32 seq,
6188			     int event, unsigned int flags)
6189{
6190	struct prefixmsg *pmsg;
6191	struct nlmsghdr *nlh;
6192	struct prefix_cacheinfo	ci;
6193
6194	nlh = nlmsg_put(skb, portid, seq, event, sizeof(*pmsg), flags);
6195	if (!nlh)
6196		return -EMSGSIZE;
6197
6198	pmsg = nlmsg_data(nlh);
6199	pmsg->prefix_family = AF_INET6;
6200	pmsg->prefix_pad1 = 0;
6201	pmsg->prefix_pad2 = 0;
6202	pmsg->prefix_ifindex = idev->dev->ifindex;
6203	pmsg->prefix_len = pinfo->prefix_len;
6204	pmsg->prefix_type = pinfo->type;
6205	pmsg->prefix_pad3 = 0;
6206	pmsg->prefix_flags = pinfo->flags;
6207
6208	if (nla_put(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix))
6209		goto nla_put_failure;
6210	ci.preferred_time = ntohl(pinfo->prefered);
6211	ci.valid_time = ntohl(pinfo->valid);
6212	if (nla_put(skb, PREFIX_CACHEINFO, sizeof(ci), &ci))
6213		goto nla_put_failure;
6214	nlmsg_end(skb, nlh);
6215	return 0;
6216
6217nla_put_failure:
6218	nlmsg_cancel(skb, nlh);
6219	return -EMSGSIZE;
6220}
6221
6222static void inet6_prefix_notify(int event, struct inet6_dev *idev,
6223			 struct prefix_info *pinfo)
6224{
6225	struct sk_buff *skb;
6226	struct net *net = dev_net(idev->dev);
6227	int err = -ENOBUFS;
6228
6229	skb = nlmsg_new(inet6_prefix_nlmsg_size(), GFP_ATOMIC);
6230	if (!skb)
6231		goto errout;
6232
6233	err = inet6_fill_prefix(skb, idev, pinfo, 0, 0, event, 0);
6234	if (err < 0) {
6235		/* -EMSGSIZE implies BUG in inet6_prefix_nlmsg_size() */
6236		WARN_ON(err == -EMSGSIZE);
6237		kfree_skb(skb);
6238		goto errout;
6239	}
6240	rtnl_notify(skb, net, 0, RTNLGRP_IPV6_PREFIX, NULL, GFP_ATOMIC);
6241	return;
6242errout:
6243	if (err < 0)
6244		rtnl_set_sk_err(net, RTNLGRP_IPV6_PREFIX, err);
6245}
6246
6247static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
6248{
6249	struct net *net = dev_net(ifp->idev->dev);
6250
6251	if (event)
6252		ASSERT_RTNL();
6253
6254	inet6_ifa_notify(event ? : RTM_NEWADDR, ifp);
6255
6256	switch (event) {
6257	case RTM_NEWADDR:
6258		/*
6259		 * If the address was optimistic we inserted the route at the
6260		 * start of our DAD process, so we don't need to do it again.
6261		 * If the device was taken down in the middle of the DAD
6262		 * cycle there is a race where we could get here without a
6263		 * host route, so nothing to insert. That will be fixed when
6264		 * the device is brought up.
6265		 */
6266		if (ifp->rt && !rcu_access_pointer(ifp->rt->fib6_node)) {
6267			ip6_ins_rt(net, ifp->rt);
6268		} else if (!ifp->rt && (ifp->idev->dev->flags & IFF_UP)) {
6269			pr_warn("BUG: Address %pI6c on device %s is missing its host route.\n",
6270				&ifp->addr, ifp->idev->dev->name);
6271		}
6272
6273		if (ifp->idev->cnf.forwarding)
6274			addrconf_join_anycast(ifp);
6275		if (!ipv6_addr_any(&ifp->peer_addr))
6276			addrconf_prefix_route(&ifp->peer_addr, 128,
6277					      ifp->rt_priority, ifp->idev->dev,
6278					      0, 0, GFP_ATOMIC);
6279		break;
6280	case RTM_DELADDR:
6281		if (ifp->idev->cnf.forwarding)
6282			addrconf_leave_anycast(ifp);
6283		addrconf_leave_solict(ifp->idev, &ifp->addr);
6284		if (!ipv6_addr_any(&ifp->peer_addr)) {
6285			struct fib6_info *rt;
6286
6287			rt = addrconf_get_prefix_route(&ifp->peer_addr, 128,
6288						       ifp->idev->dev, 0, 0,
6289						       false);
6290			if (rt)
6291				ip6_del_rt(net, rt, false);
6292		}
6293		if (ifp->rt) {
6294			ip6_del_rt(net, ifp->rt, false);
6295			ifp->rt = NULL;
6296		}
6297		rt_genid_bump_ipv6(net);
6298		break;
6299	}
6300	atomic_inc(&net->ipv6.dev_addr_genid);
6301}
6302
6303static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
6304{
6305	if (likely(ifp->idev->dead == 0))
6306		__ipv6_ifa_notify(event, ifp);
6307}
6308
6309#ifdef CONFIG_SYSCTL
6310
6311static int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
6312		void *buffer, size_t *lenp, loff_t *ppos)
6313{
6314	int *valp = ctl->data;
6315	int val = *valp;
6316	loff_t pos = *ppos;
6317	struct ctl_table lctl;
6318	int ret;
6319
6320	/*
6321	 * ctl->data points to idev->cnf.forwarding, we should
6322	 * not modify it until we get the rtnl lock.
6323	 */
6324	lctl = *ctl;
6325	lctl.data = &val;
6326
6327	ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
6328
6329	if (write)
6330		ret = addrconf_fixup_forwarding(ctl, valp, val);
6331	if (ret)
6332		*ppos = pos;
6333	return ret;
6334}
6335
6336static int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
6337		void *buffer, size_t *lenp, loff_t *ppos)
6338{
6339	struct inet6_dev *idev = ctl->extra1;
6340	int min_mtu = IPV6_MIN_MTU;
6341	struct ctl_table lctl;
6342
6343	lctl = *ctl;
6344	lctl.extra1 = &min_mtu;
6345	lctl.extra2 = idev ? &idev->dev->mtu : NULL;
6346
6347	return proc_dointvec_minmax(&lctl, write, buffer, lenp, ppos);
6348}
6349
6350static void dev_disable_change(struct inet6_dev *idev)
6351{
6352	struct netdev_notifier_info info;
6353
6354	if (!idev || !idev->dev)
6355		return;
6356
6357	netdev_notifier_info_init(&info, idev->dev);
6358	if (idev->cnf.disable_ipv6)
6359		addrconf_notify(NULL, NETDEV_DOWN, &info);
6360	else
6361		addrconf_notify(NULL, NETDEV_UP, &info);
6362}
6363
6364static void addrconf_disable_change(struct net *net, __s32 newf)
6365{
6366	struct net_device *dev;
6367	struct inet6_dev *idev;
6368
6369	for_each_netdev(net, dev) {
6370		idev = __in6_dev_get(dev);
6371		if (idev) {
6372			int changed = (!idev->cnf.disable_ipv6) ^ (!newf);
6373
6374			WRITE_ONCE(idev->cnf.disable_ipv6, newf);
6375			if (changed)
6376				dev_disable_change(idev);
6377		}
6378	}
6379}
6380
6381static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int newf)
6382{
6383	struct net *net = (struct net *)table->extra2;
6384	int old;
6385
6386	if (p == &net->ipv6.devconf_dflt->disable_ipv6) {
6387		WRITE_ONCE(*p, newf);
6388		return 0;
6389	}
6390
6391	if (!rtnl_trylock())
6392		return restart_syscall();
6393
6394	old = *p;
6395	WRITE_ONCE(*p, newf);
6396
6397	if (p == &net->ipv6.devconf_all->disable_ipv6) {
6398		WRITE_ONCE(net->ipv6.devconf_dflt->disable_ipv6, newf);
6399		addrconf_disable_change(net, newf);
6400	} else if ((!newf) ^ (!old))
6401		dev_disable_change((struct inet6_dev *)table->extra1);
6402
6403	rtnl_unlock();
6404	return 0;
6405}
6406
6407static int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
6408		void *buffer, size_t *lenp, loff_t *ppos)
6409{
6410	int *valp = ctl->data;
6411	int val = *valp;
6412	loff_t pos = *ppos;
6413	struct ctl_table lctl;
6414	int ret;
6415
6416	/*
6417	 * ctl->data points to idev->cnf.disable_ipv6, we should
6418	 * not modify it until we get the rtnl lock.
6419	 */
6420	lctl = *ctl;
6421	lctl.data = &val;
6422
6423	ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
6424
6425	if (write)
6426		ret = addrconf_disable_ipv6(ctl, valp, val);
6427	if (ret)
6428		*ppos = pos;
6429	return ret;
6430}
6431
6432static int addrconf_sysctl_proxy_ndp(struct ctl_table *ctl, int write,
6433		void *buffer, size_t *lenp, loff_t *ppos)
6434{
6435	int *valp = ctl->data;
6436	int ret;
6437	int old, new;
6438
6439	old = *valp;
6440	ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
6441	new = *valp;
6442
6443	if (write && old != new) {
6444		struct net *net = ctl->extra2;
6445
6446		if (!rtnl_trylock())
6447			return restart_syscall();
6448
6449		if (valp == &net->ipv6.devconf_dflt->proxy_ndp)
6450			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
6451						     NETCONFA_PROXY_NEIGH,
6452						     NETCONFA_IFINDEX_DEFAULT,
6453						     net->ipv6.devconf_dflt);
6454		else if (valp == &net->ipv6.devconf_all->proxy_ndp)
6455			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
6456						     NETCONFA_PROXY_NEIGH,
6457						     NETCONFA_IFINDEX_ALL,
6458						     net->ipv6.devconf_all);
6459		else {
6460			struct inet6_dev *idev = ctl->extra1;
6461
6462			inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
6463						     NETCONFA_PROXY_NEIGH,
6464						     idev->dev->ifindex,
6465						     &idev->cnf);
6466		}
6467		rtnl_unlock();
6468	}
6469
6470	return ret;
6471}
6472
6473static int addrconf_sysctl_addr_gen_mode(struct ctl_table *ctl, int write,
6474					 void *buffer, size_t *lenp,
6475					 loff_t *ppos)
6476{
6477	int ret = 0;
6478	u32 new_val;
6479	struct inet6_dev *idev = (struct inet6_dev *)ctl->extra1;
6480	struct net *net = (struct net *)ctl->extra2;
6481	struct ctl_table tmp = {
6482		.data = &new_val,
6483		.maxlen = sizeof(new_val),
6484		.mode = ctl->mode,
6485	};
6486
6487	if (!rtnl_trylock())
6488		return restart_syscall();
6489
6490	new_val = *((u32 *)ctl->data);
6491
6492	ret = proc_douintvec(&tmp, write, buffer, lenp, ppos);
6493	if (ret != 0)
6494		goto out;
6495
6496	if (write) {
6497		if (check_addr_gen_mode(new_val) < 0) {
6498			ret = -EINVAL;
6499			goto out;
6500		}
6501
6502		if (idev) {
6503			if (check_stable_privacy(idev, net, new_val) < 0) {
6504				ret = -EINVAL;
6505				goto out;
6506			}
6507
6508			if (idev->cnf.addr_gen_mode != new_val) {
6509				WRITE_ONCE(idev->cnf.addr_gen_mode, new_val);
6510				addrconf_init_auto_addrs(idev->dev);
6511			}
6512		} else if (&net->ipv6.devconf_all->addr_gen_mode == ctl->data) {
6513			struct net_device *dev;
6514
6515			WRITE_ONCE(net->ipv6.devconf_dflt->addr_gen_mode, new_val);
6516			for_each_netdev(net, dev) {
6517				idev = __in6_dev_get(dev);
6518				if (idev &&
6519				    idev->cnf.addr_gen_mode != new_val) {
6520					WRITE_ONCE(idev->cnf.addr_gen_mode,
6521						  new_val);
6522					addrconf_init_auto_addrs(idev->dev);
6523				}
6524			}
6525		}
6526
6527		WRITE_ONCE(*((u32 *)ctl->data), new_val);
6528	}
6529
6530out:
6531	rtnl_unlock();
6532
6533	return ret;
6534}
6535
6536static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
6537					 void *buffer, size_t *lenp,
6538					 loff_t *ppos)
6539{
6540	int err;
6541	struct in6_addr addr;
6542	char str[IPV6_MAX_STRLEN];
6543	struct ctl_table lctl = *ctl;
6544	struct net *net = ctl->extra2;
6545	struct ipv6_stable_secret *secret = ctl->data;
6546
6547	if (&net->ipv6.devconf_all->stable_secret == ctl->data)
6548		return -EIO;
6549
6550	lctl.maxlen = IPV6_MAX_STRLEN;
6551	lctl.data = str;
6552
6553	if (!rtnl_trylock())
6554		return restart_syscall();
6555
6556	if (!write && !secret->initialized) {
6557		err = -EIO;
6558		goto out;
6559	}
6560
6561	err = snprintf(str, sizeof(str), "%pI6", &secret->secret);
6562	if (err >= sizeof(str)) {
6563		err = -EIO;
6564		goto out;
6565	}
6566
6567	err = proc_dostring(&lctl, write, buffer, lenp, ppos);
6568	if (err || !write)
6569		goto out;
6570
6571	if (in6_pton(str, -1, addr.in6_u.u6_addr8, -1, NULL) != 1) {
6572		err = -EIO;
6573		goto out;
6574	}
6575
6576	secret->initialized = true;
6577	secret->secret = addr;
6578
6579	if (&net->ipv6.devconf_dflt->stable_secret == ctl->data) {
6580		struct net_device *dev;
6581
6582		for_each_netdev(net, dev) {
6583			struct inet6_dev *idev = __in6_dev_get(dev);
6584
6585			if (idev) {
6586				WRITE_ONCE(idev->cnf.addr_gen_mode,
6587					   IN6_ADDR_GEN_MODE_STABLE_PRIVACY);
6588			}
6589		}
6590	} else {
6591		struct inet6_dev *idev = ctl->extra1;
6592
6593		WRITE_ONCE(idev->cnf.addr_gen_mode,
6594			   IN6_ADDR_GEN_MODE_STABLE_PRIVACY);
6595	}
6596
6597out:
6598	rtnl_unlock();
6599
6600	return err;
6601}
6602
6603static
6604int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
6605						int write, void *buffer,
6606						size_t *lenp,
6607						loff_t *ppos)
6608{
6609	int *valp = ctl->data;
6610	int val = *valp;
6611	loff_t pos = *ppos;
6612	struct ctl_table lctl;
6613	int ret;
6614
6615	/* ctl->data points to idev->cnf.ignore_routes_when_linkdown
6616	 * we should not modify it until we get the rtnl lock.
6617	 */
6618	lctl = *ctl;
6619	lctl.data = &val;
6620
6621	ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
6622
6623	if (write)
6624		ret = addrconf_fixup_linkdown(ctl, valp, val);
6625	if (ret)
6626		*ppos = pos;
6627	return ret;
6628}
6629
6630static
6631void addrconf_set_nopolicy(struct rt6_info *rt, int action)
6632{
6633	if (rt) {
6634		if (action)
6635			rt->dst.flags |= DST_NOPOLICY;
6636		else
6637			rt->dst.flags &= ~DST_NOPOLICY;
6638	}
6639}
6640
6641static
6642void addrconf_disable_policy_idev(struct inet6_dev *idev, int val)
6643{
6644	struct inet6_ifaddr *ifa;
6645
6646	read_lock_bh(&idev->lock);
6647	list_for_each_entry(ifa, &idev->addr_list, if_list) {
6648		spin_lock(&ifa->lock);
6649		if (ifa->rt) {
6650			/* host routes only use builtin fib6_nh */
6651			struct fib6_nh *nh = ifa->rt->fib6_nh;
6652			int cpu;
6653
6654			rcu_read_lock();
6655			ifa->rt->dst_nopolicy = val ? true : false;
6656			if (nh->rt6i_pcpu) {
6657				for_each_possible_cpu(cpu) {
6658					struct rt6_info **rtp;
6659
6660					rtp = per_cpu_ptr(nh->rt6i_pcpu, cpu);
6661					addrconf_set_nopolicy(*rtp, val);
6662				}
6663			}
6664			rcu_read_unlock();
6665		}
6666		spin_unlock(&ifa->lock);
6667	}
6668	read_unlock_bh(&idev->lock);
6669}
6670
6671static
6672int addrconf_disable_policy(struct ctl_table *ctl, int *valp, int val)
6673{
6674	struct net *net = (struct net *)ctl->extra2;
6675	struct inet6_dev *idev;
6676
6677	if (valp == &net->ipv6.devconf_dflt->disable_policy) {
6678		WRITE_ONCE(*valp, val);
6679		return 0;
6680	}
6681
6682	if (!rtnl_trylock())
6683		return restart_syscall();
6684
6685	WRITE_ONCE(*valp, val);
6686
6687	if (valp == &net->ipv6.devconf_all->disable_policy)  {
6688		struct net_device *dev;
6689
6690		for_each_netdev(net, dev) {
6691			idev = __in6_dev_get(dev);
6692			if (idev)
6693				addrconf_disable_policy_idev(idev, val);
6694		}
6695	} else {
6696		idev = (struct inet6_dev *)ctl->extra1;
6697		addrconf_disable_policy_idev(idev, val);
6698	}
6699
6700	rtnl_unlock();
6701	return 0;
6702}
6703
6704static int addrconf_sysctl_disable_policy(struct ctl_table *ctl, int write,
6705				   void *buffer, size_t *lenp, loff_t *ppos)
6706{
6707	int *valp = ctl->data;
6708	int val = *valp;
6709	loff_t pos = *ppos;
6710	struct ctl_table lctl;
6711	int ret;
6712
6713	lctl = *ctl;
6714	lctl.data = &val;
6715	ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
6716
6717	if (write && (*valp != val))
6718		ret = addrconf_disable_policy(ctl, valp, val);
6719
6720	if (ret)
6721		*ppos = pos;
6722
6723	return ret;
6724}
6725
6726static int minus_one = -1;
6727static const int two_five_five = 255;
6728static u32 ioam6_if_id_max = U16_MAX;
6729
6730static const struct ctl_table addrconf_sysctl[] = {
6731	{
6732		.procname	= "forwarding",
6733		.data		= &ipv6_devconf.forwarding,
6734		.maxlen		= sizeof(int),
6735		.mode		= 0644,
6736		.proc_handler	= addrconf_sysctl_forward,
6737	},
6738	{
6739		.procname	= "hop_limit",
6740		.data		= &ipv6_devconf.hop_limit,
6741		.maxlen		= sizeof(int),
6742		.mode		= 0644,
6743		.proc_handler	= proc_dointvec_minmax,
6744		.extra1		= (void *)SYSCTL_ONE,
6745		.extra2		= (void *)&two_five_five,
6746	},
6747	{
6748		.procname	= "mtu",
6749		.data		= &ipv6_devconf.mtu6,
6750		.maxlen		= sizeof(int),
6751		.mode		= 0644,
6752		.proc_handler	= addrconf_sysctl_mtu,
6753	},
6754	{
6755		.procname	= "accept_ra",
6756		.data		= &ipv6_devconf.accept_ra,
6757		.maxlen		= sizeof(int),
6758		.mode		= 0644,
6759		.proc_handler	= proc_dointvec,
6760	},
6761	{
6762		.procname	= "accept_redirects",
6763		.data		= &ipv6_devconf.accept_redirects,
6764		.maxlen		= sizeof(int),
6765		.mode		= 0644,
6766		.proc_handler	= proc_dointvec,
6767	},
6768	{
6769		.procname	= "autoconf",
6770		.data		= &ipv6_devconf.autoconf,
6771		.maxlen		= sizeof(int),
6772		.mode		= 0644,
6773		.proc_handler	= proc_dointvec,
6774	},
6775	{
6776		.procname	= "dad_transmits",
6777		.data		= &ipv6_devconf.dad_transmits,
6778		.maxlen		= sizeof(int),
6779		.mode		= 0644,
6780		.proc_handler	= proc_dointvec,
6781	},
6782	{
6783		.procname	= "router_solicitations",
6784		.data		= &ipv6_devconf.rtr_solicits,
6785		.maxlen		= sizeof(int),
6786		.mode		= 0644,
6787		.proc_handler	= proc_dointvec_minmax,
6788		.extra1		= &minus_one,
6789	},
6790	{
6791		.procname	= "router_solicitation_interval",
6792		.data		= &ipv6_devconf.rtr_solicit_interval,
6793		.maxlen		= sizeof(int),
6794		.mode		= 0644,
6795		.proc_handler	= proc_dointvec_jiffies,
6796	},
6797	{
6798		.procname	= "router_solicitation_max_interval",
6799		.data		= &ipv6_devconf.rtr_solicit_max_interval,
6800		.maxlen		= sizeof(int),
6801		.mode		= 0644,
6802		.proc_handler	= proc_dointvec_jiffies,
6803	},
6804	{
6805		.procname	= "router_solicitation_delay",
6806		.data		= &ipv6_devconf.rtr_solicit_delay,
6807		.maxlen		= sizeof(int),
6808		.mode		= 0644,
6809		.proc_handler	= proc_dointvec_jiffies,
6810	},
6811	{
6812		.procname	= "force_mld_version",
6813		.data		= &ipv6_devconf.force_mld_version,
6814		.maxlen		= sizeof(int),
6815		.mode		= 0644,
6816		.proc_handler	= proc_dointvec,
6817	},
6818	{
6819		.procname	= "mldv1_unsolicited_report_interval",
6820		.data		=
6821			&ipv6_devconf.mldv1_unsolicited_report_interval,
6822		.maxlen		= sizeof(int),
6823		.mode		= 0644,
6824		.proc_handler	= proc_dointvec_ms_jiffies,
6825	},
6826	{
6827		.procname	= "mldv2_unsolicited_report_interval",
6828		.data		=
6829			&ipv6_devconf.mldv2_unsolicited_report_interval,
6830		.maxlen		= sizeof(int),
6831		.mode		= 0644,
6832		.proc_handler	= proc_dointvec_ms_jiffies,
6833	},
6834	{
6835		.procname	= "use_tempaddr",
6836		.data		= &ipv6_devconf.use_tempaddr,
6837		.maxlen		= sizeof(int),
6838		.mode		= 0644,
6839		.proc_handler	= proc_dointvec,
6840	},
6841	{
6842		.procname	= "temp_valid_lft",
6843		.data		= &ipv6_devconf.temp_valid_lft,
6844		.maxlen		= sizeof(int),
6845		.mode		= 0644,
6846		.proc_handler	= proc_dointvec,
6847	},
6848	{
6849		.procname	= "temp_prefered_lft",
6850		.data		= &ipv6_devconf.temp_prefered_lft,
6851		.maxlen		= sizeof(int),
6852		.mode		= 0644,
6853		.proc_handler	= proc_dointvec,
6854	},
6855	{
6856		.procname       = "regen_min_advance",
6857		.data           = &ipv6_devconf.regen_min_advance,
6858		.maxlen         = sizeof(int),
6859		.mode           = 0644,
6860		.proc_handler   = proc_dointvec,
6861	},
6862	{
6863		.procname	= "regen_max_retry",
6864		.data		= &ipv6_devconf.regen_max_retry,
6865		.maxlen		= sizeof(int),
6866		.mode		= 0644,
6867		.proc_handler	= proc_dointvec,
6868	},
6869	{
6870		.procname	= "max_desync_factor",
6871		.data		= &ipv6_devconf.max_desync_factor,
6872		.maxlen		= sizeof(int),
6873		.mode		= 0644,
6874		.proc_handler	= proc_dointvec,
6875	},
6876	{
6877		.procname	= "max_addresses",
6878		.data		= &ipv6_devconf.max_addresses,
6879		.maxlen		= sizeof(int),
6880		.mode		= 0644,
6881		.proc_handler	= proc_dointvec,
6882	},
6883	{
6884		.procname	= "accept_ra_defrtr",
6885		.data		= &ipv6_devconf.accept_ra_defrtr,
6886		.maxlen		= sizeof(int),
6887		.mode		= 0644,
6888		.proc_handler	= proc_dointvec,
6889	},
6890	{
6891		.procname	= "ra_defrtr_metric",
6892		.data		= &ipv6_devconf.ra_defrtr_metric,
6893		.maxlen		= sizeof(u32),
6894		.mode		= 0644,
6895		.proc_handler	= proc_douintvec_minmax,
6896		.extra1		= (void *)SYSCTL_ONE,
6897	},
6898	{
6899		.procname	= "accept_ra_min_hop_limit",
6900		.data		= &ipv6_devconf.accept_ra_min_hop_limit,
6901		.maxlen		= sizeof(int),
6902		.mode		= 0644,
6903		.proc_handler	= proc_dointvec,
6904	},
6905	{
6906		.procname	= "accept_ra_min_lft",
6907		.data		= &ipv6_devconf.accept_ra_min_lft,
6908		.maxlen		= sizeof(int),
6909		.mode		= 0644,
6910		.proc_handler	= proc_dointvec,
6911	},
6912	{
6913		.procname	= "accept_ra_pinfo",
6914		.data		= &ipv6_devconf.accept_ra_pinfo,
6915		.maxlen		= sizeof(int),
6916		.mode		= 0644,
6917		.proc_handler	= proc_dointvec,
6918	},
6919	{
6920		.procname	= "ra_honor_pio_life",
6921		.data		= &ipv6_devconf.ra_honor_pio_life,
6922		.maxlen		= sizeof(u8),
6923		.mode		= 0644,
6924		.proc_handler	= proc_dou8vec_minmax,
6925		.extra1		= SYSCTL_ZERO,
6926		.extra2		= SYSCTL_ONE,
6927	},
6928#ifdef CONFIG_IPV6_ROUTER_PREF
6929	{
6930		.procname	= "accept_ra_rtr_pref",
6931		.data		= &ipv6_devconf.accept_ra_rtr_pref,
6932		.maxlen		= sizeof(int),
6933		.mode		= 0644,
6934		.proc_handler	= proc_dointvec,
6935	},
6936	{
6937		.procname	= "router_probe_interval",
6938		.data		= &ipv6_devconf.rtr_probe_interval,
6939		.maxlen		= sizeof(int),
6940		.mode		= 0644,
6941		.proc_handler	= proc_dointvec_jiffies,
6942	},
6943#ifdef CONFIG_IPV6_ROUTE_INFO
6944	{
6945		.procname	= "accept_ra_rt_info_min_plen",
6946		.data		= &ipv6_devconf.accept_ra_rt_info_min_plen,
6947		.maxlen		= sizeof(int),
6948		.mode		= 0644,
6949		.proc_handler	= proc_dointvec,
6950	},
6951	{
6952		.procname	= "accept_ra_rt_info_max_plen",
6953		.data		= &ipv6_devconf.accept_ra_rt_info_max_plen,
6954		.maxlen		= sizeof(int),
6955		.mode		= 0644,
6956		.proc_handler	= proc_dointvec,
6957	},
6958#endif
6959#endif
6960	{
6961		.procname	= "proxy_ndp",
6962		.data		= &ipv6_devconf.proxy_ndp,
6963		.maxlen		= sizeof(int),
6964		.mode		= 0644,
6965		.proc_handler	= addrconf_sysctl_proxy_ndp,
6966	},
6967	{
6968		.procname	= "accept_source_route",
6969		.data		= &ipv6_devconf.accept_source_route,
6970		.maxlen		= sizeof(int),
6971		.mode		= 0644,
6972		.proc_handler	= proc_dointvec,
6973	},
6974#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
6975	{
6976		.procname	= "optimistic_dad",
6977		.data		= &ipv6_devconf.optimistic_dad,
6978		.maxlen		= sizeof(int),
6979		.mode		= 0644,
6980		.proc_handler   = proc_dointvec,
6981	},
6982	{
6983		.procname	= "use_optimistic",
6984		.data		= &ipv6_devconf.use_optimistic,
6985		.maxlen		= sizeof(int),
6986		.mode		= 0644,
6987		.proc_handler	= proc_dointvec,
6988	},
6989#endif
6990#ifdef CONFIG_IPV6_MROUTE
6991	{
6992		.procname	= "mc_forwarding",
6993		.data		= &ipv6_devconf.mc_forwarding,
6994		.maxlen		= sizeof(int),
6995		.mode		= 0444,
6996		.proc_handler	= proc_dointvec,
6997	},
6998#endif
6999	{
7000		.procname	= "disable_ipv6",
7001		.data		= &ipv6_devconf.disable_ipv6,
7002		.maxlen		= sizeof(int),
7003		.mode		= 0644,
7004		.proc_handler	= addrconf_sysctl_disable,
7005	},
7006	{
7007		.procname	= "accept_dad",
7008		.data		= &ipv6_devconf.accept_dad,
7009		.maxlen		= sizeof(int),
7010		.mode		= 0644,
7011		.proc_handler	= proc_dointvec,
7012	},
7013	{
7014		.procname	= "force_tllao",
7015		.data		= &ipv6_devconf.force_tllao,
7016		.maxlen		= sizeof(int),
7017		.mode		= 0644,
7018		.proc_handler	= proc_dointvec
7019	},
7020	{
7021		.procname	= "ndisc_notify",
7022		.data		= &ipv6_devconf.ndisc_notify,
7023		.maxlen		= sizeof(int),
7024		.mode		= 0644,
7025		.proc_handler	= proc_dointvec
7026	},
7027	{
7028		.procname	= "suppress_frag_ndisc",
7029		.data		= &ipv6_devconf.suppress_frag_ndisc,
7030		.maxlen		= sizeof(int),
7031		.mode		= 0644,
7032		.proc_handler	= proc_dointvec
7033	},
7034	{
7035		.procname	= "accept_ra_from_local",
7036		.data		= &ipv6_devconf.accept_ra_from_local,
7037		.maxlen		= sizeof(int),
7038		.mode		= 0644,
7039		.proc_handler	= proc_dointvec,
7040	},
7041	{
7042		.procname	= "accept_ra_mtu",
7043		.data		= &ipv6_devconf.accept_ra_mtu,
7044		.maxlen		= sizeof(int),
7045		.mode		= 0644,
7046		.proc_handler	= proc_dointvec,
7047	},
7048	{
7049		.procname	= "stable_secret",
7050		.data		= &ipv6_devconf.stable_secret,
7051		.maxlen		= IPV6_MAX_STRLEN,
7052		.mode		= 0600,
7053		.proc_handler	= addrconf_sysctl_stable_secret,
7054	},
7055	{
7056		.procname	= "use_oif_addrs_only",
7057		.data		= &ipv6_devconf.use_oif_addrs_only,
7058		.maxlen		= sizeof(int),
7059		.mode		= 0644,
7060		.proc_handler	= proc_dointvec,
7061	},
7062	{
7063		.procname	= "ignore_routes_with_linkdown",
7064		.data		= &ipv6_devconf.ignore_routes_with_linkdown,
7065		.maxlen		= sizeof(int),
7066		.mode		= 0644,
7067		.proc_handler	= addrconf_sysctl_ignore_routes_with_linkdown,
7068	},
7069	{
7070		.procname	= "drop_unicast_in_l2_multicast",
7071		.data		= &ipv6_devconf.drop_unicast_in_l2_multicast,
7072		.maxlen		= sizeof(int),
7073		.mode		= 0644,
7074		.proc_handler	= proc_dointvec,
7075	},
7076	{
7077		.procname	= "drop_unsolicited_na",
7078		.data		= &ipv6_devconf.drop_unsolicited_na,
7079		.maxlen		= sizeof(int),
7080		.mode		= 0644,
7081		.proc_handler	= proc_dointvec,
7082	},
7083	{
7084		.procname	= "keep_addr_on_down",
7085		.data		= &ipv6_devconf.keep_addr_on_down,
7086		.maxlen		= sizeof(int),
7087		.mode		= 0644,
7088		.proc_handler	= proc_dointvec,
7089
7090	},
7091	{
7092		.procname	= "seg6_enabled",
7093		.data		= &ipv6_devconf.seg6_enabled,
7094		.maxlen		= sizeof(int),
7095		.mode		= 0644,
7096		.proc_handler	= proc_dointvec,
7097	},
7098#ifdef CONFIG_IPV6_SEG6_HMAC
7099	{
7100		.procname	= "seg6_require_hmac",
7101		.data		= &ipv6_devconf.seg6_require_hmac,
7102		.maxlen		= sizeof(int),
7103		.mode		= 0644,
7104		.proc_handler	= proc_dointvec,
7105	},
7106#endif
7107	{
7108		.procname       = "enhanced_dad",
7109		.data           = &ipv6_devconf.enhanced_dad,
7110		.maxlen         = sizeof(int),
7111		.mode           = 0644,
7112		.proc_handler   = proc_dointvec,
7113	},
7114	{
7115		.procname	= "addr_gen_mode",
7116		.data		= &ipv6_devconf.addr_gen_mode,
7117		.maxlen		= sizeof(int),
7118		.mode		= 0644,
7119		.proc_handler	= addrconf_sysctl_addr_gen_mode,
7120	},
7121	{
7122		.procname       = "disable_policy",
7123		.data           = &ipv6_devconf.disable_policy,
7124		.maxlen         = sizeof(int),
7125		.mode           = 0644,
7126		.proc_handler   = addrconf_sysctl_disable_policy,
7127	},
7128	{
7129		.procname	= "ndisc_tclass",
7130		.data		= &ipv6_devconf.ndisc_tclass,
7131		.maxlen		= sizeof(int),
7132		.mode		= 0644,
7133		.proc_handler	= proc_dointvec_minmax,
7134		.extra1		= (void *)SYSCTL_ZERO,
7135		.extra2		= (void *)&two_five_five,
7136	},
7137	{
7138		.procname	= "rpl_seg_enabled",
7139		.data		= &ipv6_devconf.rpl_seg_enabled,
7140		.maxlen		= sizeof(int),
7141		.mode		= 0644,
7142		.proc_handler	= proc_dointvec,
7143	},
7144	{
7145		.procname	= "ioam6_enabled",
7146		.data		= &ipv6_devconf.ioam6_enabled,
7147		.maxlen		= sizeof(u8),
7148		.mode		= 0644,
7149		.proc_handler	= proc_dou8vec_minmax,
7150		.extra1		= (void *)SYSCTL_ZERO,
7151		.extra2		= (void *)SYSCTL_ONE,
7152	},
7153	{
7154		.procname	= "ioam6_id",
7155		.data		= &ipv6_devconf.ioam6_id,
7156		.maxlen		= sizeof(u32),
7157		.mode		= 0644,
7158		.proc_handler	= proc_douintvec_minmax,
7159		.extra1		= (void *)SYSCTL_ZERO,
7160		.extra2		= (void *)&ioam6_if_id_max,
7161	},
7162	{
7163		.procname	= "ioam6_id_wide",
7164		.data		= &ipv6_devconf.ioam6_id_wide,
7165		.maxlen		= sizeof(u32),
7166		.mode		= 0644,
7167		.proc_handler	= proc_douintvec,
7168	},
7169	{
7170		.procname	= "ndisc_evict_nocarrier",
7171		.data		= &ipv6_devconf.ndisc_evict_nocarrier,
7172		.maxlen		= sizeof(u8),
7173		.mode		= 0644,
7174		.proc_handler	= proc_dou8vec_minmax,
7175		.extra1		= (void *)SYSCTL_ZERO,
7176		.extra2		= (void *)SYSCTL_ONE,
7177	},
7178	{
7179		.procname	= "accept_untracked_na",
7180		.data		= &ipv6_devconf.accept_untracked_na,
7181		.maxlen		= sizeof(int),
7182		.mode		= 0644,
7183		.proc_handler	= proc_dointvec_minmax,
7184		.extra1		= SYSCTL_ZERO,
7185		.extra2		= SYSCTL_TWO,
7186	},
7187};
7188
7189static int __addrconf_sysctl_register(struct net *net, char *dev_name,
7190		struct inet6_dev *idev, struct ipv6_devconf *p)
7191{
7192	size_t table_size = ARRAY_SIZE(addrconf_sysctl);
7193	int i, ifindex;
7194	struct ctl_table *table;
7195	char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
7196
7197	table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL_ACCOUNT);
7198	if (!table)
7199		goto out;
7200
7201	for (i = 0; i < table_size; i++) {
7202		table[i].data += (char *)p - (char *)&ipv6_devconf;
7203		/* If one of these is already set, then it is not safe to
7204		 * overwrite either of them: this makes proc_dointvec_minmax
7205		 * usable.
7206		 */
7207		if (!table[i].extra1 && !table[i].extra2) {
7208			table[i].extra1 = idev; /* embedded; no ref */
7209			table[i].extra2 = net;
7210		}
7211	}
7212
7213	snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name);
7214
7215	p->sysctl_header = register_net_sysctl_sz(net, path, table,
7216						  table_size);
7217	if (!p->sysctl_header)
7218		goto free;
7219
7220	if (!strcmp(dev_name, "all"))
7221		ifindex = NETCONFA_IFINDEX_ALL;
7222	else if (!strcmp(dev_name, "default"))
7223		ifindex = NETCONFA_IFINDEX_DEFAULT;
7224	else
7225		ifindex = idev->dev->ifindex;
7226	inet6_netconf_notify_devconf(net, RTM_NEWNETCONF, NETCONFA_ALL,
7227				     ifindex, p);
7228	return 0;
7229
7230free:
7231	kfree(table);
7232out:
7233	return -ENOBUFS;
7234}
7235
7236static void __addrconf_sysctl_unregister(struct net *net,
7237					 struct ipv6_devconf *p, int ifindex)
7238{
7239	const struct ctl_table *table;
7240
7241	if (!p->sysctl_header)
7242		return;
7243
7244	table = p->sysctl_header->ctl_table_arg;
7245	unregister_net_sysctl_table(p->sysctl_header);
7246	p->sysctl_header = NULL;
7247	kfree(table);
7248
7249	inet6_netconf_notify_devconf(net, RTM_DELNETCONF, 0, ifindex, NULL);
7250}
7251
7252static int addrconf_sysctl_register(struct inet6_dev *idev)
7253{
7254	int err;
7255
7256	if (!sysctl_dev_name_is_allowed(idev->dev->name))
7257		return -EINVAL;
7258
7259	err = neigh_sysctl_register(idev->dev, idev->nd_parms,
7260				    &ndisc_ifinfo_sysctl_change);
7261	if (err)
7262		return err;
7263	err = __addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name,
7264					 idev, &idev->cnf);
7265	if (err)
7266		neigh_sysctl_unregister(idev->nd_parms);
7267
7268	return err;
7269}
7270
7271static void addrconf_sysctl_unregister(struct inet6_dev *idev)
7272{
7273	__addrconf_sysctl_unregister(dev_net(idev->dev), &idev->cnf,
7274				     idev->dev->ifindex);
7275	neigh_sysctl_unregister(idev->nd_parms);
7276}
7277
7278
7279#endif
7280
7281static int __net_init addrconf_init_net(struct net *net)
7282{
7283	int err = -ENOMEM;
7284	struct ipv6_devconf *all, *dflt;
7285
7286	spin_lock_init(&net->ipv6.addrconf_hash_lock);
7287	INIT_DEFERRABLE_WORK(&net->ipv6.addr_chk_work, addrconf_verify_work);
7288	net->ipv6.inet6_addr_lst = kcalloc(IN6_ADDR_HSIZE,
7289					   sizeof(struct hlist_head),
7290					   GFP_KERNEL);
7291	if (!net->ipv6.inet6_addr_lst)
7292		goto err_alloc_addr;
7293
7294	all = kmemdup(&ipv6_devconf, sizeof(ipv6_devconf), GFP_KERNEL);
7295	if (!all)
7296		goto err_alloc_all;
7297
7298	dflt = kmemdup(&ipv6_devconf_dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL);
7299	if (!dflt)
7300		goto err_alloc_dflt;
7301
7302	if (!net_eq(net, &init_net)) {
7303		switch (net_inherit_devconf()) {
7304		case 1:  /* copy from init_net */
7305			memcpy(all, init_net.ipv6.devconf_all,
7306			       sizeof(ipv6_devconf));
7307			memcpy(dflt, init_net.ipv6.devconf_dflt,
7308			       sizeof(ipv6_devconf_dflt));
7309			break;
7310		case 3: /* copy from the current netns */
7311			memcpy(all, current->nsproxy->net_ns->ipv6.devconf_all,
7312			       sizeof(ipv6_devconf));
7313			memcpy(dflt,
7314			       current->nsproxy->net_ns->ipv6.devconf_dflt,
7315			       sizeof(ipv6_devconf_dflt));
7316			break;
7317		case 0:
7318		case 2:
7319			/* use compiled values */
7320			break;
7321		}
7322	}
7323
7324	/* these will be inherited by all namespaces */
7325	dflt->autoconf = ipv6_defaults.autoconf;
7326	dflt->disable_ipv6 = ipv6_defaults.disable_ipv6;
7327
7328	dflt->stable_secret.initialized = false;
7329	all->stable_secret.initialized = false;
7330
7331	net->ipv6.devconf_all = all;
7332	net->ipv6.devconf_dflt = dflt;
7333
7334#ifdef CONFIG_SYSCTL
7335	err = __addrconf_sysctl_register(net, "all", NULL, all);
7336	if (err < 0)
7337		goto err_reg_all;
7338
7339	err = __addrconf_sysctl_register(net, "default", NULL, dflt);
7340	if (err < 0)
7341		goto err_reg_dflt;
7342#endif
7343	return 0;
7344
7345#ifdef CONFIG_SYSCTL
7346err_reg_dflt:
7347	__addrconf_sysctl_unregister(net, all, NETCONFA_IFINDEX_ALL);
7348err_reg_all:
7349	kfree(dflt);
7350	net->ipv6.devconf_dflt = NULL;
7351#endif
7352err_alloc_dflt:
7353	kfree(all);
7354	net->ipv6.devconf_all = NULL;
7355err_alloc_all:
7356	kfree(net->ipv6.inet6_addr_lst);
7357err_alloc_addr:
7358	return err;
7359}
7360
7361static void __net_exit addrconf_exit_net(struct net *net)
7362{
7363	int i;
7364
7365#ifdef CONFIG_SYSCTL
7366	__addrconf_sysctl_unregister(net, net->ipv6.devconf_dflt,
7367				     NETCONFA_IFINDEX_DEFAULT);
7368	__addrconf_sysctl_unregister(net, net->ipv6.devconf_all,
7369				     NETCONFA_IFINDEX_ALL);
7370#endif
7371	kfree(net->ipv6.devconf_dflt);
7372	net->ipv6.devconf_dflt = NULL;
7373	kfree(net->ipv6.devconf_all);
7374	net->ipv6.devconf_all = NULL;
7375
7376	cancel_delayed_work_sync(&net->ipv6.addr_chk_work);
7377	/*
7378	 *	Check hash table, then free it.
7379	 */
7380	for (i = 0; i < IN6_ADDR_HSIZE; i++)
7381		WARN_ON_ONCE(!hlist_empty(&net->ipv6.inet6_addr_lst[i]));
7382
7383	kfree(net->ipv6.inet6_addr_lst);
7384	net->ipv6.inet6_addr_lst = NULL;
7385}
7386
7387static struct pernet_operations addrconf_ops = {
7388	.init = addrconf_init_net,
7389	.exit = addrconf_exit_net,
7390};
7391
7392static struct rtnl_af_ops inet6_ops __read_mostly = {
7393	.family		  = AF_INET6,
7394	.fill_link_af	  = inet6_fill_link_af,
7395	.get_link_af_size = inet6_get_link_af_size,
7396	.validate_link_af = inet6_validate_link_af,
7397	.set_link_af	  = inet6_set_link_af,
7398};
7399
7400/*
7401 *	Init / cleanup code
7402 */
7403
7404int __init addrconf_init(void)
7405{
7406	struct inet6_dev *idev;
7407	int err;
7408
7409	err = ipv6_addr_label_init();
7410	if (err < 0) {
7411		pr_crit("%s: cannot initialize default policy table: %d\n",
7412			__func__, err);
7413		goto out;
7414	}
7415
7416	err = register_pernet_subsys(&addrconf_ops);
7417	if (err < 0)
7418		goto out_addrlabel;
7419
7420	/* All works using addrconf_wq need to lock rtnl. */
7421	addrconf_wq = create_singlethread_workqueue("ipv6_addrconf");
7422	if (!addrconf_wq) {
7423		err = -ENOMEM;
7424		goto out_nowq;
7425	}
7426
7427	rtnl_lock();
7428	idev = ipv6_add_dev(blackhole_netdev);
7429	rtnl_unlock();
7430	if (IS_ERR(idev)) {
7431		err = PTR_ERR(idev);
7432		goto errlo;
7433	}
7434
7435	ip6_route_init_special_entries();
7436
7437	register_netdevice_notifier(&ipv6_dev_notf);
7438
7439	addrconf_verify(&init_net);
7440
7441	rtnl_af_register(&inet6_ops);
7442
7443	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETLINK,
7444				   NULL, inet6_dump_ifinfo, RTNL_FLAG_DUMP_UNLOCKED);
7445	if (err < 0)
7446		goto errout;
7447
7448	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_NEWADDR,
7449				   inet6_rtm_newaddr, NULL, 0);
7450	if (err < 0)
7451		goto errout;
7452	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_DELADDR,
7453				   inet6_rtm_deladdr, NULL, 0);
7454	if (err < 0)
7455		goto errout;
7456	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETADDR,
7457				   inet6_rtm_getaddr, inet6_dump_ifaddr,
7458				   RTNL_FLAG_DOIT_UNLOCKED |
7459				   RTNL_FLAG_DUMP_UNLOCKED);
7460	if (err < 0)
7461		goto errout;
7462	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETMULTICAST,
7463				   NULL, inet6_dump_ifmcaddr,
7464				   RTNL_FLAG_DUMP_UNLOCKED);
7465	if (err < 0)
7466		goto errout;
7467	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETANYCAST,
7468				   NULL, inet6_dump_ifacaddr,
7469				   RTNL_FLAG_DUMP_UNLOCKED);
7470	if (err < 0)
7471		goto errout;
7472	err = rtnl_register_module(THIS_MODULE, PF_INET6, RTM_GETNETCONF,
7473				   inet6_netconf_get_devconf,
7474				   inet6_netconf_dump_devconf,
7475				   RTNL_FLAG_DOIT_UNLOCKED |
7476				   RTNL_FLAG_DUMP_UNLOCKED);
7477	if (err < 0)
7478		goto errout;
7479	err = ipv6_addr_label_rtnl_register();
7480	if (err < 0)
7481		goto errout;
7482
7483	return 0;
7484errout:
7485	rtnl_unregister_all(PF_INET6);
7486	rtnl_af_unregister(&inet6_ops);
7487	unregister_netdevice_notifier(&ipv6_dev_notf);
7488errlo:
7489	destroy_workqueue(addrconf_wq);
7490out_nowq:
7491	unregister_pernet_subsys(&addrconf_ops);
7492out_addrlabel:
7493	ipv6_addr_label_cleanup();
7494out:
7495	return err;
7496}
7497
7498void addrconf_cleanup(void)
7499{
7500	struct net_device *dev;
7501
7502	unregister_netdevice_notifier(&ipv6_dev_notf);
7503	unregister_pernet_subsys(&addrconf_ops);
7504	ipv6_addr_label_cleanup();
7505
7506	rtnl_af_unregister(&inet6_ops);
7507
7508	rtnl_lock();
7509
7510	/* clean dev list */
7511	for_each_netdev(&init_net, dev) {
7512		if (__in6_dev_get(dev) == NULL)
7513			continue;
7514		addrconf_ifdown(dev, true);
7515	}
7516	addrconf_ifdown(init_net.loopback_dev, true);
7517
7518	rtnl_unlock();
7519
7520	destroy_workqueue(addrconf_wq);
7521}
7522