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