linux/net/ipv6/udp.c
<<
>>
Prefs
   1/*
   2 *      UDP over IPv6
   3 *      Linux INET6 implementation
   4 *
   5 *      Authors:
   6 *      Pedro Roque             <roque@di.fc.ul.pt>
   7 *
   8 *      Based on linux/ipv4/udp.c
   9 *
  10 *      Fixes:
  11 *      Hideaki YOSHIFUJI       :       sin6_scope_id support
  12 *      YOSHIFUJI Hideaki @USAGI and:   Support IPV6_V6ONLY socket option, which
  13 *      Alexey Kuznetsov                allow both IPv4 and IPv6 sockets to bind
  14 *                                      a single port at the same time.
  15 *      Kazunori MIYAZAWA @USAGI:       change process style to use ip6_append_data
  16 *      YOSHIFUJI Hideaki @USAGI:       convert /proc/net/udp6 to seq_file.
  17 *
  18 *      This program is free software; you can redistribute it and/or
  19 *      modify it under the terms of the GNU General Public License
  20 *      as published by the Free Software Foundation; either version
  21 *      2 of the License, or (at your option) any later version.
  22 */
  23
  24#include <linux/errno.h>
  25#include <linux/types.h>
  26#include <linux/socket.h>
  27#include <linux/sockios.h>
  28#include <linux/net.h>
  29#include <linux/in6.h>
  30#include <linux/netdevice.h>
  31#include <linux/if_arp.h>
  32#include <linux/ipv6.h>
  33#include <linux/icmpv6.h>
  34#include <linux/init.h>
  35#include <linux/module.h>
  36#include <linux/skbuff.h>
  37#include <linux/slab.h>
  38#include <asm/uaccess.h>
  39
  40#include <net/ndisc.h>
  41#include <net/protocol.h>
  42#include <net/transp_v6.h>
  43#include <net/ip6_route.h>
  44#include <net/raw.h>
  45#include <net/tcp_states.h>
  46#include <net/ip6_checksum.h>
  47#include <net/xfrm.h>
  48#include <net/inet6_hashtables.h>
  49#include <net/busy_poll.h>
  50#include <net/sock_reuseport.h>
  51
  52#include <linux/proc_fs.h>
  53#include <linux/seq_file.h>
  54#include <trace/events/skb.h>
  55#include "udp_impl.h"
  56
  57static u32 udp6_ehashfn(const struct net *net,
  58                        const struct in6_addr *laddr,
  59                        const u16 lport,
  60                        const struct in6_addr *faddr,
  61                        const __be16 fport)
  62{
  63        static u32 udp6_ehash_secret __read_mostly;
  64        static u32 udp_ipv6_hash_secret __read_mostly;
  65
  66        u32 lhash, fhash;
  67
  68        net_get_random_once(&udp6_ehash_secret,
  69                            sizeof(udp6_ehash_secret));
  70        net_get_random_once(&udp_ipv6_hash_secret,
  71                            sizeof(udp_ipv6_hash_secret));
  72
  73        lhash = (__force u32)laddr->s6_addr32[3];
  74        fhash = __ipv6_addr_jhash(faddr, udp_ipv6_hash_secret);
  75
  76        return __inet6_ehashfn(lhash, lport, fhash, fport,
  77                               udp_ipv6_hash_secret + net_hash_mix(net));
  78}
  79
  80/* match_wildcard == true:  IPV6_ADDR_ANY equals to any IPv6 addresses if IPv6
  81 *                          only, and any IPv4 addresses if not IPv6 only
  82 * match_wildcard == false: addresses must be exactly the same, i.e.
  83 *                          IPV6_ADDR_ANY only equals to IPV6_ADDR_ANY,
  84 *                          and 0.0.0.0 equals to 0.0.0.0 only
  85 */
  86int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2,
  87                         bool match_wildcard)
  88{
  89        const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
  90        int sk2_ipv6only = inet_v6_ipv6only(sk2);
  91        int addr_type = ipv6_addr_type(&sk->sk_v6_rcv_saddr);
  92        int addr_type2 = sk2_rcv_saddr6 ? ipv6_addr_type(sk2_rcv_saddr6) : IPV6_ADDR_MAPPED;
  93
  94        /* if both are mapped, treat as IPv4 */
  95        if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED) {
  96                if (!sk2_ipv6only) {
  97                        if (sk->sk_rcv_saddr == sk2->sk_rcv_saddr)
  98                                return 1;
  99                        if (!sk->sk_rcv_saddr || !sk2->sk_rcv_saddr)
 100                                return match_wildcard;
 101                }
 102                return 0;
 103        }
 104
 105        if (addr_type == IPV6_ADDR_ANY && addr_type2 == IPV6_ADDR_ANY)
 106                return 1;
 107
 108        if (addr_type2 == IPV6_ADDR_ANY && match_wildcard &&
 109            !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
 110                return 1;
 111
 112        if (addr_type == IPV6_ADDR_ANY && match_wildcard &&
 113            !(ipv6_only_sock(sk) && addr_type2 == IPV6_ADDR_MAPPED))
 114                return 1;
 115
 116        if (sk2_rcv_saddr6 &&
 117            ipv6_addr_equal(&sk->sk_v6_rcv_saddr, sk2_rcv_saddr6))
 118                return 1;
 119
 120        return 0;
 121}
 122
 123static u32 udp6_portaddr_hash(const struct net *net,
 124                              const struct in6_addr *addr6,
 125                              unsigned int port)
 126{
 127        unsigned int hash, mix = net_hash_mix(net);
 128
 129        if (ipv6_addr_any(addr6))
 130                hash = jhash_1word(0, mix);
 131        else if (ipv6_addr_v4mapped(addr6))
 132                hash = jhash_1word((__force u32)addr6->s6_addr32[3], mix);
 133        else
 134                hash = jhash2((__force u32 *)addr6->s6_addr32, 4, mix);
 135
 136        return hash ^ port;
 137}
 138
 139int udp_v6_get_port(struct sock *sk, unsigned short snum)
 140{
 141        unsigned int hash2_nulladdr =
 142                udp6_portaddr_hash(sock_net(sk), &in6addr_any, snum);
 143        unsigned int hash2_partial =
 144                udp6_portaddr_hash(sock_net(sk), &sk->sk_v6_rcv_saddr, 0);
 145
 146        /* precompute partial secondary hash */
 147        udp_sk(sk)->udp_portaddr_hash = hash2_partial;
 148        return udp_lib_get_port(sk, snum, ipv6_rcv_saddr_equal, hash2_nulladdr);
 149}
 150
 151static void udp_v6_rehash(struct sock *sk)
 152{
 153        u16 new_hash = udp6_portaddr_hash(sock_net(sk),
 154                                          &sk->sk_v6_rcv_saddr,
 155                                          inet_sk(sk)->inet_num);
 156
 157        udp_lib_rehash(sk, new_hash);
 158}
 159
 160static inline int compute_score(struct sock *sk, struct net *net,
 161                                unsigned short hnum,
 162                                const struct in6_addr *saddr, __be16 sport,
 163                                const struct in6_addr *daddr, __be16 dport,
 164                                int dif)
 165{
 166        int score;
 167        struct inet_sock *inet;
 168
 169        if (!net_eq(sock_net(sk), net) ||
 170            udp_sk(sk)->udp_port_hash != hnum ||
 171            sk->sk_family != PF_INET6)
 172                return -1;
 173
 174        score = 0;
 175        inet = inet_sk(sk);
 176
 177        if (inet->inet_dport) {
 178                if (inet->inet_dport != sport)
 179                        return -1;
 180                score++;
 181        }
 182
 183        if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) {
 184                if (!ipv6_addr_equal(&sk->sk_v6_rcv_saddr, daddr))
 185                        return -1;
 186                score++;
 187        }
 188
 189        if (!ipv6_addr_any(&sk->sk_v6_daddr)) {
 190                if (!ipv6_addr_equal(&sk->sk_v6_daddr, saddr))
 191                        return -1;
 192                score++;
 193        }
 194
 195        if (sk->sk_bound_dev_if) {
 196                if (sk->sk_bound_dev_if != dif)
 197                        return -1;
 198                score++;
 199        }
 200
 201        if (sk->sk_incoming_cpu == raw_smp_processor_id())
 202                score++;
 203
 204        return score;
 205}
 206
 207static inline int compute_score2(struct sock *sk, struct net *net,
 208                                 const struct in6_addr *saddr, __be16 sport,
 209                                 const struct in6_addr *daddr,
 210                                 unsigned short hnum, int dif)
 211{
 212        int score;
 213        struct inet_sock *inet;
 214
 215        if (!net_eq(sock_net(sk), net) ||
 216            udp_sk(sk)->udp_port_hash != hnum ||
 217            sk->sk_family != PF_INET6)
 218                return -1;
 219
 220        if (!ipv6_addr_equal(&sk->sk_v6_rcv_saddr, daddr))
 221                return -1;
 222
 223        score = 0;
 224        inet = inet_sk(sk);
 225
 226        if (inet->inet_dport) {
 227                if (inet->inet_dport != sport)
 228                        return -1;
 229                score++;
 230        }
 231
 232        if (!ipv6_addr_any(&sk->sk_v6_daddr)) {
 233                if (!ipv6_addr_equal(&sk->sk_v6_daddr, saddr))
 234                        return -1;
 235                score++;
 236        }
 237
 238        if (sk->sk_bound_dev_if) {
 239                if (sk->sk_bound_dev_if != dif)
 240                        return -1;
 241                score++;
 242        }
 243
 244        if (sk->sk_incoming_cpu == raw_smp_processor_id())
 245                score++;
 246
 247        return score;
 248}
 249
 250/* called with read_rcu_lock() */
 251static struct sock *udp6_lib_lookup2(struct net *net,
 252                const struct in6_addr *saddr, __be16 sport,
 253                const struct in6_addr *daddr, unsigned int hnum, int dif,
 254                struct udp_hslot *hslot2, unsigned int slot2,
 255                struct sk_buff *skb)
 256{
 257        struct sock *sk, *result;
 258        struct hlist_nulls_node *node;
 259        int score, badness, matches = 0, reuseport = 0;
 260        bool select_ok = true;
 261        u32 hash = 0;
 262
 263begin:
 264        result = NULL;
 265        badness = -1;
 266        udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) {
 267                score = compute_score2(sk, net, saddr, sport,
 268                                      daddr, hnum, dif);
 269                if (score > badness) {
 270                        result = sk;
 271                        badness = score;
 272                        reuseport = sk->sk_reuseport;
 273                        if (reuseport) {
 274                                hash = udp6_ehashfn(net, daddr, hnum,
 275                                                    saddr, sport);
 276                                if (select_ok) {
 277                                        struct sock *sk2;
 278
 279                                        sk2 = reuseport_select_sock(sk, hash, skb,
 280                                                        sizeof(struct udphdr));
 281                                        if (sk2) {
 282                                                result = sk2;
 283                                                select_ok = false;
 284                                                goto found;
 285                                        }
 286                                }
 287                                matches = 1;
 288                        }
 289                } else if (score == badness && reuseport) {
 290                        matches++;
 291                        if (reciprocal_scale(hash, matches) == 0)
 292                                result = sk;
 293                        hash = next_pseudo_random32(hash);
 294                }
 295        }
 296        /*
 297         * if the nulls value we got at the end of this lookup is
 298         * not the expected one, we must restart lookup.
 299         * We probably met an item that was moved to another chain.
 300         */
 301        if (get_nulls_value(node) != slot2)
 302                goto begin;
 303
 304        if (result) {
 305found:
 306                if (unlikely(!atomic_inc_not_zero_hint(&result->sk_refcnt, 2)))
 307                        result = NULL;
 308                else if (unlikely(compute_score2(result, net, saddr, sport,
 309                                  daddr, hnum, dif) < badness)) {
 310                        sock_put(result);
 311                        goto begin;
 312                }
 313        }
 314        return result;
 315}
 316
 317struct sock *__udp6_lib_lookup(struct net *net,
 318                                      const struct in6_addr *saddr, __be16 sport,
 319                                      const struct in6_addr *daddr, __be16 dport,
 320                                      int dif, struct udp_table *udptable,
 321                                      struct sk_buff *skb)
 322{
 323        struct sock *sk, *result;
 324        struct hlist_nulls_node *node;
 325        unsigned short hnum = ntohs(dport);
 326        unsigned int hash2, slot2, slot = udp_hashfn(net, hnum, udptable->mask);
 327        struct udp_hslot *hslot2, *hslot = &udptable->hash[slot];
 328        int score, badness, matches = 0, reuseport = 0;
 329        bool select_ok = true;
 330        u32 hash = 0;
 331
 332        rcu_read_lock();
 333        if (hslot->count > 10) {
 334                hash2 = udp6_portaddr_hash(net, daddr, hnum);
 335                slot2 = hash2 & udptable->mask;
 336                hslot2 = &udptable->hash2[slot2];
 337                if (hslot->count < hslot2->count)
 338                        goto begin;
 339
 340                result = udp6_lib_lookup2(net, saddr, sport,
 341                                          daddr, hnum, dif,
 342                                          hslot2, slot2, skb);
 343                if (!result) {
 344                        hash2 = udp6_portaddr_hash(net, &in6addr_any, hnum);
 345                        slot2 = hash2 & udptable->mask;
 346                        hslot2 = &udptable->hash2[slot2];
 347                        if (hslot->count < hslot2->count)
 348                                goto begin;
 349
 350                        result = udp6_lib_lookup2(net, saddr, sport,
 351                                                  &in6addr_any, hnum, dif,
 352                                                  hslot2, slot2, skb);
 353                }
 354                rcu_read_unlock();
 355                return result;
 356        }
 357begin:
 358        result = NULL;
 359        badness = -1;
 360        sk_nulls_for_each_rcu(sk, node, &hslot->head) {
 361                score = compute_score(sk, net, hnum, saddr, sport, daddr, dport, dif);
 362                if (score > badness) {
 363                        result = sk;
 364                        badness = score;
 365                        reuseport = sk->sk_reuseport;
 366                        if (reuseport) {
 367                                hash = udp6_ehashfn(net, daddr, hnum,
 368                                                    saddr, sport);
 369                                if (select_ok) {
 370                                        struct sock *sk2;
 371
 372                                        sk2 = reuseport_select_sock(sk, hash, skb,
 373                                                        sizeof(struct udphdr));
 374                                        if (sk2) {
 375                                                result = sk2;
 376                                                select_ok = false;
 377                                                goto found;
 378                                        }
 379                                }
 380                                matches = 1;
 381                        }
 382                } else if (score == badness && reuseport) {
 383                        matches++;
 384                        if (reciprocal_scale(hash, matches) == 0)
 385                                result = sk;
 386                        hash = next_pseudo_random32(hash);
 387                }
 388        }
 389        /*
 390         * if the nulls value we got at the end of this lookup is
 391         * not the expected one, we must restart lookup.
 392         * We probably met an item that was moved to another chain.
 393         */
 394        if (get_nulls_value(node) != slot)
 395                goto begin;
 396
 397        if (result) {
 398found:
 399                if (unlikely(!atomic_inc_not_zero_hint(&result->sk_refcnt, 2)))
 400                        result = NULL;
 401                else if (unlikely(compute_score(result, net, hnum, saddr, sport,
 402                                        daddr, dport, dif) < badness)) {
 403                        sock_put(result);
 404                        goto begin;
 405                }
 406        }
 407        rcu_read_unlock();
 408        return result;
 409}
 410EXPORT_SYMBOL_GPL(__udp6_lib_lookup);
 411
 412static struct sock *__udp6_lib_lookup_skb(struct sk_buff *skb,
 413                                          __be16 sport, __be16 dport,
 414                                          struct udp_table *udptable)
 415{
 416        struct sock *sk;
 417        const struct ipv6hdr *iph = ipv6_hdr(skb);
 418
 419        sk = skb_steal_sock(skb);
 420        if (unlikely(sk))
 421                return sk;
 422        return __udp6_lib_lookup(dev_net(skb_dst(skb)->dev), &iph->saddr, sport,
 423                                 &iph->daddr, dport, inet6_iif(skb),
 424                                 udptable, skb);
 425}
 426
 427struct sock *udp6_lib_lookup(struct net *net, const struct in6_addr *saddr, __be16 sport,
 428                             const struct in6_addr *daddr, __be16 dport, int dif)
 429{
 430        return __udp6_lib_lookup(net, saddr, sport, daddr, dport, dif, &udp_table, NULL);
 431}
 432EXPORT_SYMBOL_GPL(udp6_lib_lookup);
 433
 434/*
 435 *      This should be easy, if there is something there we
 436 *      return it, otherwise we block.
 437 */
 438
 439int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 440                  int noblock, int flags, int *addr_len)
 441{
 442        struct ipv6_pinfo *np = inet6_sk(sk);
 443        struct inet_sock *inet = inet_sk(sk);
 444        struct sk_buff *skb;
 445        unsigned int ulen, copied;
 446        int peeked, off = 0;
 447        int err;
 448        int is_udplite = IS_UDPLITE(sk);
 449        bool checksum_valid = false;
 450        int is_udp4;
 451        bool slow;
 452
 453        if (flags & MSG_ERRQUEUE)
 454                return ipv6_recv_error(sk, msg, len, addr_len);
 455
 456        if (np->rxpmtu && np->rxopt.bits.rxpmtu)
 457                return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
 458
 459try_again:
 460        skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
 461                                  &peeked, &off, &err);
 462        if (!skb)
 463                goto out;
 464
 465        ulen = skb->len - sizeof(struct udphdr);
 466        copied = len;
 467        if (copied > ulen)
 468                copied = ulen;
 469        else if (copied < ulen)
 470                msg->msg_flags |= MSG_TRUNC;
 471
 472        is_udp4 = (skb->protocol == htons(ETH_P_IP));
 473
 474        /*
 475         * If checksum is needed at all, try to do it while copying the
 476         * data.  If the data is truncated, or if we only want a partial
 477         * coverage checksum (UDP-Lite), do it before the copy.
 478         */
 479
 480        if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
 481                checksum_valid = !udp_lib_checksum_complete(skb);
 482                if (!checksum_valid)
 483                        goto csum_copy_err;
 484        }
 485
 486        if (checksum_valid || skb_csum_unnecessary(skb))
 487                err = skb_copy_datagram_msg(skb, sizeof(struct udphdr),
 488                                            msg, copied);
 489        else {
 490                err = skb_copy_and_csum_datagram_msg(skb, sizeof(struct udphdr), msg);
 491                if (err == -EINVAL)
 492                        goto csum_copy_err;
 493        }
 494        if (unlikely(err)) {
 495                trace_kfree_skb(skb, udpv6_recvmsg);
 496                if (!peeked) {
 497                        atomic_inc(&sk->sk_drops);
 498                        if (is_udp4)
 499                                UDP_INC_STATS_USER(sock_net(sk),
 500                                                   UDP_MIB_INERRORS,
 501                                                   is_udplite);
 502                        else
 503                                UDP6_INC_STATS_USER(sock_net(sk),
 504                                                    UDP_MIB_INERRORS,
 505                                                    is_udplite);
 506                }
 507                goto out_free;
 508        }
 509        if (!peeked) {
 510                if (is_udp4)
 511                        UDP_INC_STATS_USER(sock_net(sk),
 512                                        UDP_MIB_INDATAGRAMS, is_udplite);
 513                else
 514                        UDP6_INC_STATS_USER(sock_net(sk),
 515                                        UDP_MIB_INDATAGRAMS, is_udplite);
 516        }
 517
 518        sock_recv_ts_and_drops(msg, sk, skb);
 519
 520        /* Copy the address. */
 521        if (msg->msg_name) {
 522                DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
 523                sin6->sin6_family = AF_INET6;
 524                sin6->sin6_port = udp_hdr(skb)->source;
 525                sin6->sin6_flowinfo = 0;
 526
 527                if (is_udp4) {
 528                        ipv6_addr_set_v4mapped(ip_hdr(skb)->saddr,
 529                                               &sin6->sin6_addr);
 530                        sin6->sin6_scope_id = 0;
 531                } else {
 532                        sin6->sin6_addr = ipv6_hdr(skb)->saddr;
 533                        sin6->sin6_scope_id =
 534                                ipv6_iface_scope_id(&sin6->sin6_addr,
 535                                                    inet6_iif(skb));
 536                }
 537                *addr_len = sizeof(*sin6);
 538        }
 539
 540        if (np->rxopt.all)
 541                ip6_datagram_recv_common_ctl(sk, msg, skb);
 542
 543        if (is_udp4) {
 544                if (inet->cmsg_flags)
 545                        ip_cmsg_recv(msg, skb);
 546        } else {
 547                if (np->rxopt.all)
 548                        ip6_datagram_recv_specific_ctl(sk, msg, skb);
 549        }
 550
 551        err = copied;
 552        if (flags & MSG_TRUNC)
 553                err = ulen;
 554
 555out_free:
 556        skb_free_datagram_locked(sk, skb);
 557out:
 558        return err;
 559
 560csum_copy_err:
 561        slow = lock_sock_fast(sk);
 562        if (!skb_kill_datagram(sk, skb, flags)) {
 563                if (is_udp4) {
 564                        UDP_INC_STATS_USER(sock_net(sk),
 565                                        UDP_MIB_CSUMERRORS, is_udplite);
 566                        UDP_INC_STATS_USER(sock_net(sk),
 567                                        UDP_MIB_INERRORS, is_udplite);
 568                } else {
 569                        UDP6_INC_STATS_USER(sock_net(sk),
 570                                        UDP_MIB_CSUMERRORS, is_udplite);
 571                        UDP6_INC_STATS_USER(sock_net(sk),
 572                                        UDP_MIB_INERRORS, is_udplite);
 573                }
 574        }
 575        unlock_sock_fast(sk, slow);
 576
 577        /* starting over for a new packet, but check if we need to yield */
 578        cond_resched();
 579        msg->msg_flags &= ~MSG_TRUNC;
 580        goto try_again;
 581}
 582
 583void __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 584                    u8 type, u8 code, int offset, __be32 info,
 585                    struct udp_table *udptable)
 586{
 587        struct ipv6_pinfo *np;
 588        const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data;
 589        const struct in6_addr *saddr = &hdr->saddr;
 590        const struct in6_addr *daddr = &hdr->daddr;
 591        struct udphdr *uh = (struct udphdr *)(skb->data+offset);
 592        struct sock *sk;
 593        int err;
 594        struct net *net = dev_net(skb->dev);
 595
 596        sk = __udp6_lib_lookup(net, daddr, uh->dest, saddr, uh->source,
 597                               inet6_iif(skb), udptable, skb);
 598        if (!sk) {
 599                ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
 600                                   ICMP6_MIB_INERRORS);
 601                return;
 602        }
 603
 604        if (type == ICMPV6_PKT_TOOBIG) {
 605                if (!ip6_sk_accept_pmtu(sk))
 606                        goto out;
 607                ip6_sk_update_pmtu(skb, sk, info);
 608        }
 609        if (type == NDISC_REDIRECT) {
 610                ip6_sk_redirect(skb, sk);
 611                goto out;
 612        }
 613
 614        np = inet6_sk(sk);
 615
 616        if (!icmpv6_err_convert(type, code, &err) && !np->recverr)
 617                goto out;
 618
 619        if (sk->sk_state != TCP_ESTABLISHED && !np->recverr)
 620                goto out;
 621
 622        if (np->recverr)
 623                ipv6_icmp_error(sk, skb, err, uh->dest, ntohl(info), (u8 *)(uh+1));
 624
 625        sk->sk_err = err;
 626        sk->sk_error_report(sk);
 627out:
 628        sock_put(sk);
 629}
 630
 631static int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 632{
 633        int rc;
 634
 635        if (!ipv6_addr_any(&sk->sk_v6_daddr)) {
 636                sock_rps_save_rxhash(sk, skb);
 637                sk_mark_napi_id(sk, skb);
 638                sk_incoming_cpu_update(sk);
 639        }
 640
 641        rc = sock_queue_rcv_skb(sk, skb);
 642        if (rc < 0) {
 643                int is_udplite = IS_UDPLITE(sk);
 644
 645                /* Note that an ENOMEM error is charged twice */
 646                if (rc == -ENOMEM)
 647                        UDP6_INC_STATS_BH(sock_net(sk),
 648                                        UDP_MIB_RCVBUFERRORS, is_udplite);
 649                UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
 650                kfree_skb(skb);
 651                return -1;
 652        }
 653        return 0;
 654}
 655
 656static __inline__ void udpv6_err(struct sk_buff *skb,
 657                                 struct inet6_skb_parm *opt, u8 type,
 658                                 u8 code, int offset, __be32 info)
 659{
 660        __udp6_lib_err(skb, opt, type, code, offset, info, &udp_table);
 661}
 662
 663static struct static_key udpv6_encap_needed __read_mostly;
 664void udpv6_encap_enable(void)
 665{
 666        if (!static_key_enabled(&udpv6_encap_needed))
 667                static_key_slow_inc(&udpv6_encap_needed);
 668}
 669EXPORT_SYMBOL(udpv6_encap_enable);
 670
 671int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 672{
 673        struct udp_sock *up = udp_sk(sk);
 674        int rc;
 675        int is_udplite = IS_UDPLITE(sk);
 676
 677        if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
 678                goto drop;
 679
 680        if (static_key_false(&udpv6_encap_needed) && up->encap_type) {
 681                int (*encap_rcv)(struct sock *sk, struct sk_buff *skb);
 682
 683                /*
 684                 * This is an encapsulation socket so pass the skb to
 685                 * the socket's udp_encap_rcv() hook. Otherwise, just
 686                 * fall through and pass this up the UDP socket.
 687                 * up->encap_rcv() returns the following value:
 688                 * =0 if skb was successfully passed to the encap
 689                 *    handler or was discarded by it.
 690                 * >0 if skb should be passed on to UDP.
 691                 * <0 if skb should be resubmitted as proto -N
 692                 */
 693
 694                /* if we're overly short, let UDP handle it */
 695                encap_rcv = ACCESS_ONCE(up->encap_rcv);
 696                if (skb->len > sizeof(struct udphdr) && encap_rcv) {
 697                        int ret;
 698
 699                        /* Verify checksum before giving to encap */
 700                        if (udp_lib_checksum_complete(skb))
 701                                goto csum_error;
 702
 703                        ret = encap_rcv(sk, skb);
 704                        if (ret <= 0) {
 705                                UDP_INC_STATS_BH(sock_net(sk),
 706                                                 UDP_MIB_INDATAGRAMS,
 707                                                 is_udplite);
 708                                return -ret;
 709                        }
 710                }
 711
 712                /* FALLTHROUGH -- it's a UDP Packet */
 713        }
 714
 715        /*
 716         * UDP-Lite specific tests, ignored on UDP sockets (see net/ipv4/udp.c).
 717         */
 718        if ((is_udplite & UDPLITE_RECV_CC)  &&  UDP_SKB_CB(skb)->partial_cov) {
 719
 720                if (up->pcrlen == 0) {          /* full coverage was set  */
 721                        net_dbg_ratelimited("UDPLITE6: partial coverage %d while full coverage %d requested\n",
 722                                            UDP_SKB_CB(skb)->cscov, skb->len);
 723                        goto drop;
 724                }
 725                if (UDP_SKB_CB(skb)->cscov  <  up->pcrlen) {
 726                        net_dbg_ratelimited("UDPLITE6: coverage %d too small, need min %d\n",
 727                                            UDP_SKB_CB(skb)->cscov, up->pcrlen);
 728                        goto drop;
 729                }
 730        }
 731
 732        if (rcu_access_pointer(sk->sk_filter)) {
 733                if (udp_lib_checksum_complete(skb))
 734                        goto csum_error;
 735        }
 736
 737        if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
 738                UDP6_INC_STATS_BH(sock_net(sk),
 739                                  UDP_MIB_RCVBUFERRORS, is_udplite);
 740                goto drop;
 741        }
 742
 743        skb_dst_drop(skb);
 744
 745        bh_lock_sock(sk);
 746        rc = 0;
 747        if (!sock_owned_by_user(sk))
 748                rc = __udpv6_queue_rcv_skb(sk, skb);
 749        else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
 750                bh_unlock_sock(sk);
 751                goto drop;
 752        }
 753        bh_unlock_sock(sk);
 754
 755        return rc;
 756
 757csum_error:
 758        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
 759drop:
 760        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
 761        atomic_inc(&sk->sk_drops);
 762        kfree_skb(skb);
 763        return -1;
 764}
 765
 766static bool __udp_v6_is_mcast_sock(struct net *net, struct sock *sk,
 767                                   __be16 loc_port, const struct in6_addr *loc_addr,
 768                                   __be16 rmt_port, const struct in6_addr *rmt_addr,
 769                                   int dif, unsigned short hnum)
 770{
 771        struct inet_sock *inet = inet_sk(sk);
 772
 773        if (!net_eq(sock_net(sk), net))
 774                return false;
 775
 776        if (udp_sk(sk)->udp_port_hash != hnum ||
 777            sk->sk_family != PF_INET6 ||
 778            (inet->inet_dport && inet->inet_dport != rmt_port) ||
 779            (!ipv6_addr_any(&sk->sk_v6_daddr) &&
 780                    !ipv6_addr_equal(&sk->sk_v6_daddr, rmt_addr)) ||
 781            (sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif) ||
 782            (!ipv6_addr_any(&sk->sk_v6_rcv_saddr) &&
 783                    !ipv6_addr_equal(&sk->sk_v6_rcv_saddr, loc_addr)))
 784                return false;
 785        if (!inet6_mc_check(sk, loc_addr, rmt_addr))
 786                return false;
 787        return true;
 788}
 789
 790static void flush_stack(struct sock **stack, unsigned int count,
 791                        struct sk_buff *skb, unsigned int final)
 792{
 793        struct sk_buff *skb1 = NULL;
 794        struct sock *sk;
 795        unsigned int i;
 796
 797        for (i = 0; i < count; i++) {
 798                sk = stack[i];
 799                if (likely(!skb1))
 800                        skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
 801                if (!skb1) {
 802                        atomic_inc(&sk->sk_drops);
 803                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
 804                                          IS_UDPLITE(sk));
 805                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
 806                                          IS_UDPLITE(sk));
 807                }
 808
 809                if (skb1 && udpv6_queue_rcv_skb(sk, skb1) <= 0)
 810                        skb1 = NULL;
 811                sock_put(sk);
 812        }
 813        if (unlikely(skb1))
 814                kfree_skb(skb1);
 815}
 816
 817static void udp6_csum_zero_error(struct sk_buff *skb)
 818{
 819        /* RFC 2460 section 8.1 says that we SHOULD log
 820         * this error. Well, it is reasonable.
 821         */
 822        net_dbg_ratelimited("IPv6: udp checksum is 0 for [%pI6c]:%u->[%pI6c]:%u\n",
 823                            &ipv6_hdr(skb)->saddr, ntohs(udp_hdr(skb)->source),
 824                            &ipv6_hdr(skb)->daddr, ntohs(udp_hdr(skb)->dest));
 825}
 826
 827/*
 828 * Note: called only from the BH handler context,
 829 * so we don't need to lock the hashes.
 830 */
 831static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
 832                const struct in6_addr *saddr, const struct in6_addr *daddr,
 833                struct udp_table *udptable, int proto)
 834{
 835        struct sock *sk, *stack[256 / sizeof(struct sock *)];
 836        const struct udphdr *uh = udp_hdr(skb);
 837        struct hlist_nulls_node *node;
 838        unsigned short hnum = ntohs(uh->dest);
 839        struct udp_hslot *hslot = udp_hashslot(udptable, net, hnum);
 840        int dif = inet6_iif(skb);
 841        unsigned int count = 0, offset = offsetof(typeof(*sk), sk_nulls_node);
 842        unsigned int hash2 = 0, hash2_any = 0, use_hash2 = (hslot->count > 10);
 843        bool inner_flushed = false;
 844
 845        if (use_hash2) {
 846                hash2_any = udp6_portaddr_hash(net, &in6addr_any, hnum) &
 847                            udp_table.mask;
 848                hash2 = udp6_portaddr_hash(net, daddr, hnum) & udp_table.mask;
 849start_lookup:
 850                hslot = &udp_table.hash2[hash2];
 851                offset = offsetof(typeof(*sk), __sk_common.skc_portaddr_node);
 852        }
 853
 854        spin_lock(&hslot->lock);
 855        sk_nulls_for_each_entry_offset(sk, node, &hslot->head, offset) {
 856                if (__udp_v6_is_mcast_sock(net, sk,
 857                                           uh->dest, daddr,
 858                                           uh->source, saddr,
 859                                           dif, hnum) &&
 860                    /* If zero checksum and no_check is not on for
 861                     * the socket then skip it.
 862                     */
 863                    (uh->check || udp_sk(sk)->no_check6_rx)) {
 864                        if (unlikely(count == ARRAY_SIZE(stack))) {
 865                                flush_stack(stack, count, skb, ~0);
 866                                inner_flushed = true;
 867                                count = 0;
 868                        }
 869                        stack[count++] = sk;
 870                        sock_hold(sk);
 871                }
 872        }
 873
 874        spin_unlock(&hslot->lock);
 875
 876        /* Also lookup *:port if we are using hash2 and haven't done so yet. */
 877        if (use_hash2 && hash2 != hash2_any) {
 878                hash2 = hash2_any;
 879                goto start_lookup;
 880        }
 881
 882        if (count) {
 883                flush_stack(stack, count, skb, count - 1);
 884        } else {
 885                if (!inner_flushed)
 886                        UDP_INC_STATS_BH(net, UDP_MIB_IGNOREDMULTI,
 887                                         proto == IPPROTO_UDPLITE);
 888                consume_skb(skb);
 889        }
 890        return 0;
 891}
 892
 893int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
 894                   int proto)
 895{
 896        struct net *net = dev_net(skb->dev);
 897        struct sock *sk;
 898        struct udphdr *uh;
 899        const struct in6_addr *saddr, *daddr;
 900        u32 ulen = 0;
 901
 902        if (!pskb_may_pull(skb, sizeof(struct udphdr)))
 903                goto discard;
 904
 905        saddr = &ipv6_hdr(skb)->saddr;
 906        daddr = &ipv6_hdr(skb)->daddr;
 907        uh = udp_hdr(skb);
 908
 909        ulen = ntohs(uh->len);
 910        if (ulen > skb->len)
 911                goto short_packet;
 912
 913        if (proto == IPPROTO_UDP) {
 914                /* UDP validates ulen. */
 915
 916                /* Check for jumbo payload */
 917                if (ulen == 0)
 918                        ulen = skb->len;
 919
 920                if (ulen < sizeof(*uh))
 921                        goto short_packet;
 922
 923                if (ulen < skb->len) {
 924                        if (pskb_trim_rcsum(skb, ulen))
 925                                goto short_packet;
 926                        saddr = &ipv6_hdr(skb)->saddr;
 927                        daddr = &ipv6_hdr(skb)->daddr;
 928                        uh = udp_hdr(skb);
 929                }
 930        }
 931
 932        if (udp6_csum_init(skb, uh, proto))
 933                goto csum_error;
 934
 935        /*
 936         *      Multicast receive code
 937         */
 938        if (ipv6_addr_is_multicast(daddr))
 939                return __udp6_lib_mcast_deliver(net, skb,
 940                                saddr, daddr, udptable, proto);
 941
 942        /* Unicast */
 943
 944        /*
 945         * check socket cache ... must talk to Alan about his plans
 946         * for sock caches... i'll skip this for now.
 947         */
 948        sk = __udp6_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
 949        if (sk) {
 950                int ret;
 951
 952                if (!uh->check && !udp_sk(sk)->no_check6_rx) {
 953                        sock_put(sk);
 954                        udp6_csum_zero_error(skb);
 955                        goto csum_error;
 956                }
 957
 958                if (inet_get_convert_csum(sk) && uh->check && !IS_UDPLITE(sk))
 959                        skb_checksum_try_convert(skb, IPPROTO_UDP, uh->check,
 960                                                 ip6_compute_pseudo);
 961
 962                ret = udpv6_queue_rcv_skb(sk, skb);
 963                sock_put(sk);
 964
 965                /* a return value > 0 means to resubmit the input */
 966                if (ret > 0)
 967                        return ret;
 968
 969                return 0;
 970        }
 971
 972        if (!uh->check) {
 973                udp6_csum_zero_error(skb);
 974                goto csum_error;
 975        }
 976
 977        if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
 978                goto discard;
 979
 980        if (udp_lib_checksum_complete(skb))
 981                goto csum_error;
 982
 983        UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
 984        icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0);
 985
 986        kfree_skb(skb);
 987        return 0;
 988
 989short_packet:
 990        net_dbg_ratelimited("UDP%sv6: short packet: From [%pI6c]:%u %d/%d to [%pI6c]:%u\n",
 991                            proto == IPPROTO_UDPLITE ? "-Lite" : "",
 992                            saddr, ntohs(uh->source),
 993                            ulen, skb->len,
 994                            daddr, ntohs(uh->dest));
 995        goto discard;
 996csum_error:
 997        UDP6_INC_STATS_BH(net, UDP_MIB_CSUMERRORS, proto == IPPROTO_UDPLITE);
 998discard:
 999        UDP6_INC_STATS_BH(net, UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
1000        kfree_skb(skb);
1001        return 0;
1002}
1003
1004static __inline__ int udpv6_rcv(struct sk_buff *skb)
1005{
1006        return __udp6_lib_rcv(skb, &udp_table, IPPROTO_UDP);
1007}
1008
1009/*
1010 * Throw away all pending data and cancel the corking. Socket is locked.
1011 */
1012static void udp_v6_flush_pending_frames(struct sock *sk)
1013{
1014        struct udp_sock *up = udp_sk(sk);
1015
1016        if (up->pending == AF_INET)
1017                udp_flush_pending_frames(sk);
1018        else if (up->pending) {
1019                up->len = 0;
1020                up->pending = 0;
1021                ip6_flush_pending_frames(sk);
1022        }
1023}
1024
1025/**
1026 *      udp6_hwcsum_outgoing  -  handle outgoing HW checksumming
1027 *      @sk:    socket we are sending on
1028 *      @skb:   sk_buff containing the filled-in UDP header
1029 *              (checksum field must be zeroed out)
1030 */
1031static void udp6_hwcsum_outgoing(struct sock *sk, struct sk_buff *skb,
1032                                 const struct in6_addr *saddr,
1033                                 const struct in6_addr *daddr, int len)
1034{
1035        unsigned int offset;
1036        struct udphdr *uh = udp_hdr(skb);
1037        struct sk_buff *frags = skb_shinfo(skb)->frag_list;
1038        __wsum csum = 0;
1039
1040        if (!frags) {
1041                /* Only one fragment on the socket.  */
1042                skb->csum_start = skb_transport_header(skb) - skb->head;
1043                skb->csum_offset = offsetof(struct udphdr, check);
1044                uh->check = ~csum_ipv6_magic(saddr, daddr, len, IPPROTO_UDP, 0);
1045        } else {
1046                /*
1047                 * HW-checksum won't work as there are two or more
1048                 * fragments on the socket so that all csums of sk_buffs
1049                 * should be together
1050                 */
1051                offset = skb_transport_offset(skb);
1052                skb->csum = skb_checksum(skb, offset, skb->len - offset, 0);
1053
1054                skb->ip_summed = CHECKSUM_NONE;
1055
1056                do {
1057                        csum = csum_add(csum, frags->csum);
1058                } while ((frags = frags->next));
1059
1060                uh->check = csum_ipv6_magic(saddr, daddr, len, IPPROTO_UDP,
1061                                            csum);
1062                if (uh->check == 0)
1063                        uh->check = CSUM_MANGLED_0;
1064        }
1065}
1066
1067/*
1068 *      Sending
1069 */
1070
1071static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6)
1072{
1073        struct sock *sk = skb->sk;
1074        struct udphdr *uh;
1075        int err = 0;
1076        int is_udplite = IS_UDPLITE(sk);
1077        __wsum csum = 0;
1078        int offset = skb_transport_offset(skb);
1079        int len = skb->len - offset;
1080
1081        /*
1082         * Create a UDP header
1083         */
1084        uh = udp_hdr(skb);
1085        uh->source = fl6->fl6_sport;
1086        uh->dest = fl6->fl6_dport;
1087        uh->len = htons(len);
1088        uh->check = 0;
1089
1090        if (is_udplite)
1091                csum = udplite_csum(skb);
1092        else if (udp_sk(sk)->no_check6_tx) {   /* UDP csum disabled */
1093                skb->ip_summed = CHECKSUM_NONE;
1094                goto send;
1095        } else if (skb->ip_summed == CHECKSUM_PARTIAL) { /* UDP hardware csum */
1096                udp6_hwcsum_outgoing(sk, skb, &fl6->saddr, &fl6->daddr, len);
1097                goto send;
1098        } else
1099                csum = udp_csum(skb);
1100
1101        /* add protocol-dependent pseudo-header */
1102        uh->check = csum_ipv6_magic(&fl6->saddr, &fl6->daddr,
1103                                    len, fl6->flowi6_proto, csum);
1104        if (uh->check == 0)
1105                uh->check = CSUM_MANGLED_0;
1106
1107send:
1108        err = ip6_send_skb(skb);
1109        if (err) {
1110                if (err == -ENOBUFS && !inet6_sk(sk)->recverr) {
1111                        UDP6_INC_STATS_USER(sock_net(sk),
1112                                            UDP_MIB_SNDBUFERRORS, is_udplite);
1113                        err = 0;
1114                }
1115        } else
1116                UDP6_INC_STATS_USER(sock_net(sk),
1117                                    UDP_MIB_OUTDATAGRAMS, is_udplite);
1118        return err;
1119}
1120
1121static int udp_v6_push_pending_frames(struct sock *sk)
1122{
1123        struct sk_buff *skb;
1124        struct udp_sock  *up = udp_sk(sk);
1125        struct flowi6 fl6;
1126        int err = 0;
1127
1128        if (up->pending == AF_INET)
1129                return udp_push_pending_frames(sk);
1130
1131        /* ip6_finish_skb will release the cork, so make a copy of
1132         * fl6 here.
1133         */
1134        fl6 = inet_sk(sk)->cork.fl.u.ip6;
1135
1136        skb = ip6_finish_skb(sk);
1137        if (!skb)
1138                goto out;
1139
1140        err = udp_v6_send_skb(skb, &fl6);
1141
1142out:
1143        up->len = 0;
1144        up->pending = 0;
1145        return err;
1146}
1147
1148int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
1149{
1150        struct ipv6_txoptions opt_space;
1151        struct udp_sock *up = udp_sk(sk);
1152        struct inet_sock *inet = inet_sk(sk);
1153        struct ipv6_pinfo *np = inet6_sk(sk);
1154        DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
1155        struct in6_addr *daddr, *final_p, final;
1156        struct ipv6_txoptions *opt = NULL;
1157        struct ipv6_txoptions *opt_to_free = NULL;
1158        struct ip6_flowlabel *flowlabel = NULL;
1159        struct flowi6 fl6;
1160        struct dst_entry *dst;
1161        int addr_len = msg->msg_namelen;
1162        int ulen = len;
1163        int hlimit = -1;
1164        int tclass = -1;
1165        int dontfrag = -1;
1166        int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
1167        int err;
1168        int connected = 0;
1169        int is_udplite = IS_UDPLITE(sk);
1170        int (*getfrag)(void *, char *, int, int, int, struct sk_buff *);
1171
1172        /* destination address check */
1173        if (sin6) {
1174                if (addr_len < offsetof(struct sockaddr, sa_data))
1175                        return -EINVAL;
1176
1177                switch (sin6->sin6_family) {
1178                case AF_INET6:
1179                        if (addr_len < SIN6_LEN_RFC2133)
1180                                return -EINVAL;
1181                        daddr = &sin6->sin6_addr;
1182                        break;
1183                case AF_INET:
1184                        goto do_udp_sendmsg;
1185                case AF_UNSPEC:
1186                        msg->msg_name = sin6 = NULL;
1187                        msg->msg_namelen = addr_len = 0;
1188                        daddr = NULL;
1189                        break;
1190                default:
1191                        return -EINVAL;
1192                }
1193        } else if (!up->pending) {
1194                if (sk->sk_state != TCP_ESTABLISHED)
1195                        return -EDESTADDRREQ;
1196                daddr = &sk->sk_v6_daddr;
1197        } else
1198                daddr = NULL;
1199
1200        if (daddr) {
1201                if (ipv6_addr_v4mapped(daddr)) {
1202                        struct sockaddr_in sin;
1203                        sin.sin_family = AF_INET;
1204                        sin.sin_port = sin6 ? sin6->sin6_port : inet->inet_dport;
1205                        sin.sin_addr.s_addr = daddr->s6_addr32[3];
1206                        msg->msg_name = &sin;
1207                        msg->msg_namelen = sizeof(sin);
1208do_udp_sendmsg:
1209                        if (__ipv6_only_sock(sk))
1210                                return -ENETUNREACH;
1211                        return udp_sendmsg(sk, msg, len);
1212                }
1213        }
1214
1215        if (up->pending == AF_INET)
1216                return udp_sendmsg(sk, msg, len);
1217
1218        /* Rough check on arithmetic overflow,
1219           better check is made in ip6_append_data().
1220           */
1221        if (len > INT_MAX - sizeof(struct udphdr))
1222                return -EMSGSIZE;
1223
1224        getfrag  =  is_udplite ?  udplite_getfrag : ip_generic_getfrag;
1225        if (up->pending) {
1226                /*
1227                 * There are pending frames.
1228                 * The socket lock must be held while it's corked.
1229                 */
1230                lock_sock(sk);
1231                if (likely(up->pending)) {
1232                        if (unlikely(up->pending != AF_INET6)) {
1233                                release_sock(sk);
1234                                return -EAFNOSUPPORT;
1235                        }
1236                        dst = NULL;
1237                        goto do_append_data;
1238                }
1239                release_sock(sk);
1240        }
1241        ulen += sizeof(struct udphdr);
1242
1243        memset(&fl6, 0, sizeof(fl6));
1244
1245        if (sin6) {
1246                if (sin6->sin6_port == 0)
1247                        return -EINVAL;
1248
1249                fl6.fl6_dport = sin6->sin6_port;
1250                daddr = &sin6->sin6_addr;
1251
1252                if (np->sndflow) {
1253                        fl6.flowlabel = sin6->sin6_flowinfo&IPV6_FLOWINFO_MASK;
1254                        if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
1255                                flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
1256                                if (!flowlabel)
1257                                        return -EINVAL;
1258                        }
1259                }
1260
1261                /*
1262                 * Otherwise it will be difficult to maintain
1263                 * sk->sk_dst_cache.
1264                 */
1265                if (sk->sk_state == TCP_ESTABLISHED &&
1266                    ipv6_addr_equal(daddr, &sk->sk_v6_daddr))
1267                        daddr = &sk->sk_v6_daddr;
1268
1269                if (addr_len >= sizeof(struct sockaddr_in6) &&
1270                    sin6->sin6_scope_id &&
1271                    __ipv6_addr_needs_scope_id(__ipv6_addr_type(daddr)))
1272                        fl6.flowi6_oif = sin6->sin6_scope_id;
1273        } else {
1274                if (sk->sk_state != TCP_ESTABLISHED)
1275                        return -EDESTADDRREQ;
1276
1277                fl6.fl6_dport = inet->inet_dport;
1278                daddr = &sk->sk_v6_daddr;
1279                fl6.flowlabel = np->flow_label;
1280                connected = 1;
1281        }
1282
1283        if (!fl6.flowi6_oif)
1284                fl6.flowi6_oif = sk->sk_bound_dev_if;
1285
1286        if (!fl6.flowi6_oif)
1287                fl6.flowi6_oif = np->sticky_pktinfo.ipi6_ifindex;
1288
1289        fl6.flowi6_mark = sk->sk_mark;
1290
1291        if (msg->msg_controllen) {
1292                opt = &opt_space;
1293                memset(opt, 0, sizeof(struct ipv6_txoptions));
1294                opt->tot_len = sizeof(*opt);
1295
1296                err = ip6_datagram_send_ctl(sock_net(sk), sk, msg, &fl6, opt,
1297                                            &hlimit, &tclass, &dontfrag);
1298                if (err < 0) {
1299                        fl6_sock_release(flowlabel);
1300                        return err;
1301                }
1302                if ((fl6.flowlabel&IPV6_FLOWLABEL_MASK) && !flowlabel) {
1303                        flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
1304                        if (!flowlabel)
1305                                return -EINVAL;
1306                }
1307                if (!(opt->opt_nflen|opt->opt_flen))
1308                        opt = NULL;
1309                connected = 0;
1310        }
1311        if (!opt) {
1312                opt = txopt_get(np);
1313                opt_to_free = opt;
1314        }
1315        if (flowlabel)
1316                opt = fl6_merge_options(&opt_space, flowlabel, opt);
1317        opt = ipv6_fixup_options(&opt_space, opt);
1318
1319        fl6.flowi6_proto = sk->sk_protocol;
1320        if (!ipv6_addr_any(daddr))
1321                fl6.daddr = *daddr;
1322        else
1323                fl6.daddr.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */
1324        if (ipv6_addr_any(&fl6.saddr) && !ipv6_addr_any(&np->saddr))
1325                fl6.saddr = np->saddr;
1326        fl6.fl6_sport = inet->inet_sport;
1327
1328        final_p = fl6_update_dst(&fl6, opt, &final);
1329        if (final_p)
1330                connected = 0;
1331
1332        if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr)) {
1333                fl6.flowi6_oif = np->mcast_oif;
1334                connected = 0;
1335        } else if (!fl6.flowi6_oif)
1336                fl6.flowi6_oif = np->ucast_oif;
1337
1338        security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
1339
1340        dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p);
1341        if (IS_ERR(dst)) {
1342                err = PTR_ERR(dst);
1343                dst = NULL;
1344                goto out;
1345        }
1346
1347        if (hlimit < 0)
1348                hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
1349
1350        if (tclass < 0)
1351                tclass = np->tclass;
1352
1353        if (msg->msg_flags&MSG_CONFIRM)
1354                goto do_confirm;
1355back_from_confirm:
1356
1357        /* Lockless fast path for the non-corking case */
1358        if (!corkreq) {
1359                struct sk_buff *skb;
1360
1361                skb = ip6_make_skb(sk, getfrag, msg, ulen,
1362                                   sizeof(struct udphdr), hlimit, tclass, opt,
1363                                   &fl6, (struct rt6_info *)dst,
1364                                   msg->msg_flags, dontfrag);
1365                err = PTR_ERR(skb);
1366                if (!IS_ERR_OR_NULL(skb))
1367                        err = udp_v6_send_skb(skb, &fl6);
1368                goto release_dst;
1369        }
1370
1371        lock_sock(sk);
1372        if (unlikely(up->pending)) {
1373                /* The socket is already corked while preparing it. */
1374                /* ... which is an evident application bug. --ANK */
1375                release_sock(sk);
1376
1377                net_dbg_ratelimited("udp cork app bug 2\n");
1378                err = -EINVAL;
1379                goto out;
1380        }
1381
1382        up->pending = AF_INET6;
1383
1384do_append_data:
1385        if (dontfrag < 0)
1386                dontfrag = np->dontfrag;
1387        up->len += ulen;
1388        err = ip6_append_data(sk, getfrag, msg, ulen,
1389                sizeof(struct udphdr), hlimit, tclass, opt, &fl6,
1390                (struct rt6_info *)dst,
1391                corkreq ? msg->msg_flags|MSG_MORE : msg->msg_flags, dontfrag);
1392        if (err)
1393                udp_v6_flush_pending_frames(sk);
1394        else if (!corkreq)
1395                err = udp_v6_push_pending_frames(sk);
1396        else if (unlikely(skb_queue_empty(&sk->sk_write_queue)))
1397                up->pending = 0;
1398
1399        if (err > 0)
1400                err = np->recverr ? net_xmit_errno(err) : 0;
1401        release_sock(sk);
1402
1403release_dst:
1404        if (dst) {
1405                if (connected) {
1406                        ip6_dst_store(sk, dst,
1407                                      ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr) ?
1408                                      &sk->sk_v6_daddr : NULL,
1409#ifdef CONFIG_IPV6_SUBTREES
1410                                      ipv6_addr_equal(&fl6.saddr, &np->saddr) ?
1411                                      &np->saddr :
1412#endif
1413                                      NULL);
1414                } else {
1415                        dst_release(dst);
1416                }
1417                dst = NULL;
1418        }
1419
1420out:
1421        dst_release(dst);
1422        fl6_sock_release(flowlabel);
1423        txopt_put(opt_to_free);
1424        if (!err)
1425                return len;
1426        /*
1427         * ENOBUFS = no kernel mem, SOCK_NOSPACE = no sndbuf space.  Reporting
1428         * ENOBUFS might not be good (it's not tunable per se), but otherwise
1429         * we don't have a good statistic (IpOutDiscards but it can be too many
1430         * things).  We could add another new stat but at least for now that
1431         * seems like overkill.
1432         */
1433        if (err == -ENOBUFS || test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
1434                UDP6_INC_STATS_USER(sock_net(sk),
1435                                UDP_MIB_SNDBUFERRORS, is_udplite);
1436        }
1437        return err;
1438
1439do_confirm:
1440        dst_confirm(dst);
1441        if (!(msg->msg_flags&MSG_PROBE) || len)
1442                goto back_from_confirm;
1443        err = 0;
1444        goto out;
1445}
1446
1447void udpv6_destroy_sock(struct sock *sk)
1448{
1449        struct udp_sock *up = udp_sk(sk);
1450        lock_sock(sk);
1451        udp_v6_flush_pending_frames(sk);
1452        release_sock(sk);
1453
1454        if (static_key_false(&udpv6_encap_needed) && up->encap_type) {
1455                void (*encap_destroy)(struct sock *sk);
1456                encap_destroy = ACCESS_ONCE(up->encap_destroy);
1457                if (encap_destroy)
1458                        encap_destroy(sk);
1459        }
1460
1461        inet6_destroy_sock(sk);
1462}
1463
1464/*
1465 *      Socket option code for UDP
1466 */
1467int udpv6_setsockopt(struct sock *sk, int level, int optname,
1468                     char __user *optval, unsigned int optlen)
1469{
1470        if (level == SOL_UDP  ||  level == SOL_UDPLITE)
1471                return udp_lib_setsockopt(sk, level, optname, optval, optlen,
1472                                          udp_v6_push_pending_frames);
1473        return ipv6_setsockopt(sk, level, optname, optval, optlen);
1474}
1475
1476#ifdef CONFIG_COMPAT
1477int compat_udpv6_setsockopt(struct sock *sk, int level, int optname,
1478                            char __user *optval, unsigned int optlen)
1479{
1480        if (level == SOL_UDP  ||  level == SOL_UDPLITE)
1481                return udp_lib_setsockopt(sk, level, optname, optval, optlen,
1482                                          udp_v6_push_pending_frames);
1483        return compat_ipv6_setsockopt(sk, level, optname, optval, optlen);
1484}
1485#endif
1486
1487int udpv6_getsockopt(struct sock *sk, int level, int optname,
1488                     char __user *optval, int __user *optlen)
1489{
1490        if (level == SOL_UDP  ||  level == SOL_UDPLITE)
1491                return udp_lib_getsockopt(sk, level, optname, optval, optlen);
1492        return ipv6_getsockopt(sk, level, optname, optval, optlen);
1493}
1494
1495#ifdef CONFIG_COMPAT
1496int compat_udpv6_getsockopt(struct sock *sk, int level, int optname,
1497                            char __user *optval, int __user *optlen)
1498{
1499        if (level == SOL_UDP  ||  level == SOL_UDPLITE)
1500                return udp_lib_getsockopt(sk, level, optname, optval, optlen);
1501        return compat_ipv6_getsockopt(sk, level, optname, optval, optlen);
1502}
1503#endif
1504
1505static const struct inet6_protocol udpv6_protocol = {
1506        .handler        =       udpv6_rcv,
1507        .err_handler    =       udpv6_err,
1508        .flags          =       INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
1509};
1510
1511/* ------------------------------------------------------------------------ */
1512#ifdef CONFIG_PROC_FS
1513int udp6_seq_show(struct seq_file *seq, void *v)
1514{
1515        if (v == SEQ_START_TOKEN) {
1516                seq_puts(seq, IPV6_SEQ_DGRAM_HEADER);
1517        } else {
1518                int bucket = ((struct udp_iter_state *)seq->private)->bucket;
1519                struct inet_sock *inet = inet_sk(v);
1520                __u16 srcp = ntohs(inet->inet_sport);
1521                __u16 destp = ntohs(inet->inet_dport);
1522                ip6_dgram_sock_seq_show(seq, v, srcp, destp, bucket);
1523        }
1524        return 0;
1525}
1526
1527static const struct file_operations udp6_afinfo_seq_fops = {
1528        .owner    = THIS_MODULE,
1529        .open     = udp_seq_open,
1530        .read     = seq_read,
1531        .llseek   = seq_lseek,
1532        .release  = seq_release_net
1533};
1534
1535static struct udp_seq_afinfo udp6_seq_afinfo = {
1536        .name           = "udp6",
1537        .family         = AF_INET6,
1538        .udp_table      = &udp_table,
1539        .seq_fops       = &udp6_afinfo_seq_fops,
1540        .seq_ops        = {
1541                .show           = udp6_seq_show,
1542        },
1543};
1544
1545int __net_init udp6_proc_init(struct net *net)
1546{
1547        return udp_proc_register(net, &udp6_seq_afinfo);
1548}
1549
1550void udp6_proc_exit(struct net *net)
1551{
1552        udp_proc_unregister(net, &udp6_seq_afinfo);
1553}
1554#endif /* CONFIG_PROC_FS */
1555
1556void udp_v6_clear_sk(struct sock *sk, int size)
1557{
1558        struct inet_sock *inet = inet_sk(sk);
1559
1560        /* we do not want to clear pinet6 field, because of RCU lookups */
1561        sk_prot_clear_portaddr_nulls(sk, offsetof(struct inet_sock, pinet6));
1562
1563        size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6);
1564        memset(&inet->pinet6 + 1, 0, size);
1565}
1566
1567/* ------------------------------------------------------------------------ */
1568
1569struct proto udpv6_prot = {
1570        .name              = "UDPv6",
1571        .owner             = THIS_MODULE,
1572        .close             = udp_lib_close,
1573        .connect           = ip6_datagram_connect,
1574        .disconnect        = udp_disconnect,
1575        .ioctl             = udp_ioctl,
1576        .destroy           = udpv6_destroy_sock,
1577        .setsockopt        = udpv6_setsockopt,
1578        .getsockopt        = udpv6_getsockopt,
1579        .sendmsg           = udpv6_sendmsg,
1580        .recvmsg           = udpv6_recvmsg,
1581        .backlog_rcv       = __udpv6_queue_rcv_skb,
1582        .hash              = udp_lib_hash,
1583        .unhash            = udp_lib_unhash,
1584        .rehash            = udp_v6_rehash,
1585        .get_port          = udp_v6_get_port,
1586        .memory_allocated  = &udp_memory_allocated,
1587        .sysctl_mem        = sysctl_udp_mem,
1588        .sysctl_wmem       = &sysctl_udp_wmem_min,
1589        .sysctl_rmem       = &sysctl_udp_rmem_min,
1590        .obj_size          = sizeof(struct udp6_sock),
1591        .slab_flags        = SLAB_DESTROY_BY_RCU,
1592        .h.udp_table       = &udp_table,
1593#ifdef CONFIG_COMPAT
1594        .compat_setsockopt = compat_udpv6_setsockopt,
1595        .compat_getsockopt = compat_udpv6_getsockopt,
1596#endif
1597        .clear_sk          = udp_v6_clear_sk,
1598};
1599
1600static struct inet_protosw udpv6_protosw = {
1601        .type =      SOCK_DGRAM,
1602        .protocol =  IPPROTO_UDP,
1603        .prot =      &udpv6_prot,
1604        .ops =       &inet6_dgram_ops,
1605        .flags =     INET_PROTOSW_PERMANENT,
1606};
1607
1608int __init udpv6_init(void)
1609{
1610        int ret;
1611
1612        ret = inet6_add_protocol(&udpv6_protocol, IPPROTO_UDP);
1613        if (ret)
1614                goto out;
1615
1616        ret = inet6_register_protosw(&udpv6_protosw);
1617        if (ret)
1618                goto out_udpv6_protocol;
1619out:
1620        return ret;
1621
1622out_udpv6_protocol:
1623        inet6_del_protocol(&udpv6_protocol, IPPROTO_UDP);
1624        goto out;
1625}
1626
1627void udpv6_exit(void)
1628{
1629        inet6_unregister_protosw(&udpv6_protosw);
1630        inet6_del_protocol(&udpv6_protocol, IPPROTO_UDP);
1631}
1632