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