Merge tag 'linux-kselftest-5.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / net / ipv6 / tcp_ipv6.c
1 /*
2  *      TCP over IPv6
3  *      Linux INET6 implementation
4  *
5  *      Authors:
6  *      Pedro Roque             <roque@di.fc.ul.pt>
7  *
8  *      Based on:
9  *      linux/net/ipv4/tcp.c
10  *      linux/net/ipv4/tcp_input.c
11  *      linux/net/ipv4/tcp_output.c
12  *
13  *      Fixes:
14  *      Hideaki YOSHIFUJI       :       sin6_scope_id support
15  *      YOSHIFUJI Hideaki @USAGI and:   Support IPV6_V6ONLY socket option, which
16  *      Alexey Kuznetsov                allow both IPv4 and IPv6 sockets to bind
17  *                                      a single port at the same time.
18  *      YOSHIFUJI Hideaki @USAGI:       convert /proc/net/tcp6 to seq_file.
19  *
20  *      This program is free software; you can redistribute it and/or
21  *      modify it under the terms of the GNU General Public License
22  *      as published by the Free Software Foundation; either version
23  *      2 of the License, or (at your option) any later version.
24  */
25
26 #include <linux/bottom_half.h>
27 #include <linux/module.h>
28 #include <linux/errno.h>
29 #include <linux/types.h>
30 #include <linux/socket.h>
31 #include <linux/sockios.h>
32 #include <linux/net.h>
33 #include <linux/jiffies.h>
34 #include <linux/in.h>
35 #include <linux/in6.h>
36 #include <linux/netdevice.h>
37 #include <linux/init.h>
38 #include <linux/jhash.h>
39 #include <linux/ipsec.h>
40 #include <linux/times.h>
41 #include <linux/slab.h>
42 #include <linux/uaccess.h>
43 #include <linux/ipv6.h>
44 #include <linux/icmpv6.h>
45 #include <linux/random.h>
46
47 #include <net/tcp.h>
48 #include <net/ndisc.h>
49 #include <net/inet6_hashtables.h>
50 #include <net/inet6_connection_sock.h>
51 #include <net/ipv6.h>
52 #include <net/transp_v6.h>
53 #include <net/addrconf.h>
54 #include <net/ip6_route.h>
55 #include <net/ip6_checksum.h>
56 #include <net/inet_ecn.h>
57 #include <net/protocol.h>
58 #include <net/xfrm.h>
59 #include <net/snmp.h>
60 #include <net/dsfield.h>
61 #include <net/timewait_sock.h>
62 #include <net/inet_common.h>
63 #include <net/secure_seq.h>
64 #include <net/busy_poll.h>
65
66 #include <linux/proc_fs.h>
67 #include <linux/seq_file.h>
68
69 #include <crypto/hash.h>
70 #include <linux/scatterlist.h>
71
72 #include <trace/events/tcp.h>
73
74 static void     tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb);
75 static void     tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
76                                       struct request_sock *req);
77
78 static int      tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
79
80 static const struct inet_connection_sock_af_ops ipv6_mapped;
81 static const struct inet_connection_sock_af_ops ipv6_specific;
82 #ifdef CONFIG_TCP_MD5SIG
83 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific;
84 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific;
85 #else
86 static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(const struct sock *sk,
87                                                    const struct in6_addr *addr)
88 {
89         return NULL;
90 }
91 #endif
92
93 static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
94 {
95         struct dst_entry *dst = skb_dst(skb);
96
97         if (dst && dst_hold_safe(dst)) {
98                 const struct rt6_info *rt = (const struct rt6_info *)dst;
99
100                 sk->sk_rx_dst = dst;
101                 inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
102                 inet6_sk(sk)->rx_dst_cookie = rt6_get_cookie(rt);
103         }
104 }
105
106 static u32 tcp_v6_init_seq(const struct sk_buff *skb)
107 {
108         return secure_tcpv6_seq(ipv6_hdr(skb)->daddr.s6_addr32,
109                                 ipv6_hdr(skb)->saddr.s6_addr32,
110                                 tcp_hdr(skb)->dest,
111                                 tcp_hdr(skb)->source);
112 }
113
114 static u32 tcp_v6_init_ts_off(const struct net *net, const struct sk_buff *skb)
115 {
116         return secure_tcpv6_ts_off(net, ipv6_hdr(skb)->daddr.s6_addr32,
117                                    ipv6_hdr(skb)->saddr.s6_addr32);
118 }
119
120 static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr,
121                               int addr_len)
122 {
123         /* This check is replicated from tcp_v6_connect() and intended to
124          * prevent BPF program called below from accessing bytes that are out
125          * of the bound specified by user in addr_len.
126          */
127         if (addr_len < SIN6_LEN_RFC2133)
128                 return -EINVAL;
129
130         sock_owned_by_me(sk);
131
132         return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr);
133 }
134
135 static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
136                           int addr_len)
137 {
138         struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
139         struct inet_sock *inet = inet_sk(sk);
140         struct inet_connection_sock *icsk = inet_csk(sk);
141         struct ipv6_pinfo *np = inet6_sk(sk);
142         struct tcp_sock *tp = tcp_sk(sk);
143         struct in6_addr *saddr = NULL, *final_p, final;
144         struct ipv6_txoptions *opt;
145         struct flowi6 fl6;
146         struct dst_entry *dst;
147         int addr_type;
148         int err;
149         struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row;
150
151         if (addr_len < SIN6_LEN_RFC2133)
152                 return -EINVAL;
153
154         if (usin->sin6_family != AF_INET6)
155                 return -EAFNOSUPPORT;
156
157         memset(&fl6, 0, sizeof(fl6));
158
159         if (np->sndflow) {
160                 fl6.flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
161                 IP6_ECN_flow_init(fl6.flowlabel);
162                 if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
163                         struct ip6_flowlabel *flowlabel;
164                         flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
165                         if (!flowlabel)
166                                 return -EINVAL;
167                         fl6_sock_release(flowlabel);
168                 }
169         }
170
171         /*
172          *      connect() to INADDR_ANY means loopback (BSD'ism).
173          */
174
175         if (ipv6_addr_any(&usin->sin6_addr)) {
176                 if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
177                         ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
178                                                &usin->sin6_addr);
179                 else
180                         usin->sin6_addr = in6addr_loopback;
181         }
182
183         addr_type = ipv6_addr_type(&usin->sin6_addr);
184
185         if (addr_type & IPV6_ADDR_MULTICAST)
186                 return -ENETUNREACH;
187
188         if (addr_type&IPV6_ADDR_LINKLOCAL) {
189                 if (addr_len >= sizeof(struct sockaddr_in6) &&
190                     usin->sin6_scope_id) {
191                         /* If interface is set while binding, indices
192                          * must coincide.
193                          */
194                         if (!sk_dev_equal_l3scope(sk, usin->sin6_scope_id))
195                                 return -EINVAL;
196
197                         sk->sk_bound_dev_if = usin->sin6_scope_id;
198                 }
199
200                 /* Connect to link-local address requires an interface */
201                 if (!sk->sk_bound_dev_if)
202                         return -EINVAL;
203         }
204
205         if (tp->rx_opt.ts_recent_stamp &&
206             !ipv6_addr_equal(&sk->sk_v6_daddr, &usin->sin6_addr)) {
207                 tp->rx_opt.ts_recent = 0;
208                 tp->rx_opt.ts_recent_stamp = 0;
209                 tp->write_seq = 0;
210         }
211
212         sk->sk_v6_daddr = usin->sin6_addr;
213         np->flow_label = fl6.flowlabel;
214
215         /*
216          *      TCP over IPv4
217          */
218
219         if (addr_type & IPV6_ADDR_MAPPED) {
220                 u32 exthdrlen = icsk->icsk_ext_hdr_len;
221                 struct sockaddr_in sin;
222
223                 SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
224
225                 if (__ipv6_only_sock(sk))
226                         return -ENETUNREACH;
227
228                 sin.sin_family = AF_INET;
229                 sin.sin_port = usin->sin6_port;
230                 sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
231
232                 icsk->icsk_af_ops = &ipv6_mapped;
233                 sk->sk_backlog_rcv = tcp_v4_do_rcv;
234 #ifdef CONFIG_TCP_MD5SIG
235                 tp->af_specific = &tcp_sock_ipv6_mapped_specific;
236 #endif
237
238                 err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
239
240                 if (err) {
241                         icsk->icsk_ext_hdr_len = exthdrlen;
242                         icsk->icsk_af_ops = &ipv6_specific;
243                         sk->sk_backlog_rcv = tcp_v6_do_rcv;
244 #ifdef CONFIG_TCP_MD5SIG
245                         tp->af_specific = &tcp_sock_ipv6_specific;
246 #endif
247                         goto failure;
248                 }
249                 np->saddr = sk->sk_v6_rcv_saddr;
250
251                 return err;
252         }
253
254         if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr))
255                 saddr = &sk->sk_v6_rcv_saddr;
256
257         fl6.flowi6_proto = IPPROTO_TCP;
258         fl6.daddr = sk->sk_v6_daddr;
259         fl6.saddr = saddr ? *saddr : np->saddr;
260         fl6.flowi6_oif = sk->sk_bound_dev_if;
261         fl6.flowi6_mark = sk->sk_mark;
262         fl6.fl6_dport = usin->sin6_port;
263         fl6.fl6_sport = inet->inet_sport;
264         fl6.flowi6_uid = sk->sk_uid;
265
266         opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk));
267         final_p = fl6_update_dst(&fl6, opt, &final);
268
269         security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
270
271         dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
272         if (IS_ERR(dst)) {
273                 err = PTR_ERR(dst);
274                 goto failure;
275         }
276
277         if (!saddr) {
278                 saddr = &fl6.saddr;
279                 sk->sk_v6_rcv_saddr = *saddr;
280         }
281
282         /* set the source address */
283         np->saddr = *saddr;
284         inet->inet_rcv_saddr = LOOPBACK4_IPV6;
285
286         sk->sk_gso_type = SKB_GSO_TCPV6;
287         ip6_dst_store(sk, dst, NULL, NULL);
288
289         icsk->icsk_ext_hdr_len = 0;
290         if (opt)
291                 icsk->icsk_ext_hdr_len = opt->opt_flen +
292                                          opt->opt_nflen;
293
294         tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
295
296         inet->inet_dport = usin->sin6_port;
297
298         tcp_set_state(sk, TCP_SYN_SENT);
299         err = inet6_hash_connect(tcp_death_row, sk);
300         if (err)
301                 goto late_failure;
302
303         sk_set_txhash(sk);
304
305         if (likely(!tp->repair)) {
306                 if (!tp->write_seq)
307                         tp->write_seq = secure_tcpv6_seq(np->saddr.s6_addr32,
308                                                          sk->sk_v6_daddr.s6_addr32,
309                                                          inet->inet_sport,
310                                                          inet->inet_dport);
311                 tp->tsoffset = secure_tcpv6_ts_off(sock_net(sk),
312                                                    np->saddr.s6_addr32,
313                                                    sk->sk_v6_daddr.s6_addr32);
314         }
315
316         if (tcp_fastopen_defer_connect(sk, &err))
317                 return err;
318         if (err)
319                 goto late_failure;
320
321         err = tcp_connect(sk);
322         if (err)
323                 goto late_failure;
324
325         return 0;
326
327 late_failure:
328         tcp_set_state(sk, TCP_CLOSE);
329 failure:
330         inet->inet_dport = 0;
331         sk->sk_route_caps = 0;
332         return err;
333 }
334
335 static void tcp_v6_mtu_reduced(struct sock *sk)
336 {
337         struct dst_entry *dst;
338
339         if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
340                 return;
341
342         dst = inet6_csk_update_pmtu(sk, tcp_sk(sk)->mtu_info);
343         if (!dst)
344                 return;
345
346         if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {
347                 tcp_sync_mss(sk, dst_mtu(dst));
348                 tcp_simple_retransmit(sk);
349         }
350 }
351
352 static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
353                 u8 type, u8 code, int offset, __be32 info)
354 {
355         const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data;
356         const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
357         struct net *net = dev_net(skb->dev);
358         struct request_sock *fastopen;
359         struct ipv6_pinfo *np;
360         struct tcp_sock *tp;
361         __u32 seq, snd_una;
362         struct sock *sk;
363         bool fatal;
364         int err;
365
366         sk = __inet6_lookup_established(net, &tcp_hashinfo,
367                                         &hdr->daddr, th->dest,
368                                         &hdr->saddr, ntohs(th->source),
369                                         skb->dev->ifindex, inet6_sdif(skb));
370
371         if (!sk) {
372                 __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev),
373                                   ICMP6_MIB_INERRORS);
374                 return -ENOENT;
375         }
376
377         if (sk->sk_state == TCP_TIME_WAIT) {
378                 inet_twsk_put(inet_twsk(sk));
379                 return 0;
380         }
381         seq = ntohl(th->seq);
382         fatal = icmpv6_err_convert(type, code, &err);
383         if (sk->sk_state == TCP_NEW_SYN_RECV) {
384                 tcp_req_err(sk, seq, fatal);
385                 return 0;
386         }
387
388         bh_lock_sock(sk);
389         if (sock_owned_by_user(sk) && type != ICMPV6_PKT_TOOBIG)
390                 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
391
392         if (sk->sk_state == TCP_CLOSE)
393                 goto out;
394
395         if (ipv6_hdr(skb)->hop_limit < inet6_sk(sk)->min_hopcount) {
396                 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
397                 goto out;
398         }
399
400         tp = tcp_sk(sk);
401         /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
402         fastopen = tp->fastopen_rsk;
403         snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
404         if (sk->sk_state != TCP_LISTEN &&
405             !between(seq, snd_una, tp->snd_nxt)) {
406                 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
407                 goto out;
408         }
409
410         np = inet6_sk(sk);
411
412         if (type == NDISC_REDIRECT) {
413                 if (!sock_owned_by_user(sk)) {
414                         struct dst_entry *dst = __sk_dst_check(sk, np->dst_cookie);
415
416                         if (dst)
417                                 dst->ops->redirect(dst, sk, skb);
418                 }
419                 goto out;
420         }
421
422         if (type == ICMPV6_PKT_TOOBIG) {
423                 /* We are not interested in TCP_LISTEN and open_requests
424                  * (SYN-ACKs send out by Linux are always <576bytes so
425                  * they should go through unfragmented).
426                  */
427                 if (sk->sk_state == TCP_LISTEN)
428                         goto out;
429
430                 if (!ip6_sk_accept_pmtu(sk))
431                         goto out;
432
433                 tp->mtu_info = ntohl(info);
434                 if (!sock_owned_by_user(sk))
435                         tcp_v6_mtu_reduced(sk);
436                 else if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED,
437                                            &sk->sk_tsq_flags))
438                         sock_hold(sk);
439                 goto out;
440         }
441
442
443         /* Might be for an request_sock */
444         switch (sk->sk_state) {
445         case TCP_SYN_SENT:
446         case TCP_SYN_RECV:
447                 /* Only in fast or simultaneous open. If a fast open socket is
448                  * is already accepted it is treated as a connected one below.
449                  */
450                 if (fastopen && !fastopen->sk)
451                         break;
452
453                 if (!sock_owned_by_user(sk)) {
454                         sk->sk_err = err;
455                         sk->sk_error_report(sk);                /* Wake people up to see the error (see connect in sock.c) */
456
457                         tcp_done(sk);
458                 } else
459                         sk->sk_err_soft = err;
460                 goto out;
461         }
462
463         if (!sock_owned_by_user(sk) && np->recverr) {
464                 sk->sk_err = err;
465                 sk->sk_error_report(sk);
466         } else
467                 sk->sk_err_soft = err;
468
469 out:
470         bh_unlock_sock(sk);
471         sock_put(sk);
472         return 0;
473 }
474
475
476 static int tcp_v6_send_synack(const struct sock *sk, struct dst_entry *dst,
477                               struct flowi *fl,
478                               struct request_sock *req,
479                               struct tcp_fastopen_cookie *foc,
480                               enum tcp_synack_type synack_type)
481 {
482         struct inet_request_sock *ireq = inet_rsk(req);
483         struct ipv6_pinfo *np = inet6_sk(sk);
484         struct ipv6_txoptions *opt;
485         struct flowi6 *fl6 = &fl->u.ip6;
486         struct sk_buff *skb;
487         int err = -ENOMEM;
488
489         /* First, grab a route. */
490         if (!dst && (dst = inet6_csk_route_req(sk, fl6, req,
491                                                IPPROTO_TCP)) == NULL)
492                 goto done;
493
494         skb = tcp_make_synack(sk, dst, req, foc, synack_type);
495
496         if (skb) {
497                 __tcp_v6_send_check(skb, &ireq->ir_v6_loc_addr,
498                                     &ireq->ir_v6_rmt_addr);
499
500                 fl6->daddr = ireq->ir_v6_rmt_addr;
501                 if (np->repflow && ireq->pktopts)
502                         fl6->flowlabel = ip6_flowlabel(ipv6_hdr(ireq->pktopts));
503
504                 rcu_read_lock();
505                 opt = ireq->ipv6_opt;
506                 if (!opt)
507                         opt = rcu_dereference(np->opt);
508                 err = ip6_xmit(sk, skb, fl6, sk->sk_mark, opt, np->tclass);
509                 rcu_read_unlock();
510                 err = net_xmit_eval(err);
511         }
512
513 done:
514         return err;
515 }
516
517
518 static void tcp_v6_reqsk_destructor(struct request_sock *req)
519 {
520         kfree(inet_rsk(req)->ipv6_opt);
521         kfree_skb(inet_rsk(req)->pktopts);
522 }
523
524 #ifdef CONFIG_TCP_MD5SIG
525 static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(const struct sock *sk,
526                                                    const struct in6_addr *addr)
527 {
528         return tcp_md5_do_lookup(sk, (union tcp_md5_addr *)addr, AF_INET6);
529 }
530
531 static struct tcp_md5sig_key *tcp_v6_md5_lookup(const struct sock *sk,
532                                                 const struct sock *addr_sk)
533 {
534         return tcp_v6_md5_do_lookup(sk, &addr_sk->sk_v6_daddr);
535 }
536
537 static int tcp_v6_parse_md5_keys(struct sock *sk, int optname,
538                                  char __user *optval, int optlen)
539 {
540         struct tcp_md5sig cmd;
541         struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
542         u8 prefixlen;
543
544         if (optlen < sizeof(cmd))
545                 return -EINVAL;
546
547         if (copy_from_user(&cmd, optval, sizeof(cmd)))
548                 return -EFAULT;
549
550         if (sin6->sin6_family != AF_INET6)
551                 return -EINVAL;
552
553         if (optname == TCP_MD5SIG_EXT &&
554             cmd.tcpm_flags & TCP_MD5SIG_FLAG_PREFIX) {
555                 prefixlen = cmd.tcpm_prefixlen;
556                 if (prefixlen > 128 || (ipv6_addr_v4mapped(&sin6->sin6_addr) &&
557                                         prefixlen > 32))
558                         return -EINVAL;
559         } else {
560                 prefixlen = ipv6_addr_v4mapped(&sin6->sin6_addr) ? 32 : 128;
561         }
562
563         if (!cmd.tcpm_keylen) {
564                 if (ipv6_addr_v4mapped(&sin6->sin6_addr))
565                         return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3],
566                                               AF_INET, prefixlen);
567                 return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr,
568                                       AF_INET6, prefixlen);
569         }
570
571         if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN)
572                 return -EINVAL;
573
574         if (ipv6_addr_v4mapped(&sin6->sin6_addr))
575                 return tcp_md5_do_add(sk, (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3],
576                                       AF_INET, prefixlen, cmd.tcpm_key,
577                                       cmd.tcpm_keylen, GFP_KERNEL);
578
579         return tcp_md5_do_add(sk, (union tcp_md5_addr *)&sin6->sin6_addr,
580                               AF_INET6, prefixlen, cmd.tcpm_key,
581                               cmd.tcpm_keylen, GFP_KERNEL);
582 }
583
584 static int tcp_v6_md5_hash_headers(struct tcp_md5sig_pool *hp,
585                                    const struct in6_addr *daddr,
586                                    const struct in6_addr *saddr,
587                                    const struct tcphdr *th, int nbytes)
588 {
589         struct tcp6_pseudohdr *bp;
590         struct scatterlist sg;
591         struct tcphdr *_th;
592
593         bp = hp->scratch;
594         /* 1. TCP pseudo-header (RFC2460) */
595         bp->saddr = *saddr;
596         bp->daddr = *daddr;
597         bp->protocol = cpu_to_be32(IPPROTO_TCP);
598         bp->len = cpu_to_be32(nbytes);
599
600         _th = (struct tcphdr *)(bp + 1);
601         memcpy(_th, th, sizeof(*th));
602         _th->check = 0;
603
604         sg_init_one(&sg, bp, sizeof(*bp) + sizeof(*th));
605         ahash_request_set_crypt(hp->md5_req, &sg, NULL,
606                                 sizeof(*bp) + sizeof(*th));
607         return crypto_ahash_update(hp->md5_req);
608 }
609
610 static int tcp_v6_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
611                                const struct in6_addr *daddr, struct in6_addr *saddr,
612                                const struct tcphdr *th)
613 {
614         struct tcp_md5sig_pool *hp;
615         struct ahash_request *req;
616
617         hp = tcp_get_md5sig_pool();
618         if (!hp)
619                 goto clear_hash_noput;
620         req = hp->md5_req;
621
622         if (crypto_ahash_init(req))
623                 goto clear_hash;
624         if (tcp_v6_md5_hash_headers(hp, daddr, saddr, th, th->doff << 2))
625                 goto clear_hash;
626         if (tcp_md5_hash_key(hp, key))
627                 goto clear_hash;
628         ahash_request_set_crypt(req, NULL, md5_hash, 0);
629         if (crypto_ahash_final(req))
630                 goto clear_hash;
631
632         tcp_put_md5sig_pool();
633         return 0;
634
635 clear_hash:
636         tcp_put_md5sig_pool();
637 clear_hash_noput:
638         memset(md5_hash, 0, 16);
639         return 1;
640 }
641
642 static int tcp_v6_md5_hash_skb(char *md5_hash,
643                                const struct tcp_md5sig_key *key,
644                                const struct sock *sk,
645                                const struct sk_buff *skb)
646 {
647         const struct in6_addr *saddr, *daddr;
648         struct tcp_md5sig_pool *hp;
649         struct ahash_request *req;
650         const struct tcphdr *th = tcp_hdr(skb);
651
652         if (sk) { /* valid for establish/request sockets */
653                 saddr = &sk->sk_v6_rcv_saddr;
654                 daddr = &sk->sk_v6_daddr;
655         } else {
656                 const struct ipv6hdr *ip6h = ipv6_hdr(skb);
657                 saddr = &ip6h->saddr;
658                 daddr = &ip6h->daddr;
659         }
660
661         hp = tcp_get_md5sig_pool();
662         if (!hp)
663                 goto clear_hash_noput;
664         req = hp->md5_req;
665
666         if (crypto_ahash_init(req))
667                 goto clear_hash;
668
669         if (tcp_v6_md5_hash_headers(hp, daddr, saddr, th, skb->len))
670                 goto clear_hash;
671         if (tcp_md5_hash_skb_data(hp, skb, th->doff << 2))
672                 goto clear_hash;
673         if (tcp_md5_hash_key(hp, key))
674                 goto clear_hash;
675         ahash_request_set_crypt(req, NULL, md5_hash, 0);
676         if (crypto_ahash_final(req))
677                 goto clear_hash;
678
679         tcp_put_md5sig_pool();
680         return 0;
681
682 clear_hash:
683         tcp_put_md5sig_pool();
684 clear_hash_noput:
685         memset(md5_hash, 0, 16);
686         return 1;
687 }
688
689 #endif
690
691 static bool tcp_v6_inbound_md5_hash(const struct sock *sk,
692                                     const struct sk_buff *skb)
693 {
694 #ifdef CONFIG_TCP_MD5SIG
695         const __u8 *hash_location = NULL;
696         struct tcp_md5sig_key *hash_expected;
697         const struct ipv6hdr *ip6h = ipv6_hdr(skb);
698         const struct tcphdr *th = tcp_hdr(skb);
699         int genhash;
700         u8 newhash[16];
701
702         hash_expected = tcp_v6_md5_do_lookup(sk, &ip6h->saddr);
703         hash_location = tcp_parse_md5sig_option(th);
704
705         /* We've parsed the options - do we have a hash? */
706         if (!hash_expected && !hash_location)
707                 return false;
708
709         if (hash_expected && !hash_location) {
710                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5NOTFOUND);
711                 return true;
712         }
713
714         if (!hash_expected && hash_location) {
715                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
716                 return true;
717         }
718
719         /* check the signature */
720         genhash = tcp_v6_md5_hash_skb(newhash,
721                                       hash_expected,
722                                       NULL, skb);
723
724         if (genhash || memcmp(hash_location, newhash, 16) != 0) {
725                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5FAILURE);
726                 net_info_ratelimited("MD5 Hash %s for [%pI6c]:%u->[%pI6c]:%u\n",
727                                      genhash ? "failed" : "mismatch",
728                                      &ip6h->saddr, ntohs(th->source),
729                                      &ip6h->daddr, ntohs(th->dest));
730                 return true;
731         }
732 #endif
733         return false;
734 }
735
736 static void tcp_v6_init_req(struct request_sock *req,
737                             const struct sock *sk_listener,
738                             struct sk_buff *skb)
739 {
740         bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
741         struct inet_request_sock *ireq = inet_rsk(req);
742         const struct ipv6_pinfo *np = inet6_sk(sk_listener);
743
744         ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr;
745         ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
746
747         /* So that link locals have meaning */
748         if ((!sk_listener->sk_bound_dev_if || l3_slave) &&
749             ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL)
750                 ireq->ir_iif = tcp_v6_iif(skb);
751
752         if (!TCP_SKB_CB(skb)->tcp_tw_isn &&
753             (ipv6_opt_accepted(sk_listener, skb, &TCP_SKB_CB(skb)->header.h6) ||
754              np->rxopt.bits.rxinfo ||
755              np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim ||
756              np->rxopt.bits.rxohlim || np->repflow)) {
757                 refcount_inc(&skb->users);
758                 ireq->pktopts = skb;
759         }
760 }
761
762 static struct dst_entry *tcp_v6_route_req(const struct sock *sk,
763                                           struct flowi *fl,
764                                           const struct request_sock *req)
765 {
766         return inet6_csk_route_req(sk, &fl->u.ip6, req, IPPROTO_TCP);
767 }
768
769 struct request_sock_ops tcp6_request_sock_ops __read_mostly = {
770         .family         =       AF_INET6,
771         .obj_size       =       sizeof(struct tcp6_request_sock),
772         .rtx_syn_ack    =       tcp_rtx_synack,
773         .send_ack       =       tcp_v6_reqsk_send_ack,
774         .destructor     =       tcp_v6_reqsk_destructor,
775         .send_reset     =       tcp_v6_send_reset,
776         .syn_ack_timeout =      tcp_syn_ack_timeout,
777 };
778
779 static const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
780         .mss_clamp      =       IPV6_MIN_MTU - sizeof(struct tcphdr) -
781                                 sizeof(struct ipv6hdr),
782 #ifdef CONFIG_TCP_MD5SIG
783         .req_md5_lookup =       tcp_v6_md5_lookup,
784         .calc_md5_hash  =       tcp_v6_md5_hash_skb,
785 #endif
786         .init_req       =       tcp_v6_init_req,
787 #ifdef CONFIG_SYN_COOKIES
788         .cookie_init_seq =      cookie_v6_init_sequence,
789 #endif
790         .route_req      =       tcp_v6_route_req,
791         .init_seq       =       tcp_v6_init_seq,
792         .init_ts_off    =       tcp_v6_init_ts_off,
793         .send_synack    =       tcp_v6_send_synack,
794 };
795
796 static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 seq,
797                                  u32 ack, u32 win, u32 tsval, u32 tsecr,
798                                  int oif, struct tcp_md5sig_key *key, int rst,
799                                  u8 tclass, __be32 label)
800 {
801         const struct tcphdr *th = tcp_hdr(skb);
802         struct tcphdr *t1;
803         struct sk_buff *buff;
804         struct flowi6 fl6;
805         struct net *net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
806         struct sock *ctl_sk = net->ipv6.tcp_sk;
807         unsigned int tot_len = sizeof(struct tcphdr);
808         struct dst_entry *dst;
809         __be32 *topt;
810         __u32 mark = 0;
811
812         if (tsecr)
813                 tot_len += TCPOLEN_TSTAMP_ALIGNED;
814 #ifdef CONFIG_TCP_MD5SIG
815         if (key)
816                 tot_len += TCPOLEN_MD5SIG_ALIGNED;
817 #endif
818
819         buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
820                          GFP_ATOMIC);
821         if (!buff)
822                 return;
823
824         skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
825
826         t1 = skb_push(buff, tot_len);
827         skb_reset_transport_header(buff);
828
829         /* Swap the send and the receive. */
830         memset(t1, 0, sizeof(*t1));
831         t1->dest = th->source;
832         t1->source = th->dest;
833         t1->doff = tot_len / 4;
834         t1->seq = htonl(seq);
835         t1->ack_seq = htonl(ack);
836         t1->ack = !rst || !th->ack;
837         t1->rst = rst;
838         t1->window = htons(win);
839
840         topt = (__be32 *)(t1 + 1);
841
842         if (tsecr) {
843                 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
844                                 (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
845                 *topt++ = htonl(tsval);
846                 *topt++ = htonl(tsecr);
847         }
848
849 #ifdef CONFIG_TCP_MD5SIG
850         if (key) {
851                 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
852                                 (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
853                 tcp_v6_md5_hash_hdr((__u8 *)topt, key,
854                                     &ipv6_hdr(skb)->saddr,
855                                     &ipv6_hdr(skb)->daddr, t1);
856         }
857 #endif
858
859         memset(&fl6, 0, sizeof(fl6));
860         fl6.daddr = ipv6_hdr(skb)->saddr;
861         fl6.saddr = ipv6_hdr(skb)->daddr;
862         fl6.flowlabel = label;
863
864         buff->ip_summed = CHECKSUM_PARTIAL;
865         buff->csum = 0;
866
867         __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr);
868
869         fl6.flowi6_proto = IPPROTO_TCP;
870         if (rt6_need_strict(&fl6.daddr) && !oif)
871                 fl6.flowi6_oif = tcp_v6_iif(skb);
872         else {
873                 if (!oif && netif_index_is_l3_master(net, skb->skb_iif))
874                         oif = skb->skb_iif;
875
876                 fl6.flowi6_oif = oif;
877         }
878
879         if (sk)
880                 mark = (sk->sk_state == TCP_TIME_WAIT) ?
881                         inet_twsk(sk)->tw_mark : sk->sk_mark;
882         fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark) ?: mark;
883         fl6.fl6_dport = t1->dest;
884         fl6.fl6_sport = t1->source;
885         fl6.flowi6_uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
886         security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
887
888         /* Pass a socket to ip6_dst_lookup either it is for RST
889          * Underlying function will use this to retrieve the network
890          * namespace
891          */
892         dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL);
893         if (!IS_ERR(dst)) {
894                 skb_dst_set(buff, dst);
895                 ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, tclass);
896                 TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
897                 if (rst)
898                         TCP_INC_STATS(net, TCP_MIB_OUTRSTS);
899                 return;
900         }
901
902         kfree_skb(buff);
903 }
904
905 static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb)
906 {
907         const struct tcphdr *th = tcp_hdr(skb);
908         u32 seq = 0, ack_seq = 0;
909         struct tcp_md5sig_key *key = NULL;
910 #ifdef CONFIG_TCP_MD5SIG
911         const __u8 *hash_location = NULL;
912         struct ipv6hdr *ipv6h = ipv6_hdr(skb);
913         unsigned char newhash[16];
914         int genhash;
915         struct sock *sk1 = NULL;
916 #endif
917         int oif = 0;
918
919         if (th->rst)
920                 return;
921
922         /* If sk not NULL, it means we did a successful lookup and incoming
923          * route had to be correct. prequeue might have dropped our dst.
924          */
925         if (!sk && !ipv6_unicast_destination(skb))
926                 return;
927
928 #ifdef CONFIG_TCP_MD5SIG
929         rcu_read_lock();
930         hash_location = tcp_parse_md5sig_option(th);
931         if (sk && sk_fullsock(sk)) {
932                 key = tcp_v6_md5_do_lookup(sk, &ipv6h->saddr);
933         } else if (hash_location) {
934                 /*
935                  * active side is lost. Try to find listening socket through
936                  * source port, and then find md5 key through listening socket.
937                  * we are not loose security here:
938                  * Incoming packet is checked with md5 hash with finding key,
939                  * no RST generated if md5 hash doesn't match.
940                  */
941                 sk1 = inet6_lookup_listener(dev_net(skb_dst(skb)->dev),
942                                            &tcp_hashinfo, NULL, 0,
943                                            &ipv6h->saddr,
944                                            th->source, &ipv6h->daddr,
945                                            ntohs(th->source),
946                                            tcp_v6_iif_l3_slave(skb),
947                                            tcp_v6_sdif(skb));
948                 if (!sk1)
949                         goto out;
950
951                 key = tcp_v6_md5_do_lookup(sk1, &ipv6h->saddr);
952                 if (!key)
953                         goto out;
954
955                 genhash = tcp_v6_md5_hash_skb(newhash, key, NULL, skb);
956                 if (genhash || memcmp(hash_location, newhash, 16) != 0)
957                         goto out;
958         }
959 #endif
960
961         if (th->ack)
962                 seq = ntohl(th->ack_seq);
963         else
964                 ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len -
965                           (th->doff << 2);
966
967         if (sk) {
968                 oif = sk->sk_bound_dev_if;
969                 if (sk_fullsock(sk))
970                         trace_tcp_send_reset(sk, skb);
971         }
972
973         tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1, 0, 0);
974
975 #ifdef CONFIG_TCP_MD5SIG
976 out:
977         rcu_read_unlock();
978 #endif
979 }
980
981 static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq,
982                             u32 ack, u32 win, u32 tsval, u32 tsecr, int oif,
983                             struct tcp_md5sig_key *key, u8 tclass,
984                             __be32 label)
985 {
986         tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, key, 0,
987                              tclass, label);
988 }
989
990 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
991 {
992         struct inet_timewait_sock *tw = inet_twsk(sk);
993         struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
994
995         tcp_v6_send_ack(sk, skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
996                         tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
997                         tcp_time_stamp_raw() + tcptw->tw_ts_offset,
998                         tcptw->tw_ts_recent, tw->tw_bound_dev_if, tcp_twsk_md5_key(tcptw),
999                         tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel));
1000
1001         inet_twsk_put(tw);
1002 }
1003
1004 static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
1005                                   struct request_sock *req)
1006 {
1007         /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV
1008          * sk->sk_state == TCP_SYN_RECV -> for Fast Open.
1009          */
1010         /* RFC 7323 2.3
1011          * The window field (SEG.WND) of every outgoing segment, with the
1012          * exception of <SYN> segments, MUST be right-shifted by
1013          * Rcv.Wind.Shift bits:
1014          */
1015         tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ?
1016                         tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
1017                         tcp_rsk(req)->rcv_nxt,
1018                         req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
1019                         tcp_time_stamp_raw() + tcp_rsk(req)->ts_off,
1020                         req->ts_recent, sk->sk_bound_dev_if,
1021                         tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr),
1022                         0, 0);
1023 }
1024
1025
1026 static struct sock *tcp_v6_cookie_check(struct sock *sk, struct sk_buff *skb)
1027 {
1028 #ifdef CONFIG_SYN_COOKIES
1029         const struct tcphdr *th = tcp_hdr(skb);
1030
1031         if (!th->syn)
1032                 sk = cookie_v6_check(sk, skb);
1033 #endif
1034         return sk;
1035 }
1036
1037 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1038 {
1039         if (skb->protocol == htons(ETH_P_IP))
1040                 return tcp_v4_conn_request(sk, skb);
1041
1042         if (!ipv6_unicast_destination(skb))
1043                 goto drop;
1044
1045         return tcp_conn_request(&tcp6_request_sock_ops,
1046                                 &tcp_request_sock_ipv6_ops, sk, skb);
1047
1048 drop:
1049         tcp_listendrop(sk);
1050         return 0; /* don't send reset */
1051 }
1052
1053 static void tcp_v6_restore_cb(struct sk_buff *skb)
1054 {
1055         /* We need to move header back to the beginning if xfrm6_policy_check()
1056          * and tcp_v6_fill_cb() are going to be called again.
1057          * ip6_datagram_recv_specific_ctl() also expects IP6CB to be there.
1058          */
1059         memmove(IP6CB(skb), &TCP_SKB_CB(skb)->header.h6,
1060                 sizeof(struct inet6_skb_parm));
1061 }
1062
1063 static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
1064                                          struct request_sock *req,
1065                                          struct dst_entry *dst,
1066                                          struct request_sock *req_unhash,
1067                                          bool *own_req)
1068 {
1069         struct inet_request_sock *ireq;
1070         struct ipv6_pinfo *newnp;
1071         const struct ipv6_pinfo *np = inet6_sk(sk);
1072         struct ipv6_txoptions *opt;
1073         struct tcp6_sock *newtcp6sk;
1074         struct inet_sock *newinet;
1075         struct tcp_sock *newtp;
1076         struct sock *newsk;
1077 #ifdef CONFIG_TCP_MD5SIG
1078         struct tcp_md5sig_key *key;
1079 #endif
1080         struct flowi6 fl6;
1081
1082         if (skb->protocol == htons(ETH_P_IP)) {
1083                 /*
1084                  *      v6 mapped
1085                  */
1086
1087                 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst,
1088                                              req_unhash, own_req);
1089
1090                 if (!newsk)
1091                         return NULL;
1092
1093                 newtcp6sk = (struct tcp6_sock *)newsk;
1094                 inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1095
1096                 newinet = inet_sk(newsk);
1097                 newnp = inet6_sk(newsk);
1098                 newtp = tcp_sk(newsk);
1099
1100                 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1101
1102                 newnp->saddr = newsk->sk_v6_rcv_saddr;
1103
1104                 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
1105                 newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1106 #ifdef CONFIG_TCP_MD5SIG
1107                 newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
1108 #endif
1109
1110                 newnp->ipv6_mc_list = NULL;
1111                 newnp->ipv6_ac_list = NULL;
1112                 newnp->ipv6_fl_list = NULL;
1113                 newnp->pktoptions  = NULL;
1114                 newnp->opt         = NULL;
1115                 newnp->mcast_oif   = tcp_v6_iif(skb);
1116                 newnp->mcast_hops  = ipv6_hdr(skb)->hop_limit;
1117                 newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
1118                 if (np->repflow)
1119                         newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb));
1120
1121                 /*
1122                  * No need to charge this sock to the relevant IPv6 refcnt debug socks count
1123                  * here, tcp_create_openreq_child now does this for us, see the comment in
1124                  * that function for the gory details. -acme
1125                  */
1126
1127                 /* It is tricky place. Until this moment IPv4 tcp
1128                    worked with IPv6 icsk.icsk_af_ops.
1129                    Sync it now.
1130                  */
1131                 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
1132
1133                 return newsk;
1134         }
1135
1136         ireq = inet_rsk(req);
1137
1138         if (sk_acceptq_is_full(sk))
1139                 goto out_overflow;
1140
1141         if (!dst) {
1142                 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_TCP);
1143                 if (!dst)
1144                         goto out;
1145         }
1146
1147         newsk = tcp_create_openreq_child(sk, req, skb);
1148         if (!newsk)
1149                 goto out_nonewsk;
1150
1151         /*
1152          * No need to charge this sock to the relevant IPv6 refcnt debug socks
1153          * count here, tcp_create_openreq_child now does this for us, see the
1154          * comment in that function for the gory details. -acme
1155          */
1156
1157         newsk->sk_gso_type = SKB_GSO_TCPV6;
1158         ip6_dst_store(newsk, dst, NULL, NULL);
1159         inet6_sk_rx_dst_set(newsk, skb);
1160
1161         newtcp6sk = (struct tcp6_sock *)newsk;
1162         inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1163
1164         newtp = tcp_sk(newsk);
1165         newinet = inet_sk(newsk);
1166         newnp = inet6_sk(newsk);
1167
1168         memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1169
1170         newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr;
1171         newnp->saddr = ireq->ir_v6_loc_addr;
1172         newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr;
1173         newsk->sk_bound_dev_if = ireq->ir_iif;
1174
1175         /* Now IPv6 options...
1176
1177            First: no IPv4 options.
1178          */
1179         newinet->inet_opt = NULL;
1180         newnp->ipv6_mc_list = NULL;
1181         newnp->ipv6_ac_list = NULL;
1182         newnp->ipv6_fl_list = NULL;
1183
1184         /* Clone RX bits */
1185         newnp->rxopt.all = np->rxopt.all;
1186
1187         newnp->pktoptions = NULL;
1188         newnp->opt        = NULL;
1189         newnp->mcast_oif  = tcp_v6_iif(skb);
1190         newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1191         newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
1192         if (np->repflow)
1193                 newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb));
1194
1195         /* Clone native IPv6 options from listening socket (if any)
1196
1197            Yes, keeping reference count would be much more clever,
1198            but we make one more one thing there: reattach optmem
1199            to newsk.
1200          */
1201         opt = ireq->ipv6_opt;
1202         if (!opt)
1203                 opt = rcu_dereference(np->opt);
1204         if (opt) {
1205                 opt = ipv6_dup_options(newsk, opt);
1206                 RCU_INIT_POINTER(newnp->opt, opt);
1207         }
1208         inet_csk(newsk)->icsk_ext_hdr_len = 0;
1209         if (opt)
1210                 inet_csk(newsk)->icsk_ext_hdr_len = opt->opt_nflen +
1211                                                     opt->opt_flen;
1212
1213         tcp_ca_openreq_child(newsk, dst);
1214
1215         tcp_sync_mss(newsk, dst_mtu(dst));
1216         newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst));
1217
1218         tcp_initialize_rcv_mss(newsk);
1219
1220         newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
1221         newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
1222
1223 #ifdef CONFIG_TCP_MD5SIG
1224         /* Copy over the MD5 key from the original socket */
1225         key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr);
1226         if (key) {
1227                 /* We're using one, so create a matching key
1228                  * on the newsk structure. If we fail to get
1229                  * memory, then we end up not copying the key
1230                  * across. Shucks.
1231                  */
1232                 tcp_md5_do_add(newsk, (union tcp_md5_addr *)&newsk->sk_v6_daddr,
1233                                AF_INET6, 128, key->key, key->keylen,
1234                                sk_gfp_mask(sk, GFP_ATOMIC));
1235         }
1236 #endif
1237
1238         if (__inet_inherit_port(sk, newsk) < 0) {
1239                 inet_csk_prepare_forced_close(newsk);
1240                 tcp_done(newsk);
1241                 goto out;
1242         }
1243         *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
1244         if (*own_req) {
1245                 tcp_move_syn(newtp, req);
1246
1247                 /* Clone pktoptions received with SYN, if we own the req */
1248                 if (ireq->pktopts) {
1249                         newnp->pktoptions = skb_clone(ireq->pktopts,
1250                                                       sk_gfp_mask(sk, GFP_ATOMIC));
1251                         consume_skb(ireq->pktopts);
1252                         ireq->pktopts = NULL;
1253                         if (newnp->pktoptions) {
1254                                 tcp_v6_restore_cb(newnp->pktoptions);
1255                                 skb_set_owner_r(newnp->pktoptions, newsk);
1256                         }
1257                 }
1258         }
1259
1260         return newsk;
1261
1262 out_overflow:
1263         __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1264 out_nonewsk:
1265         dst_release(dst);
1266 out:
1267         tcp_listendrop(sk);
1268         return NULL;
1269 }
1270
1271 /* The socket must have it's spinlock held when we get
1272  * here, unless it is a TCP_LISTEN socket.
1273  *
1274  * We have a potential double-lock case here, so even when
1275  * doing backlog processing we use the BH locking scheme.
1276  * This is because we cannot sleep with the original spinlock
1277  * held.
1278  */
1279 static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1280 {
1281         struct ipv6_pinfo *np = inet6_sk(sk);
1282         struct tcp_sock *tp;
1283         struct sk_buff *opt_skb = NULL;
1284
1285         /* Imagine: socket is IPv6. IPv4 packet arrives,
1286            goes to IPv4 receive handler and backlogged.
1287            From backlog it always goes here. Kerboom...
1288            Fortunately, tcp_rcv_established and rcv_established
1289            handle them correctly, but it is not case with
1290            tcp_v6_hnd_req and tcp_v6_send_reset().   --ANK
1291          */
1292
1293         if (skb->protocol == htons(ETH_P_IP))
1294                 return tcp_v4_do_rcv(sk, skb);
1295
1296         /*
1297          *      socket locking is here for SMP purposes as backlog rcv
1298          *      is currently called with bh processing disabled.
1299          */
1300
1301         /* Do Stevens' IPV6_PKTOPTIONS.
1302
1303            Yes, guys, it is the only place in our code, where we
1304            may make it not affecting IPv4.
1305            The rest of code is protocol independent,
1306            and I do not like idea to uglify IPv4.
1307
1308            Actually, all the idea behind IPV6_PKTOPTIONS
1309            looks not very well thought. For now we latch
1310            options, received in the last packet, enqueued
1311            by tcp. Feel free to propose better solution.
1312                                                --ANK (980728)
1313          */
1314         if (np->rxopt.all)
1315                 opt_skb = skb_clone(skb, sk_gfp_mask(sk, GFP_ATOMIC));
1316
1317         if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1318                 struct dst_entry *dst = sk->sk_rx_dst;
1319
1320                 sock_rps_save_rxhash(sk, skb);
1321                 sk_mark_napi_id(sk, skb);
1322                 if (dst) {
1323                         if (inet_sk(sk)->rx_dst_ifindex != skb->skb_iif ||
1324                             dst->ops->check(dst, np->rx_dst_cookie) == NULL) {
1325                                 dst_release(dst);
1326                                 sk->sk_rx_dst = NULL;
1327                         }
1328                 }
1329
1330                 tcp_rcv_established(sk, skb);
1331                 if (opt_skb)
1332                         goto ipv6_pktoptions;
1333                 return 0;
1334         }
1335
1336         if (tcp_checksum_complete(skb))
1337                 goto csum_err;
1338
1339         if (sk->sk_state == TCP_LISTEN) {
1340                 struct sock *nsk = tcp_v6_cookie_check(sk, skb);
1341
1342                 if (!nsk)
1343                         goto discard;
1344
1345                 if (nsk != sk) {
1346                         if (tcp_child_process(sk, nsk, skb))
1347                                 goto reset;
1348                         if (opt_skb)
1349                                 __kfree_skb(opt_skb);
1350                         return 0;
1351                 }
1352         } else
1353                 sock_rps_save_rxhash(sk, skb);
1354
1355         if (tcp_rcv_state_process(sk, skb))
1356                 goto reset;
1357         if (opt_skb)
1358                 goto ipv6_pktoptions;
1359         return 0;
1360
1361 reset:
1362         tcp_v6_send_reset(sk, skb);
1363 discard:
1364         if (opt_skb)
1365                 __kfree_skb(opt_skb);
1366         kfree_skb(skb);
1367         return 0;
1368 csum_err:
1369         TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
1370         TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
1371         goto discard;
1372
1373
1374 ipv6_pktoptions:
1375         /* Do you ask, what is it?
1376
1377            1. skb was enqueued by tcp.
1378            2. skb is added to tail of read queue, rather than out of order.
1379            3. socket is not in passive state.
1380            4. Finally, it really contains options, which user wants to receive.
1381          */
1382         tp = tcp_sk(sk);
1383         if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1384             !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1385                 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1386                         np->mcast_oif = tcp_v6_iif(opt_skb);
1387                 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1388                         np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
1389                 if (np->rxopt.bits.rxflow || np->rxopt.bits.rxtclass)
1390                         np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb));
1391                 if (np->repflow)
1392                         np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb));
1393                 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) {
1394                         skb_set_owner_r(opt_skb, sk);
1395                         tcp_v6_restore_cb(opt_skb);
1396                         opt_skb = xchg(&np->pktoptions, opt_skb);
1397                 } else {
1398                         __kfree_skb(opt_skb);
1399                         opt_skb = xchg(&np->pktoptions, NULL);
1400                 }
1401         }
1402
1403         kfree_skb(opt_skb);
1404         return 0;
1405 }
1406
1407 static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr,
1408                            const struct tcphdr *th)
1409 {
1410         /* This is tricky: we move IP6CB at its correct location into
1411          * TCP_SKB_CB(). It must be done after xfrm6_policy_check(), because
1412          * _decode_session6() uses IP6CB().
1413          * barrier() makes sure compiler won't play aliasing games.
1414          */
1415         memmove(&TCP_SKB_CB(skb)->header.h6, IP6CB(skb),
1416                 sizeof(struct inet6_skb_parm));
1417         barrier();
1418
1419         TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1420         TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1421                                     skb->len - th->doff*4);
1422         TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1423         TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th);
1424         TCP_SKB_CB(skb)->tcp_tw_isn = 0;
1425         TCP_SKB_CB(skb)->ip_dsfield = ipv6_get_dsfield(hdr);
1426         TCP_SKB_CB(skb)->sacked = 0;
1427         TCP_SKB_CB(skb)->has_rxtstamp =
1428                         skb->tstamp || skb_hwtstamps(skb)->hwtstamp;
1429 }
1430
1431 static int tcp_v6_rcv(struct sk_buff *skb)
1432 {
1433         int sdif = inet6_sdif(skb);
1434         const struct tcphdr *th;
1435         const struct ipv6hdr *hdr;
1436         bool refcounted;
1437         struct sock *sk;
1438         int ret;
1439         struct net *net = dev_net(skb->dev);
1440
1441         if (skb->pkt_type != PACKET_HOST)
1442                 goto discard_it;
1443
1444         /*
1445          *      Count it even if it's bad.
1446          */
1447         __TCP_INC_STATS(net, TCP_MIB_INSEGS);
1448
1449         if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1450                 goto discard_it;
1451
1452         th = (const struct tcphdr *)skb->data;
1453
1454         if (unlikely(th->doff < sizeof(struct tcphdr)/4))
1455                 goto bad_packet;
1456         if (!pskb_may_pull(skb, th->doff*4))
1457                 goto discard_it;
1458
1459         if (skb_checksum_init(skb, IPPROTO_TCP, ip6_compute_pseudo))
1460                 goto csum_error;
1461
1462         th = (const struct tcphdr *)skb->data;
1463         hdr = ipv6_hdr(skb);
1464
1465 lookup:
1466         sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th),
1467                                 th->source, th->dest, inet6_iif(skb), sdif,
1468                                 &refcounted);
1469         if (!sk)
1470                 goto no_tcp_socket;
1471
1472 process:
1473         if (sk->sk_state == TCP_TIME_WAIT)
1474                 goto do_time_wait;
1475
1476         if (sk->sk_state == TCP_NEW_SYN_RECV) {
1477                 struct request_sock *req = inet_reqsk(sk);
1478                 bool req_stolen = false;
1479                 struct sock *nsk;
1480
1481                 sk = req->rsk_listener;
1482                 if (tcp_v6_inbound_md5_hash(sk, skb)) {
1483                         sk_drops_add(sk, skb);
1484                         reqsk_put(req);
1485                         goto discard_it;
1486                 }
1487                 if (tcp_checksum_complete(skb)) {
1488                         reqsk_put(req);
1489                         goto csum_error;
1490                 }
1491                 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1492                         inet_csk_reqsk_queue_drop_and_put(sk, req);
1493                         goto lookup;
1494                 }
1495                 sock_hold(sk);
1496                 refcounted = true;
1497                 nsk = NULL;
1498                 if (!tcp_filter(sk, skb)) {
1499                         th = (const struct tcphdr *)skb->data;
1500                         hdr = ipv6_hdr(skb);
1501                         tcp_v6_fill_cb(skb, hdr, th);
1502                         nsk = tcp_check_req(sk, skb, req, false, &req_stolen);
1503                 }
1504                 if (!nsk) {
1505                         reqsk_put(req);
1506                         if (req_stolen) {
1507                                 /* Another cpu got exclusive access to req
1508                                  * and created a full blown socket.
1509                                  * Try to feed this packet to this socket
1510                                  * instead of discarding it.
1511                                  */
1512                                 tcp_v6_restore_cb(skb);
1513                                 sock_put(sk);
1514                                 goto lookup;
1515                         }
1516                         goto discard_and_relse;
1517                 }
1518                 if (nsk == sk) {
1519                         reqsk_put(req);
1520                         tcp_v6_restore_cb(skb);
1521                 } else if (tcp_child_process(sk, nsk, skb)) {
1522                         tcp_v6_send_reset(nsk, skb);
1523                         goto discard_and_relse;
1524                 } else {
1525                         sock_put(sk);
1526                         return 0;
1527                 }
1528         }
1529         if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
1530                 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
1531                 goto discard_and_relse;
1532         }
1533
1534         if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1535                 goto discard_and_relse;
1536
1537         if (tcp_v6_inbound_md5_hash(sk, skb))
1538                 goto discard_and_relse;
1539
1540         if (tcp_filter(sk, skb))
1541                 goto discard_and_relse;
1542         th = (const struct tcphdr *)skb->data;
1543         hdr = ipv6_hdr(skb);
1544         tcp_v6_fill_cb(skb, hdr, th);
1545
1546         skb->dev = NULL;
1547
1548         if (sk->sk_state == TCP_LISTEN) {
1549                 ret = tcp_v6_do_rcv(sk, skb);
1550                 goto put_and_return;
1551         }
1552
1553         sk_incoming_cpu_update(sk);
1554
1555         bh_lock_sock_nested(sk);
1556         tcp_segs_in(tcp_sk(sk), skb);
1557         ret = 0;
1558         if (!sock_owned_by_user(sk)) {
1559                 ret = tcp_v6_do_rcv(sk, skb);
1560         } else if (tcp_add_backlog(sk, skb)) {
1561                 goto discard_and_relse;
1562         }
1563         bh_unlock_sock(sk);
1564
1565 put_and_return:
1566         if (refcounted)
1567                 sock_put(sk);
1568         return ret ? -1 : 0;
1569
1570 no_tcp_socket:
1571         if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1572                 goto discard_it;
1573
1574         tcp_v6_fill_cb(skb, hdr, th);
1575
1576         if (tcp_checksum_complete(skb)) {
1577 csum_error:
1578                 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS);
1579 bad_packet:
1580                 __TCP_INC_STATS(net, TCP_MIB_INERRS);
1581         } else {
1582                 tcp_v6_send_reset(NULL, skb);
1583         }
1584
1585 discard_it:
1586         kfree_skb(skb);
1587         return 0;
1588
1589 discard_and_relse:
1590         sk_drops_add(sk, skb);
1591         if (refcounted)
1592                 sock_put(sk);
1593         goto discard_it;
1594
1595 do_time_wait:
1596         if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1597                 inet_twsk_put(inet_twsk(sk));
1598                 goto discard_it;
1599         }
1600
1601         tcp_v6_fill_cb(skb, hdr, th);
1602
1603         if (tcp_checksum_complete(skb)) {
1604                 inet_twsk_put(inet_twsk(sk));
1605                 goto csum_error;
1606         }
1607
1608         switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
1609         case TCP_TW_SYN:
1610         {
1611                 struct sock *sk2;
1612
1613                 sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo,
1614                                             skb, __tcp_hdrlen(th),
1615                                             &ipv6_hdr(skb)->saddr, th->source,
1616                                             &ipv6_hdr(skb)->daddr,
1617                                             ntohs(th->dest),
1618                                             tcp_v6_iif_l3_slave(skb),
1619                                             sdif);
1620                 if (sk2) {
1621                         struct inet_timewait_sock *tw = inet_twsk(sk);
1622                         inet_twsk_deschedule_put(tw);
1623                         sk = sk2;
1624                         tcp_v6_restore_cb(skb);
1625                         refcounted = false;
1626                         goto process;
1627                 }
1628         }
1629                 /* to ACK */
1630                 /* fall through */
1631         case TCP_TW_ACK:
1632                 tcp_v6_timewait_ack(sk, skb);
1633                 break;
1634         case TCP_TW_RST:
1635                 tcp_v6_send_reset(sk, skb);
1636                 inet_twsk_deschedule_put(inet_twsk(sk));
1637                 goto discard_it;
1638         case TCP_TW_SUCCESS:
1639                 ;
1640         }
1641         goto discard_it;
1642 }
1643
1644 static void tcp_v6_early_demux(struct sk_buff *skb)
1645 {
1646         const struct ipv6hdr *hdr;
1647         const struct tcphdr *th;
1648         struct sock *sk;
1649
1650         if (skb->pkt_type != PACKET_HOST)
1651                 return;
1652
1653         if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr)))
1654                 return;
1655
1656         hdr = ipv6_hdr(skb);
1657         th = tcp_hdr(skb);
1658
1659         if (th->doff < sizeof(struct tcphdr) / 4)
1660                 return;
1661
1662         /* Note : We use inet6_iif() here, not tcp_v6_iif() */
1663         sk = __inet6_lookup_established(dev_net(skb->dev), &tcp_hashinfo,
1664                                         &hdr->saddr, th->source,
1665                                         &hdr->daddr, ntohs(th->dest),
1666                                         inet6_iif(skb), inet6_sdif(skb));
1667         if (sk) {
1668                 skb->sk = sk;
1669                 skb->destructor = sock_edemux;
1670                 if (sk_fullsock(sk)) {
1671                         struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
1672
1673                         if (dst)
1674                                 dst = dst_check(dst, inet6_sk(sk)->rx_dst_cookie);
1675                         if (dst &&
1676                             inet_sk(sk)->rx_dst_ifindex == skb->skb_iif)
1677                                 skb_dst_set_noref(skb, dst);
1678                 }
1679         }
1680 }
1681
1682 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
1683         .twsk_obj_size  = sizeof(struct tcp6_timewait_sock),
1684         .twsk_unique    = tcp_twsk_unique,
1685         .twsk_destructor = tcp_twsk_destructor,
1686 };
1687
1688 static const struct inet_connection_sock_af_ops ipv6_specific = {
1689         .queue_xmit        = inet6_csk_xmit,
1690         .send_check        = tcp_v6_send_check,
1691         .rebuild_header    = inet6_sk_rebuild_header,
1692         .sk_rx_dst_set     = inet6_sk_rx_dst_set,
1693         .conn_request      = tcp_v6_conn_request,
1694         .syn_recv_sock     = tcp_v6_syn_recv_sock,
1695         .net_header_len    = sizeof(struct ipv6hdr),
1696         .net_frag_header_len = sizeof(struct frag_hdr),
1697         .setsockopt        = ipv6_setsockopt,
1698         .getsockopt        = ipv6_getsockopt,
1699         .addr2sockaddr     = inet6_csk_addr2sockaddr,
1700         .sockaddr_len      = sizeof(struct sockaddr_in6),
1701 #ifdef CONFIG_COMPAT
1702         .compat_setsockopt = compat_ipv6_setsockopt,
1703         .compat_getsockopt = compat_ipv6_getsockopt,
1704 #endif
1705         .mtu_reduced       = tcp_v6_mtu_reduced,
1706 };
1707
1708 #ifdef CONFIG_TCP_MD5SIG
1709 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = {
1710         .md5_lookup     =       tcp_v6_md5_lookup,
1711         .calc_md5_hash  =       tcp_v6_md5_hash_skb,
1712         .md5_parse      =       tcp_v6_parse_md5_keys,
1713 };
1714 #endif
1715
1716 /*
1717  *      TCP over IPv4 via INET6 API
1718  */
1719 static const struct inet_connection_sock_af_ops ipv6_mapped = {
1720         .queue_xmit        = ip_queue_xmit,
1721         .send_check        = tcp_v4_send_check,
1722         .rebuild_header    = inet_sk_rebuild_header,
1723         .sk_rx_dst_set     = inet_sk_rx_dst_set,
1724         .conn_request      = tcp_v6_conn_request,
1725         .syn_recv_sock     = tcp_v6_syn_recv_sock,
1726         .net_header_len    = sizeof(struct iphdr),
1727         .setsockopt        = ipv6_setsockopt,
1728         .getsockopt        = ipv6_getsockopt,
1729         .addr2sockaddr     = inet6_csk_addr2sockaddr,
1730         .sockaddr_len      = sizeof(struct sockaddr_in6),
1731 #ifdef CONFIG_COMPAT
1732         .compat_setsockopt = compat_ipv6_setsockopt,
1733         .compat_getsockopt = compat_ipv6_getsockopt,
1734 #endif
1735         .mtu_reduced       = tcp_v4_mtu_reduced,
1736 };
1737
1738 #ifdef CONFIG_TCP_MD5SIG
1739 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = {
1740         .md5_lookup     =       tcp_v4_md5_lookup,
1741         .calc_md5_hash  =       tcp_v4_md5_hash_skb,
1742         .md5_parse      =       tcp_v6_parse_md5_keys,
1743 };
1744 #endif
1745
1746 /* NOTE: A lot of things set to zero explicitly by call to
1747  *       sk_alloc() so need not be done here.
1748  */
1749 static int tcp_v6_init_sock(struct sock *sk)
1750 {
1751         struct inet_connection_sock *icsk = inet_csk(sk);
1752
1753         tcp_init_sock(sk);
1754
1755         icsk->icsk_af_ops = &ipv6_specific;
1756
1757 #ifdef CONFIG_TCP_MD5SIG
1758         tcp_sk(sk)->af_specific = &tcp_sock_ipv6_specific;
1759 #endif
1760
1761         return 0;
1762 }
1763
1764 static void tcp_v6_destroy_sock(struct sock *sk)
1765 {
1766         tcp_v4_destroy_sock(sk);
1767         inet6_destroy_sock(sk);
1768 }
1769
1770 #ifdef CONFIG_PROC_FS
1771 /* Proc filesystem TCPv6 sock list dumping. */
1772 static void get_openreq6(struct seq_file *seq,
1773                          const struct request_sock *req, int i)
1774 {
1775         long ttd = req->rsk_timer.expires - jiffies;
1776         const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr;
1777         const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr;
1778
1779         if (ttd < 0)
1780                 ttd = 0;
1781
1782         seq_printf(seq,
1783                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1784                    "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n",
1785                    i,
1786                    src->s6_addr32[0], src->s6_addr32[1],
1787                    src->s6_addr32[2], src->s6_addr32[3],
1788                    inet_rsk(req)->ir_num,
1789                    dest->s6_addr32[0], dest->s6_addr32[1],
1790                    dest->s6_addr32[2], dest->s6_addr32[3],
1791                    ntohs(inet_rsk(req)->ir_rmt_port),
1792                    TCP_SYN_RECV,
1793                    0, 0, /* could print option size, but that is af dependent. */
1794                    1,   /* timers active (only the expire timer) */
1795                    jiffies_to_clock_t(ttd),
1796                    req->num_timeout,
1797                    from_kuid_munged(seq_user_ns(seq),
1798                                     sock_i_uid(req->rsk_listener)),
1799                    0,  /* non standard timer */
1800                    0, /* open_requests have no inode */
1801                    0, req);
1802 }
1803
1804 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
1805 {
1806         const struct in6_addr *dest, *src;
1807         __u16 destp, srcp;
1808         int timer_active;
1809         unsigned long timer_expires;
1810         const struct inet_sock *inet = inet_sk(sp);
1811         const struct tcp_sock *tp = tcp_sk(sp);
1812         const struct inet_connection_sock *icsk = inet_csk(sp);
1813         const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq;
1814         int rx_queue;
1815         int state;
1816
1817         dest  = &sp->sk_v6_daddr;
1818         src   = &sp->sk_v6_rcv_saddr;
1819         destp = ntohs(inet->inet_dport);
1820         srcp  = ntohs(inet->inet_sport);
1821
1822         if (icsk->icsk_pending == ICSK_TIME_RETRANS ||
1823             icsk->icsk_pending == ICSK_TIME_REO_TIMEOUT ||
1824             icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) {
1825                 timer_active    = 1;
1826                 timer_expires   = icsk->icsk_timeout;
1827         } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
1828                 timer_active    = 4;
1829                 timer_expires   = icsk->icsk_timeout;
1830         } else if (timer_pending(&sp->sk_timer)) {
1831                 timer_active    = 2;
1832                 timer_expires   = sp->sk_timer.expires;
1833         } else {
1834                 timer_active    = 0;
1835                 timer_expires = jiffies;
1836         }
1837
1838         state = inet_sk_state_load(sp);
1839         if (state == TCP_LISTEN)
1840                 rx_queue = sp->sk_ack_backlog;
1841         else
1842                 /* Because we don't lock the socket,
1843                  * we might find a transient negative value.
1844                  */
1845                 rx_queue = max_t(int, tp->rcv_nxt - tp->copied_seq, 0);
1846
1847         seq_printf(seq,
1848                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1849                    "%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n",
1850                    i,
1851                    src->s6_addr32[0], src->s6_addr32[1],
1852                    src->s6_addr32[2], src->s6_addr32[3], srcp,
1853                    dest->s6_addr32[0], dest->s6_addr32[1],
1854                    dest->s6_addr32[2], dest->s6_addr32[3], destp,
1855                    state,
1856                    tp->write_seq - tp->snd_una,
1857                    rx_queue,
1858                    timer_active,
1859                    jiffies_delta_to_clock_t(timer_expires - jiffies),
1860                    icsk->icsk_retransmits,
1861                    from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)),
1862                    icsk->icsk_probes_out,
1863                    sock_i_ino(sp),
1864                    refcount_read(&sp->sk_refcnt), sp,
1865                    jiffies_to_clock_t(icsk->icsk_rto),
1866                    jiffies_to_clock_t(icsk->icsk_ack.ato),
1867                    (icsk->icsk_ack.quick << 1) | icsk->icsk_ack.pingpong,
1868                    tp->snd_cwnd,
1869                    state == TCP_LISTEN ?
1870                         fastopenq->max_qlen :
1871                         (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh)
1872                    );
1873 }
1874
1875 static void get_timewait6_sock(struct seq_file *seq,
1876                                struct inet_timewait_sock *tw, int i)
1877 {
1878         long delta = tw->tw_timer.expires - jiffies;
1879         const struct in6_addr *dest, *src;
1880         __u16 destp, srcp;
1881
1882         dest = &tw->tw_v6_daddr;
1883         src  = &tw->tw_v6_rcv_saddr;
1884         destp = ntohs(tw->tw_dport);
1885         srcp  = ntohs(tw->tw_sport);
1886
1887         seq_printf(seq,
1888                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1889                    "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n",
1890                    i,
1891                    src->s6_addr32[0], src->s6_addr32[1],
1892                    src->s6_addr32[2], src->s6_addr32[3], srcp,
1893                    dest->s6_addr32[0], dest->s6_addr32[1],
1894                    dest->s6_addr32[2], dest->s6_addr32[3], destp,
1895                    tw->tw_substate, 0, 0,
1896                    3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0,
1897                    refcount_read(&tw->tw_refcnt), tw);
1898 }
1899
1900 static int tcp6_seq_show(struct seq_file *seq, void *v)
1901 {
1902         struct tcp_iter_state *st;
1903         struct sock *sk = v;
1904
1905         if (v == SEQ_START_TOKEN) {
1906                 seq_puts(seq,
1907                          "  sl  "
1908                          "local_address                         "
1909                          "remote_address                        "
1910                          "st tx_queue rx_queue tr tm->when retrnsmt"
1911                          "   uid  timeout inode\n");
1912                 goto out;
1913         }
1914         st = seq->private;
1915
1916         if (sk->sk_state == TCP_TIME_WAIT)
1917                 get_timewait6_sock(seq, v, st->num);
1918         else if (sk->sk_state == TCP_NEW_SYN_RECV)
1919                 get_openreq6(seq, v, st->num);
1920         else
1921                 get_tcp6_sock(seq, v, st->num);
1922 out:
1923         return 0;
1924 }
1925
1926 static const struct seq_operations tcp6_seq_ops = {
1927         .show           = tcp6_seq_show,
1928         .start          = tcp_seq_start,
1929         .next           = tcp_seq_next,
1930         .stop           = tcp_seq_stop,
1931 };
1932
1933 static struct tcp_seq_afinfo tcp6_seq_afinfo = {
1934         .family         = AF_INET6,
1935 };
1936
1937 int __net_init tcp6_proc_init(struct net *net)
1938 {
1939         if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops,
1940                         sizeof(struct tcp_iter_state), &tcp6_seq_afinfo))
1941                 return -ENOMEM;
1942         return 0;
1943 }
1944
1945 void tcp6_proc_exit(struct net *net)
1946 {
1947         remove_proc_entry("tcp6", net->proc_net);
1948 }
1949 #endif
1950
1951 struct proto tcpv6_prot = {
1952         .name                   = "TCPv6",
1953         .owner                  = THIS_MODULE,
1954         .close                  = tcp_close,
1955         .pre_connect            = tcp_v6_pre_connect,
1956         .connect                = tcp_v6_connect,
1957         .disconnect             = tcp_disconnect,
1958         .accept                 = inet_csk_accept,
1959         .ioctl                  = tcp_ioctl,
1960         .init                   = tcp_v6_init_sock,
1961         .destroy                = tcp_v6_destroy_sock,
1962         .shutdown               = tcp_shutdown,
1963         .setsockopt             = tcp_setsockopt,
1964         .getsockopt             = tcp_getsockopt,
1965         .keepalive              = tcp_set_keepalive,
1966         .recvmsg                = tcp_recvmsg,
1967         .sendmsg                = tcp_sendmsg,
1968         .sendpage               = tcp_sendpage,
1969         .backlog_rcv            = tcp_v6_do_rcv,
1970         .release_cb             = tcp_release_cb,
1971         .hash                   = inet6_hash,
1972         .unhash                 = inet_unhash,
1973         .get_port               = inet_csk_get_port,
1974         .enter_memory_pressure  = tcp_enter_memory_pressure,
1975         .leave_memory_pressure  = tcp_leave_memory_pressure,
1976         .stream_memory_free     = tcp_stream_memory_free,
1977         .sockets_allocated      = &tcp_sockets_allocated,
1978         .memory_allocated       = &tcp_memory_allocated,
1979         .memory_pressure        = &tcp_memory_pressure,
1980         .orphan_count           = &tcp_orphan_count,
1981         .sysctl_mem             = sysctl_tcp_mem,
1982         .sysctl_wmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_wmem),
1983         .sysctl_rmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_rmem),
1984         .max_header             = MAX_TCP_HEADER,
1985         .obj_size               = sizeof(struct tcp6_sock),
1986         .slab_flags             = SLAB_TYPESAFE_BY_RCU,
1987         .twsk_prot              = &tcp6_timewait_sock_ops,
1988         .rsk_prot               = &tcp6_request_sock_ops,
1989         .h.hashinfo             = &tcp_hashinfo,
1990         .no_autobind            = true,
1991 #ifdef CONFIG_COMPAT
1992         .compat_setsockopt      = compat_tcp_setsockopt,
1993         .compat_getsockopt      = compat_tcp_getsockopt,
1994 #endif
1995         .diag_destroy           = tcp_abort,
1996 };
1997
1998 /* thinking of making this const? Don't.
1999  * early_demux can change based on sysctl.
2000  */
2001 static struct inet6_protocol tcpv6_protocol = {
2002         .early_demux    =       tcp_v6_early_demux,
2003         .early_demux_handler =  tcp_v6_early_demux,
2004         .handler        =       tcp_v6_rcv,
2005         .err_handler    =       tcp_v6_err,
2006         .flags          =       INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
2007 };
2008
2009 static struct inet_protosw tcpv6_protosw = {
2010         .type           =       SOCK_STREAM,
2011         .protocol       =       IPPROTO_TCP,
2012         .prot           =       &tcpv6_prot,
2013         .ops            =       &inet6_stream_ops,
2014         .flags          =       INET_PROTOSW_PERMANENT |
2015                                 INET_PROTOSW_ICSK,
2016 };
2017
2018 static int __net_init tcpv6_net_init(struct net *net)
2019 {
2020         return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
2021                                     SOCK_RAW, IPPROTO_TCP, net);
2022 }
2023
2024 static void __net_exit tcpv6_net_exit(struct net *net)
2025 {
2026         inet_ctl_sock_destroy(net->ipv6.tcp_sk);
2027 }
2028
2029 static void __net_exit tcpv6_net_exit_batch(struct list_head *net_exit_list)
2030 {
2031         inet_twsk_purge(&tcp_hashinfo, AF_INET6);
2032 }
2033
2034 static struct pernet_operations tcpv6_net_ops = {
2035         .init       = tcpv6_net_init,
2036         .exit       = tcpv6_net_exit,
2037         .exit_batch = tcpv6_net_exit_batch,
2038 };
2039
2040 int __init tcpv6_init(void)
2041 {
2042         int ret;
2043
2044         ret = inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP);
2045         if (ret)
2046                 goto out;
2047
2048         /* register inet6 protocol */
2049         ret = inet6_register_protosw(&tcpv6_protosw);
2050         if (ret)
2051                 goto out_tcpv6_protocol;
2052
2053         ret = register_pernet_subsys(&tcpv6_net_ops);
2054         if (ret)
2055                 goto out_tcpv6_protosw;
2056 out:
2057         return ret;
2058
2059 out_tcpv6_protosw:
2060         inet6_unregister_protosw(&tcpv6_protosw);
2061 out_tcpv6_protocol:
2062         inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2063         goto out;
2064 }
2065
2066 void tcpv6_exit(void)
2067 {
2068         unregister_pernet_subsys(&tcpv6_net_ops);
2069         inet6_unregister_protosw(&tcpv6_protosw);
2070         inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2071 }