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