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