Merge tag 'trace-v4.18-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[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 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         __u32 mark = 0;
807
808         if (tsecr)
809                 tot_len += TCPOLEN_TSTAMP_ALIGNED;
810 #ifdef CONFIG_TCP_MD5SIG
811         if (key)
812                 tot_len += TCPOLEN_MD5SIG_ALIGNED;
813 #endif
814
815         buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
816                          GFP_ATOMIC);
817         if (!buff)
818                 return;
819
820         skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
821
822         t1 = skb_push(buff, tot_len);
823         skb_reset_transport_header(buff);
824
825         /* Swap the send and the receive. */
826         memset(t1, 0, sizeof(*t1));
827         t1->dest = th->source;
828         t1->source = th->dest;
829         t1->doff = tot_len / 4;
830         t1->seq = htonl(seq);
831         t1->ack_seq = htonl(ack);
832         t1->ack = !rst || !th->ack;
833         t1->rst = rst;
834         t1->window = htons(win);
835
836         topt = (__be32 *)(t1 + 1);
837
838         if (tsecr) {
839                 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
840                                 (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
841                 *topt++ = htonl(tsval);
842                 *topt++ = htonl(tsecr);
843         }
844
845 #ifdef CONFIG_TCP_MD5SIG
846         if (key) {
847                 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
848                                 (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
849                 tcp_v6_md5_hash_hdr((__u8 *)topt, key,
850                                     &ipv6_hdr(skb)->saddr,
851                                     &ipv6_hdr(skb)->daddr, t1);
852         }
853 #endif
854
855         memset(&fl6, 0, sizeof(fl6));
856         fl6.daddr = ipv6_hdr(skb)->saddr;
857         fl6.saddr = ipv6_hdr(skb)->daddr;
858         fl6.flowlabel = label;
859
860         buff->ip_summed = CHECKSUM_PARTIAL;
861         buff->csum = 0;
862
863         __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr);
864
865         fl6.flowi6_proto = IPPROTO_TCP;
866         if (rt6_need_strict(&fl6.daddr) && !oif)
867                 fl6.flowi6_oif = tcp_v6_iif(skb);
868         else {
869                 if (!oif && netif_index_is_l3_master(net, skb->skb_iif))
870                         oif = skb->skb_iif;
871
872                 fl6.flowi6_oif = oif;
873         }
874
875         if (sk)
876                 mark = (sk->sk_state == TCP_TIME_WAIT) ?
877                         inet_twsk(sk)->tw_mark : sk->sk_mark;
878         fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark) ?: mark;
879         fl6.fl6_dport = t1->dest;
880         fl6.fl6_sport = t1->source;
881         fl6.flowi6_uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
882         security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
883
884         /* Pass a socket to ip6_dst_lookup either it is for RST
885          * Underlying function will use this to retrieve the network
886          * namespace
887          */
888         dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL);
889         if (!IS_ERR(dst)) {
890                 skb_dst_set(buff, dst);
891                 ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, tclass);
892                 TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
893                 if (rst)
894                         TCP_INC_STATS(net, TCP_MIB_OUTRSTS);
895                 return;
896         }
897
898         kfree_skb(buff);
899 }
900
901 static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb)
902 {
903         const struct tcphdr *th = tcp_hdr(skb);
904         u32 seq = 0, ack_seq = 0;
905         struct tcp_md5sig_key *key = NULL;
906 #ifdef CONFIG_TCP_MD5SIG
907         const __u8 *hash_location = NULL;
908         struct ipv6hdr *ipv6h = ipv6_hdr(skb);
909         unsigned char newhash[16];
910         int genhash;
911         struct sock *sk1 = NULL;
912 #endif
913         int oif = 0;
914
915         if (th->rst)
916                 return;
917
918         /* If sk not NULL, it means we did a successful lookup and incoming
919          * route had to be correct. prequeue might have dropped our dst.
920          */
921         if (!sk && !ipv6_unicast_destination(skb))
922                 return;
923
924 #ifdef CONFIG_TCP_MD5SIG
925         rcu_read_lock();
926         hash_location = tcp_parse_md5sig_option(th);
927         if (sk && sk_fullsock(sk)) {
928                 key = tcp_v6_md5_do_lookup(sk, &ipv6h->saddr);
929         } else if (hash_location) {
930                 /*
931                  * active side is lost. Try to find listening socket through
932                  * source port, and then find md5 key through listening socket.
933                  * we are not loose security here:
934                  * Incoming packet is checked with md5 hash with finding key,
935                  * no RST generated if md5 hash doesn't match.
936                  */
937                 sk1 = inet6_lookup_listener(dev_net(skb_dst(skb)->dev),
938                                            &tcp_hashinfo, NULL, 0,
939                                            &ipv6h->saddr,
940                                            th->source, &ipv6h->daddr,
941                                            ntohs(th->source),
942                                            tcp_v6_iif_l3_slave(skb),
943                                            tcp_v6_sdif(skb));
944                 if (!sk1)
945                         goto out;
946
947                 key = tcp_v6_md5_do_lookup(sk1, &ipv6h->saddr);
948                 if (!key)
949                         goto out;
950
951                 genhash = tcp_v6_md5_hash_skb(newhash, key, NULL, skb);
952                 if (genhash || memcmp(hash_location, newhash, 16) != 0)
953                         goto out;
954         }
955 #endif
956
957         if (th->ack)
958                 seq = ntohl(th->ack_seq);
959         else
960                 ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len -
961                           (th->doff << 2);
962
963         if (sk) {
964                 oif = sk->sk_bound_dev_if;
965                 if (sk_fullsock(sk))
966                         trace_tcp_send_reset(sk, skb);
967         }
968
969         tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1, 0, 0);
970
971 #ifdef CONFIG_TCP_MD5SIG
972 out:
973         rcu_read_unlock();
974 #endif
975 }
976
977 static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq,
978                             u32 ack, u32 win, u32 tsval, u32 tsecr, int oif,
979                             struct tcp_md5sig_key *key, u8 tclass,
980                             __be32 label)
981 {
982         tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, key, 0,
983                              tclass, label);
984 }
985
986 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
987 {
988         struct inet_timewait_sock *tw = inet_twsk(sk);
989         struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
990
991         tcp_v6_send_ack(sk, skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
992                         tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
993                         tcp_time_stamp_raw() + tcptw->tw_ts_offset,
994                         tcptw->tw_ts_recent, tw->tw_bound_dev_if, tcp_twsk_md5_key(tcptw),
995                         tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel));
996
997         inet_twsk_put(tw);
998 }
999
1000 static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
1001                                   struct request_sock *req)
1002 {
1003         /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV
1004          * sk->sk_state == TCP_SYN_RECV -> for Fast Open.
1005          */
1006         /* RFC 7323 2.3
1007          * The window field (SEG.WND) of every outgoing segment, with the
1008          * exception of <SYN> segments, MUST be right-shifted by
1009          * Rcv.Wind.Shift bits:
1010          */
1011         tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ?
1012                         tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
1013                         tcp_rsk(req)->rcv_nxt,
1014                         req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
1015                         tcp_time_stamp_raw() + tcp_rsk(req)->ts_off,
1016                         req->ts_recent, sk->sk_bound_dev_if,
1017                         tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr),
1018                         0, 0);
1019 }
1020
1021
1022 static struct sock *tcp_v6_cookie_check(struct sock *sk, struct sk_buff *skb)
1023 {
1024 #ifdef CONFIG_SYN_COOKIES
1025         const struct tcphdr *th = tcp_hdr(skb);
1026
1027         if (!th->syn)
1028                 sk = cookie_v6_check(sk, skb);
1029 #endif
1030         return sk;
1031 }
1032
1033 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1034 {
1035         if (skb->protocol == htons(ETH_P_IP))
1036                 return tcp_v4_conn_request(sk, skb);
1037
1038         if (!ipv6_unicast_destination(skb))
1039                 goto drop;
1040
1041         return tcp_conn_request(&tcp6_request_sock_ops,
1042                                 &tcp_request_sock_ipv6_ops, sk, skb);
1043
1044 drop:
1045         tcp_listendrop(sk);
1046         return 0; /* don't send reset */
1047 }
1048
1049 static void tcp_v6_restore_cb(struct sk_buff *skb)
1050 {
1051         /* We need to move header back to the beginning if xfrm6_policy_check()
1052          * and tcp_v6_fill_cb() are going to be called again.
1053          * ip6_datagram_recv_specific_ctl() also expects IP6CB to be there.
1054          */
1055         memmove(IP6CB(skb), &TCP_SKB_CB(skb)->header.h6,
1056                 sizeof(struct inet6_skb_parm));
1057 }
1058
1059 static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
1060                                          struct request_sock *req,
1061                                          struct dst_entry *dst,
1062                                          struct request_sock *req_unhash,
1063                                          bool *own_req)
1064 {
1065         struct inet_request_sock *ireq;
1066         struct ipv6_pinfo *newnp;
1067         const struct ipv6_pinfo *np = inet6_sk(sk);
1068         struct ipv6_txoptions *opt;
1069         struct tcp6_sock *newtcp6sk;
1070         struct inet_sock *newinet;
1071         struct tcp_sock *newtp;
1072         struct sock *newsk;
1073 #ifdef CONFIG_TCP_MD5SIG
1074         struct tcp_md5sig_key *key;
1075 #endif
1076         struct flowi6 fl6;
1077
1078         if (skb->protocol == htons(ETH_P_IP)) {
1079                 /*
1080                  *      v6 mapped
1081                  */
1082
1083                 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst,
1084                                              req_unhash, own_req);
1085
1086                 if (!newsk)
1087                         return NULL;
1088
1089                 newtcp6sk = (struct tcp6_sock *)newsk;
1090                 inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1091
1092                 newinet = inet_sk(newsk);
1093                 newnp = inet6_sk(newsk);
1094                 newtp = tcp_sk(newsk);
1095
1096                 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1097
1098                 newnp->saddr = newsk->sk_v6_rcv_saddr;
1099
1100                 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
1101                 newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1102 #ifdef CONFIG_TCP_MD5SIG
1103                 newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
1104 #endif
1105
1106                 newnp->ipv6_mc_list = NULL;
1107                 newnp->ipv6_ac_list = NULL;
1108                 newnp->ipv6_fl_list = NULL;
1109                 newnp->pktoptions  = NULL;
1110                 newnp->opt         = NULL;
1111                 newnp->mcast_oif   = tcp_v6_iif(skb);
1112                 newnp->mcast_hops  = ipv6_hdr(skb)->hop_limit;
1113                 newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
1114                 if (np->repflow)
1115                         newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb));
1116
1117                 /*
1118                  * No need to charge this sock to the relevant IPv6 refcnt debug socks count
1119                  * here, tcp_create_openreq_child now does this for us, see the comment in
1120                  * that function for the gory details. -acme
1121                  */
1122
1123                 /* It is tricky place. Until this moment IPv4 tcp
1124                    worked with IPv6 icsk.icsk_af_ops.
1125                    Sync it now.
1126                  */
1127                 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
1128
1129                 return newsk;
1130         }
1131
1132         ireq = inet_rsk(req);
1133
1134         if (sk_acceptq_is_full(sk))
1135                 goto out_overflow;
1136
1137         if (!dst) {
1138                 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_TCP);
1139                 if (!dst)
1140                         goto out;
1141         }
1142
1143         newsk = tcp_create_openreq_child(sk, req, skb);
1144         if (!newsk)
1145                 goto out_nonewsk;
1146
1147         /*
1148          * No need to charge this sock to the relevant IPv6 refcnt debug socks
1149          * count here, tcp_create_openreq_child now does this for us, see the
1150          * comment in that function for the gory details. -acme
1151          */
1152
1153         newsk->sk_gso_type = SKB_GSO_TCPV6;
1154         ip6_dst_store(newsk, dst, NULL, NULL);
1155         inet6_sk_rx_dst_set(newsk, skb);
1156
1157         newtcp6sk = (struct tcp6_sock *)newsk;
1158         inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1159
1160         newtp = tcp_sk(newsk);
1161         newinet = inet_sk(newsk);
1162         newnp = inet6_sk(newsk);
1163
1164         memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1165
1166         newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr;
1167         newnp->saddr = ireq->ir_v6_loc_addr;
1168         newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr;
1169         newsk->sk_bound_dev_if = ireq->ir_iif;
1170
1171         /* Now IPv6 options...
1172
1173            First: no IPv4 options.
1174          */
1175         newinet->inet_opt = NULL;
1176         newnp->ipv6_mc_list = NULL;
1177         newnp->ipv6_ac_list = NULL;
1178         newnp->ipv6_fl_list = NULL;
1179
1180         /* Clone RX bits */
1181         newnp->rxopt.all = np->rxopt.all;
1182
1183         newnp->pktoptions = NULL;
1184         newnp->opt        = NULL;
1185         newnp->mcast_oif  = tcp_v6_iif(skb);
1186         newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1187         newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
1188         if (np->repflow)
1189                 newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb));
1190
1191         /* Clone native IPv6 options from listening socket (if any)
1192
1193            Yes, keeping reference count would be much more clever,
1194            but we make one more one thing there: reattach optmem
1195            to newsk.
1196          */
1197         opt = ireq->ipv6_opt;
1198         if (!opt)
1199                 opt = rcu_dereference(np->opt);
1200         if (opt) {
1201                 opt = ipv6_dup_options(newsk, opt);
1202                 RCU_INIT_POINTER(newnp->opt, opt);
1203         }
1204         inet_csk(newsk)->icsk_ext_hdr_len = 0;
1205         if (opt)
1206                 inet_csk(newsk)->icsk_ext_hdr_len = opt->opt_nflen +
1207                                                     opt->opt_flen;
1208
1209         tcp_ca_openreq_child(newsk, dst);
1210
1211         tcp_sync_mss(newsk, dst_mtu(dst));
1212         newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst));
1213
1214         tcp_initialize_rcv_mss(newsk);
1215
1216         newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
1217         newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
1218
1219 #ifdef CONFIG_TCP_MD5SIG
1220         /* Copy over the MD5 key from the original socket */
1221         key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr);
1222         if (key) {
1223                 /* We're using one, so create a matching key
1224                  * on the newsk structure. If we fail to get
1225                  * memory, then we end up not copying the key
1226                  * across. Shucks.
1227                  */
1228                 tcp_md5_do_add(newsk, (union tcp_md5_addr *)&newsk->sk_v6_daddr,
1229                                AF_INET6, 128, key->key, key->keylen,
1230                                sk_gfp_mask(sk, GFP_ATOMIC));
1231         }
1232 #endif
1233
1234         if (__inet_inherit_port(sk, newsk) < 0) {
1235                 inet_csk_prepare_forced_close(newsk);
1236                 tcp_done(newsk);
1237                 goto out;
1238         }
1239         *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
1240         if (*own_req) {
1241                 tcp_move_syn(newtp, req);
1242
1243                 /* Clone pktoptions received with SYN, if we own the req */
1244                 if (ireq->pktopts) {
1245                         newnp->pktoptions = skb_clone(ireq->pktopts,
1246                                                       sk_gfp_mask(sk, GFP_ATOMIC));
1247                         consume_skb(ireq->pktopts);
1248                         ireq->pktopts = NULL;
1249                         if (newnp->pktoptions) {
1250                                 tcp_v6_restore_cb(newnp->pktoptions);
1251                                 skb_set_owner_r(newnp->pktoptions, newsk);
1252                         }
1253                 }
1254         }
1255
1256         return newsk;
1257
1258 out_overflow:
1259         __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1260 out_nonewsk:
1261         dst_release(dst);
1262 out:
1263         tcp_listendrop(sk);
1264         return NULL;
1265 }
1266
1267 /* The socket must have it's spinlock held when we get
1268  * here, unless it is a TCP_LISTEN socket.
1269  *
1270  * We have a potential double-lock case here, so even when
1271  * doing backlog processing we use the BH locking scheme.
1272  * This is because we cannot sleep with the original spinlock
1273  * held.
1274  */
1275 static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1276 {
1277         struct ipv6_pinfo *np = inet6_sk(sk);
1278         struct tcp_sock *tp;
1279         struct sk_buff *opt_skb = NULL;
1280
1281         /* Imagine: socket is IPv6. IPv4 packet arrives,
1282            goes to IPv4 receive handler and backlogged.
1283            From backlog it always goes here. Kerboom...
1284            Fortunately, tcp_rcv_established and rcv_established
1285            handle them correctly, but it is not case with
1286            tcp_v6_hnd_req and tcp_v6_send_reset().   --ANK
1287          */
1288
1289         if (skb->protocol == htons(ETH_P_IP))
1290                 return tcp_v4_do_rcv(sk, skb);
1291
1292         /*
1293          *      socket locking is here for SMP purposes as backlog rcv
1294          *      is currently called with bh processing disabled.
1295          */
1296
1297         /* Do Stevens' IPV6_PKTOPTIONS.
1298
1299            Yes, guys, it is the only place in our code, where we
1300            may make it not affecting IPv4.
1301            The rest of code is protocol independent,
1302            and I do not like idea to uglify IPv4.
1303
1304            Actually, all the idea behind IPV6_PKTOPTIONS
1305            looks not very well thought. For now we latch
1306            options, received in the last packet, enqueued
1307            by tcp. Feel free to propose better solution.
1308                                                --ANK (980728)
1309          */
1310         if (np->rxopt.all)
1311                 opt_skb = skb_clone(skb, sk_gfp_mask(sk, GFP_ATOMIC));
1312
1313         if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1314                 struct dst_entry *dst = sk->sk_rx_dst;
1315
1316                 sock_rps_save_rxhash(sk, skb);
1317                 sk_mark_napi_id(sk, skb);
1318                 if (dst) {
1319                         if (inet_sk(sk)->rx_dst_ifindex != skb->skb_iif ||
1320                             dst->ops->check(dst, np->rx_dst_cookie) == NULL) {
1321                                 dst_release(dst);
1322                                 sk->sk_rx_dst = NULL;
1323                         }
1324                 }
1325
1326                 tcp_rcv_established(sk, skb);
1327                 if (opt_skb)
1328                         goto ipv6_pktoptions;
1329                 return 0;
1330         }
1331
1332         if (tcp_checksum_complete(skb))
1333                 goto csum_err;
1334
1335         if (sk->sk_state == TCP_LISTEN) {
1336                 struct sock *nsk = tcp_v6_cookie_check(sk, skb);
1337
1338                 if (!nsk)
1339                         goto discard;
1340
1341                 if (nsk != sk) {
1342                         if (tcp_child_process(sk, nsk, skb))
1343                                 goto reset;
1344                         if (opt_skb)
1345                                 __kfree_skb(opt_skb);
1346                         return 0;
1347                 }
1348         } else
1349                 sock_rps_save_rxhash(sk, skb);
1350
1351         if (tcp_rcv_state_process(sk, skb))
1352                 goto reset;
1353         if (opt_skb)
1354                 goto ipv6_pktoptions;
1355         return 0;
1356
1357 reset:
1358         tcp_v6_send_reset(sk, skb);
1359 discard:
1360         if (opt_skb)
1361                 __kfree_skb(opt_skb);
1362         kfree_skb(skb);
1363         return 0;
1364 csum_err:
1365         TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
1366         TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
1367         goto discard;
1368
1369
1370 ipv6_pktoptions:
1371         /* Do you ask, what is it?
1372
1373            1. skb was enqueued by tcp.
1374            2. skb is added to tail of read queue, rather than out of order.
1375            3. socket is not in passive state.
1376            4. Finally, it really contains options, which user wants to receive.
1377          */
1378         tp = tcp_sk(sk);
1379         if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1380             !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1381                 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1382                         np->mcast_oif = tcp_v6_iif(opt_skb);
1383                 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1384                         np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
1385                 if (np->rxopt.bits.rxflow || np->rxopt.bits.rxtclass)
1386                         np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb));
1387                 if (np->repflow)
1388                         np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb));
1389                 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) {
1390                         skb_set_owner_r(opt_skb, sk);
1391                         tcp_v6_restore_cb(opt_skb);
1392                         opt_skb = xchg(&np->pktoptions, opt_skb);
1393                 } else {
1394                         __kfree_skb(opt_skb);
1395                         opt_skb = xchg(&np->pktoptions, NULL);
1396                 }
1397         }
1398
1399         kfree_skb(opt_skb);
1400         return 0;
1401 }
1402
1403 static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr,
1404                            const struct tcphdr *th)
1405 {
1406         /* This is tricky: we move IP6CB at its correct location into
1407          * TCP_SKB_CB(). It must be done after xfrm6_policy_check(), because
1408          * _decode_session6() uses IP6CB().
1409          * barrier() makes sure compiler won't play aliasing games.
1410          */
1411         memmove(&TCP_SKB_CB(skb)->header.h6, IP6CB(skb),
1412                 sizeof(struct inet6_skb_parm));
1413         barrier();
1414
1415         TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1416         TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1417                                     skb->len - th->doff*4);
1418         TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1419         TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th);
1420         TCP_SKB_CB(skb)->tcp_tw_isn = 0;
1421         TCP_SKB_CB(skb)->ip_dsfield = ipv6_get_dsfield(hdr);
1422         TCP_SKB_CB(skb)->sacked = 0;
1423         TCP_SKB_CB(skb)->has_rxtstamp =
1424                         skb->tstamp || skb_hwtstamps(skb)->hwtstamp;
1425 }
1426
1427 static int tcp_v6_rcv(struct sk_buff *skb)
1428 {
1429         int sdif = inet6_sdif(skb);
1430         const struct tcphdr *th;
1431         const struct ipv6hdr *hdr;
1432         bool refcounted;
1433         struct sock *sk;
1434         int ret;
1435         struct net *net = dev_net(skb->dev);
1436
1437         if (skb->pkt_type != PACKET_HOST)
1438                 goto discard_it;
1439
1440         /*
1441          *      Count it even if it's bad.
1442          */
1443         __TCP_INC_STATS(net, TCP_MIB_INSEGS);
1444
1445         if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1446                 goto discard_it;
1447
1448         th = (const struct tcphdr *)skb->data;
1449
1450         if (unlikely(th->doff < sizeof(struct tcphdr)/4))
1451                 goto bad_packet;
1452         if (!pskb_may_pull(skb, th->doff*4))
1453                 goto discard_it;
1454
1455         if (skb_checksum_init(skb, IPPROTO_TCP, ip6_compute_pseudo))
1456                 goto csum_error;
1457
1458         th = (const struct tcphdr *)skb->data;
1459         hdr = ipv6_hdr(skb);
1460
1461 lookup:
1462         sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th),
1463                                 th->source, th->dest, inet6_iif(skb), sdif,
1464                                 &refcounted);
1465         if (!sk)
1466                 goto no_tcp_socket;
1467
1468 process:
1469         if (sk->sk_state == TCP_TIME_WAIT)
1470                 goto do_time_wait;
1471
1472         if (sk->sk_state == TCP_NEW_SYN_RECV) {
1473                 struct request_sock *req = inet_reqsk(sk);
1474                 bool req_stolen = false;
1475                 struct sock *nsk;
1476
1477                 sk = req->rsk_listener;
1478                 if (tcp_v6_inbound_md5_hash(sk, skb)) {
1479                         sk_drops_add(sk, skb);
1480                         reqsk_put(req);
1481                         goto discard_it;
1482                 }
1483                 if (tcp_checksum_complete(skb)) {
1484                         reqsk_put(req);
1485                         goto csum_error;
1486                 }
1487                 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1488                         inet_csk_reqsk_queue_drop_and_put(sk, req);
1489                         goto lookup;
1490                 }
1491                 sock_hold(sk);
1492                 refcounted = true;
1493                 nsk = NULL;
1494                 if (!tcp_filter(sk, skb)) {
1495                         th = (const struct tcphdr *)skb->data;
1496                         hdr = ipv6_hdr(skb);
1497                         tcp_v6_fill_cb(skb, hdr, th);
1498                         nsk = tcp_check_req(sk, skb, req, false, &req_stolen);
1499                 }
1500                 if (!nsk) {
1501                         reqsk_put(req);
1502                         if (req_stolen) {
1503                                 /* Another cpu got exclusive access to req
1504                                  * and created a full blown socket.
1505                                  * Try to feed this packet to this socket
1506                                  * instead of discarding it.
1507                                  */
1508                                 tcp_v6_restore_cb(skb);
1509                                 sock_put(sk);
1510                                 goto lookup;
1511                         }
1512                         goto discard_and_relse;
1513                 }
1514                 if (nsk == sk) {
1515                         reqsk_put(req);
1516                         tcp_v6_restore_cb(skb);
1517                 } else if (tcp_child_process(sk, nsk, skb)) {
1518                         tcp_v6_send_reset(nsk, skb);
1519                         goto discard_and_relse;
1520                 } else {
1521                         sock_put(sk);
1522                         return 0;
1523                 }
1524         }
1525         if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
1526                 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
1527                 goto discard_and_relse;
1528         }
1529
1530         if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1531                 goto discard_and_relse;
1532
1533         if (tcp_v6_inbound_md5_hash(sk, skb))
1534                 goto discard_and_relse;
1535
1536         if (tcp_filter(sk, skb))
1537                 goto discard_and_relse;
1538         th = (const struct tcphdr *)skb->data;
1539         hdr = ipv6_hdr(skb);
1540         tcp_v6_fill_cb(skb, hdr, th);
1541
1542         skb->dev = NULL;
1543
1544         if (sk->sk_state == TCP_LISTEN) {
1545                 ret = tcp_v6_do_rcv(sk, skb);
1546                 goto put_and_return;
1547         }
1548
1549         sk_incoming_cpu_update(sk);
1550
1551         bh_lock_sock_nested(sk);
1552         tcp_segs_in(tcp_sk(sk), skb);
1553         ret = 0;
1554         if (!sock_owned_by_user(sk)) {
1555                 ret = tcp_v6_do_rcv(sk, skb);
1556         } else if (tcp_add_backlog(sk, skb)) {
1557                 goto discard_and_relse;
1558         }
1559         bh_unlock_sock(sk);
1560
1561 put_and_return:
1562         if (refcounted)
1563                 sock_put(sk);
1564         return ret ? -1 : 0;
1565
1566 no_tcp_socket:
1567         if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1568                 goto discard_it;
1569
1570         tcp_v6_fill_cb(skb, hdr, th);
1571
1572         if (tcp_checksum_complete(skb)) {
1573 csum_error:
1574                 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS);
1575 bad_packet:
1576                 __TCP_INC_STATS(net, TCP_MIB_INERRS);
1577         } else {
1578                 tcp_v6_send_reset(NULL, skb);
1579         }
1580
1581 discard_it:
1582         kfree_skb(skb);
1583         return 0;
1584
1585 discard_and_relse:
1586         sk_drops_add(sk, skb);
1587         if (refcounted)
1588                 sock_put(sk);
1589         goto discard_it;
1590
1591 do_time_wait:
1592         if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1593                 inet_twsk_put(inet_twsk(sk));
1594                 goto discard_it;
1595         }
1596
1597         tcp_v6_fill_cb(skb, hdr, th);
1598
1599         if (tcp_checksum_complete(skb)) {
1600                 inet_twsk_put(inet_twsk(sk));
1601                 goto csum_error;
1602         }
1603
1604         switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
1605         case TCP_TW_SYN:
1606         {
1607                 struct sock *sk2;
1608
1609                 sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo,
1610                                             skb, __tcp_hdrlen(th),
1611                                             &ipv6_hdr(skb)->saddr, th->source,
1612                                             &ipv6_hdr(skb)->daddr,
1613                                             ntohs(th->dest),
1614                                             tcp_v6_iif_l3_slave(skb),
1615                                             sdif);
1616                 if (sk2) {
1617                         struct inet_timewait_sock *tw = inet_twsk(sk);
1618                         inet_twsk_deschedule_put(tw);
1619                         sk = sk2;
1620                         tcp_v6_restore_cb(skb);
1621                         refcounted = false;
1622                         goto process;
1623                 }
1624         }
1625                 /* to ACK */
1626                 /* fall through */
1627         case TCP_TW_ACK:
1628                 tcp_v6_timewait_ack(sk, skb);
1629                 break;
1630         case TCP_TW_RST:
1631                 tcp_v6_send_reset(sk, skb);
1632                 inet_twsk_deschedule_put(inet_twsk(sk));
1633                 goto discard_it;
1634         case TCP_TW_SUCCESS:
1635                 ;
1636         }
1637         goto discard_it;
1638 }
1639
1640 static void tcp_v6_early_demux(struct sk_buff *skb)
1641 {
1642         const struct ipv6hdr *hdr;
1643         const struct tcphdr *th;
1644         struct sock *sk;
1645
1646         if (skb->pkt_type != PACKET_HOST)
1647                 return;
1648
1649         if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr)))
1650                 return;
1651
1652         hdr = ipv6_hdr(skb);
1653         th = tcp_hdr(skb);
1654
1655         if (th->doff < sizeof(struct tcphdr) / 4)
1656                 return;
1657
1658         /* Note : We use inet6_iif() here, not tcp_v6_iif() */
1659         sk = __inet6_lookup_established(dev_net(skb->dev), &tcp_hashinfo,
1660                                         &hdr->saddr, th->source,
1661                                         &hdr->daddr, ntohs(th->dest),
1662                                         inet6_iif(skb), inet6_sdif(skb));
1663         if (sk) {
1664                 skb->sk = sk;
1665                 skb->destructor = sock_edemux;
1666                 if (sk_fullsock(sk)) {
1667                         struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
1668
1669                         if (dst)
1670                                 dst = dst_check(dst, inet6_sk(sk)->rx_dst_cookie);
1671                         if (dst &&
1672                             inet_sk(sk)->rx_dst_ifindex == skb->skb_iif)
1673                                 skb_dst_set_noref(skb, dst);
1674                 }
1675         }
1676 }
1677
1678 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
1679         .twsk_obj_size  = sizeof(struct tcp6_timewait_sock),
1680         .twsk_unique    = tcp_twsk_unique,
1681         .twsk_destructor = tcp_twsk_destructor,
1682 };
1683
1684 static const struct inet_connection_sock_af_ops ipv6_specific = {
1685         .queue_xmit        = inet6_csk_xmit,
1686         .send_check        = tcp_v6_send_check,
1687         .rebuild_header    = inet6_sk_rebuild_header,
1688         .sk_rx_dst_set     = inet6_sk_rx_dst_set,
1689         .conn_request      = tcp_v6_conn_request,
1690         .syn_recv_sock     = tcp_v6_syn_recv_sock,
1691         .net_header_len    = sizeof(struct ipv6hdr),
1692         .net_frag_header_len = sizeof(struct frag_hdr),
1693         .setsockopt        = ipv6_setsockopt,
1694         .getsockopt        = ipv6_getsockopt,
1695         .addr2sockaddr     = inet6_csk_addr2sockaddr,
1696         .sockaddr_len      = sizeof(struct sockaddr_in6),
1697 #ifdef CONFIG_COMPAT
1698         .compat_setsockopt = compat_ipv6_setsockopt,
1699         .compat_getsockopt = compat_ipv6_getsockopt,
1700 #endif
1701         .mtu_reduced       = tcp_v6_mtu_reduced,
1702 };
1703
1704 #ifdef CONFIG_TCP_MD5SIG
1705 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = {
1706         .md5_lookup     =       tcp_v6_md5_lookup,
1707         .calc_md5_hash  =       tcp_v6_md5_hash_skb,
1708         .md5_parse      =       tcp_v6_parse_md5_keys,
1709 };
1710 #endif
1711
1712 /*
1713  *      TCP over IPv4 via INET6 API
1714  */
1715 static const struct inet_connection_sock_af_ops ipv6_mapped = {
1716         .queue_xmit        = ip_queue_xmit,
1717         .send_check        = tcp_v4_send_check,
1718         .rebuild_header    = inet_sk_rebuild_header,
1719         .sk_rx_dst_set     = inet_sk_rx_dst_set,
1720         .conn_request      = tcp_v6_conn_request,
1721         .syn_recv_sock     = tcp_v6_syn_recv_sock,
1722         .net_header_len    = sizeof(struct iphdr),
1723         .setsockopt        = ipv6_setsockopt,
1724         .getsockopt        = ipv6_getsockopt,
1725         .addr2sockaddr     = inet6_csk_addr2sockaddr,
1726         .sockaddr_len      = sizeof(struct sockaddr_in6),
1727 #ifdef CONFIG_COMPAT
1728         .compat_setsockopt = compat_ipv6_setsockopt,
1729         .compat_getsockopt = compat_ipv6_getsockopt,
1730 #endif
1731         .mtu_reduced       = tcp_v4_mtu_reduced,
1732 };
1733
1734 #ifdef CONFIG_TCP_MD5SIG
1735 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = {
1736         .md5_lookup     =       tcp_v4_md5_lookup,
1737         .calc_md5_hash  =       tcp_v4_md5_hash_skb,
1738         .md5_parse      =       tcp_v6_parse_md5_keys,
1739 };
1740 #endif
1741
1742 /* NOTE: A lot of things set to zero explicitly by call to
1743  *       sk_alloc() so need not be done here.
1744  */
1745 static int tcp_v6_init_sock(struct sock *sk)
1746 {
1747         struct inet_connection_sock *icsk = inet_csk(sk);
1748
1749         tcp_init_sock(sk);
1750
1751         icsk->icsk_af_ops = &ipv6_specific;
1752
1753 #ifdef CONFIG_TCP_MD5SIG
1754         tcp_sk(sk)->af_specific = &tcp_sock_ipv6_specific;
1755 #endif
1756
1757         return 0;
1758 }
1759
1760 static void tcp_v6_destroy_sock(struct sock *sk)
1761 {
1762         tcp_v4_destroy_sock(sk);
1763         inet6_destroy_sock(sk);
1764 }
1765
1766 #ifdef CONFIG_PROC_FS
1767 /* Proc filesystem TCPv6 sock list dumping. */
1768 static void get_openreq6(struct seq_file *seq,
1769                          const struct request_sock *req, int i)
1770 {
1771         long ttd = req->rsk_timer.expires - jiffies;
1772         const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr;
1773         const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr;
1774
1775         if (ttd < 0)
1776                 ttd = 0;
1777
1778         seq_printf(seq,
1779                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1780                    "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n",
1781                    i,
1782                    src->s6_addr32[0], src->s6_addr32[1],
1783                    src->s6_addr32[2], src->s6_addr32[3],
1784                    inet_rsk(req)->ir_num,
1785                    dest->s6_addr32[0], dest->s6_addr32[1],
1786                    dest->s6_addr32[2], dest->s6_addr32[3],
1787                    ntohs(inet_rsk(req)->ir_rmt_port),
1788                    TCP_SYN_RECV,
1789                    0, 0, /* could print option size, but that is af dependent. */
1790                    1,   /* timers active (only the expire timer) */
1791                    jiffies_to_clock_t(ttd),
1792                    req->num_timeout,
1793                    from_kuid_munged(seq_user_ns(seq),
1794                                     sock_i_uid(req->rsk_listener)),
1795                    0,  /* non standard timer */
1796                    0, /* open_requests have no inode */
1797                    0, req);
1798 }
1799
1800 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
1801 {
1802         const struct in6_addr *dest, *src;
1803         __u16 destp, srcp;
1804         int timer_active;
1805         unsigned long timer_expires;
1806         const struct inet_sock *inet = inet_sk(sp);
1807         const struct tcp_sock *tp = tcp_sk(sp);
1808         const struct inet_connection_sock *icsk = inet_csk(sp);
1809         const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq;
1810         int rx_queue;
1811         int state;
1812
1813         dest  = &sp->sk_v6_daddr;
1814         src   = &sp->sk_v6_rcv_saddr;
1815         destp = ntohs(inet->inet_dport);
1816         srcp  = ntohs(inet->inet_sport);
1817
1818         if (icsk->icsk_pending == ICSK_TIME_RETRANS ||
1819             icsk->icsk_pending == ICSK_TIME_REO_TIMEOUT ||
1820             icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) {
1821                 timer_active    = 1;
1822                 timer_expires   = icsk->icsk_timeout;
1823         } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
1824                 timer_active    = 4;
1825                 timer_expires   = icsk->icsk_timeout;
1826         } else if (timer_pending(&sp->sk_timer)) {
1827                 timer_active    = 2;
1828                 timer_expires   = sp->sk_timer.expires;
1829         } else {
1830                 timer_active    = 0;
1831                 timer_expires = jiffies;
1832         }
1833
1834         state = inet_sk_state_load(sp);
1835         if (state == TCP_LISTEN)
1836                 rx_queue = sp->sk_ack_backlog;
1837         else
1838                 /* Because we don't lock the socket,
1839                  * we might find a transient negative value.
1840                  */
1841                 rx_queue = max_t(int, tp->rcv_nxt - tp->copied_seq, 0);
1842
1843         seq_printf(seq,
1844                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1845                    "%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n",
1846                    i,
1847                    src->s6_addr32[0], src->s6_addr32[1],
1848                    src->s6_addr32[2], src->s6_addr32[3], srcp,
1849                    dest->s6_addr32[0], dest->s6_addr32[1],
1850                    dest->s6_addr32[2], dest->s6_addr32[3], destp,
1851                    state,
1852                    tp->write_seq - tp->snd_una,
1853                    rx_queue,
1854                    timer_active,
1855                    jiffies_delta_to_clock_t(timer_expires - jiffies),
1856                    icsk->icsk_retransmits,
1857                    from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)),
1858                    icsk->icsk_probes_out,
1859                    sock_i_ino(sp),
1860                    refcount_read(&sp->sk_refcnt), sp,
1861                    jiffies_to_clock_t(icsk->icsk_rto),
1862                    jiffies_to_clock_t(icsk->icsk_ack.ato),
1863                    (icsk->icsk_ack.quick << 1) | icsk->icsk_ack.pingpong,
1864                    tp->snd_cwnd,
1865                    state == TCP_LISTEN ?
1866                         fastopenq->max_qlen :
1867                         (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh)
1868                    );
1869 }
1870
1871 static void get_timewait6_sock(struct seq_file *seq,
1872                                struct inet_timewait_sock *tw, int i)
1873 {
1874         long delta = tw->tw_timer.expires - jiffies;
1875         const struct in6_addr *dest, *src;
1876         __u16 destp, srcp;
1877
1878         dest = &tw->tw_v6_daddr;
1879         src  = &tw->tw_v6_rcv_saddr;
1880         destp = ntohs(tw->tw_dport);
1881         srcp  = ntohs(tw->tw_sport);
1882
1883         seq_printf(seq,
1884                    "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1885                    "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n",
1886                    i,
1887                    src->s6_addr32[0], src->s6_addr32[1],
1888                    src->s6_addr32[2], src->s6_addr32[3], srcp,
1889                    dest->s6_addr32[0], dest->s6_addr32[1],
1890                    dest->s6_addr32[2], dest->s6_addr32[3], destp,
1891                    tw->tw_substate, 0, 0,
1892                    3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0,
1893                    refcount_read(&tw->tw_refcnt), tw);
1894 }
1895
1896 static int tcp6_seq_show(struct seq_file *seq, void *v)
1897 {
1898         struct tcp_iter_state *st;
1899         struct sock *sk = v;
1900
1901         if (v == SEQ_START_TOKEN) {
1902                 seq_puts(seq,
1903                          "  sl  "
1904                          "local_address                         "
1905                          "remote_address                        "
1906                          "st tx_queue rx_queue tr tm->when retrnsmt"
1907                          "   uid  timeout inode\n");
1908                 goto out;
1909         }
1910         st = seq->private;
1911
1912         if (sk->sk_state == TCP_TIME_WAIT)
1913                 get_timewait6_sock(seq, v, st->num);
1914         else if (sk->sk_state == TCP_NEW_SYN_RECV)
1915                 get_openreq6(seq, v, st->num);
1916         else
1917                 get_tcp6_sock(seq, v, st->num);
1918 out:
1919         return 0;
1920 }
1921
1922 static const struct seq_operations tcp6_seq_ops = {
1923         .show           = tcp6_seq_show,
1924         .start          = tcp_seq_start,
1925         .next           = tcp_seq_next,
1926         .stop           = tcp_seq_stop,
1927 };
1928
1929 static struct tcp_seq_afinfo tcp6_seq_afinfo = {
1930         .family         = AF_INET6,
1931 };
1932
1933 int __net_init tcp6_proc_init(struct net *net)
1934 {
1935         if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops,
1936                         sizeof(struct tcp_iter_state), &tcp6_seq_afinfo))
1937                 return -ENOMEM;
1938         return 0;
1939 }
1940
1941 void tcp6_proc_exit(struct net *net)
1942 {
1943         remove_proc_entry("tcp6", net->proc_net);
1944 }
1945 #endif
1946
1947 struct proto tcpv6_prot = {
1948         .name                   = "TCPv6",
1949         .owner                  = THIS_MODULE,
1950         .close                  = tcp_close,
1951         .pre_connect            = tcp_v6_pre_connect,
1952         .connect                = tcp_v6_connect,
1953         .disconnect             = tcp_disconnect,
1954         .accept                 = inet_csk_accept,
1955         .ioctl                  = tcp_ioctl,
1956         .init                   = tcp_v6_init_sock,
1957         .destroy                = tcp_v6_destroy_sock,
1958         .shutdown               = tcp_shutdown,
1959         .setsockopt             = tcp_setsockopt,
1960         .getsockopt             = tcp_getsockopt,
1961         .keepalive              = tcp_set_keepalive,
1962         .recvmsg                = tcp_recvmsg,
1963         .sendmsg                = tcp_sendmsg,
1964         .sendpage               = tcp_sendpage,
1965         .backlog_rcv            = tcp_v6_do_rcv,
1966         .release_cb             = tcp_release_cb,
1967         .hash                   = inet6_hash,
1968         .unhash                 = inet_unhash,
1969         .get_port               = inet_csk_get_port,
1970         .enter_memory_pressure  = tcp_enter_memory_pressure,
1971         .leave_memory_pressure  = tcp_leave_memory_pressure,
1972         .stream_memory_free     = tcp_stream_memory_free,
1973         .sockets_allocated      = &tcp_sockets_allocated,
1974         .memory_allocated       = &tcp_memory_allocated,
1975         .memory_pressure        = &tcp_memory_pressure,
1976         .orphan_count           = &tcp_orphan_count,
1977         .sysctl_mem             = sysctl_tcp_mem,
1978         .sysctl_wmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_wmem),
1979         .sysctl_rmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_rmem),
1980         .max_header             = MAX_TCP_HEADER,
1981         .obj_size               = sizeof(struct tcp6_sock),
1982         .slab_flags             = SLAB_TYPESAFE_BY_RCU,
1983         .twsk_prot              = &tcp6_timewait_sock_ops,
1984         .rsk_prot               = &tcp6_request_sock_ops,
1985         .h.hashinfo             = &tcp_hashinfo,
1986         .no_autobind            = true,
1987 #ifdef CONFIG_COMPAT
1988         .compat_setsockopt      = compat_tcp_setsockopt,
1989         .compat_getsockopt      = compat_tcp_getsockopt,
1990 #endif
1991         .diag_destroy           = tcp_abort,
1992 };
1993
1994 /* thinking of making this const? Don't.
1995  * early_demux can change based on sysctl.
1996  */
1997 static struct inet6_protocol tcpv6_protocol = {
1998         .early_demux    =       tcp_v6_early_demux,
1999         .early_demux_handler =  tcp_v6_early_demux,
2000         .handler        =       tcp_v6_rcv,
2001         .err_handler    =       tcp_v6_err,
2002         .flags          =       INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
2003 };
2004
2005 static struct inet_protosw tcpv6_protosw = {
2006         .type           =       SOCK_STREAM,
2007         .protocol       =       IPPROTO_TCP,
2008         .prot           =       &tcpv6_prot,
2009         .ops            =       &inet6_stream_ops,
2010         .flags          =       INET_PROTOSW_PERMANENT |
2011                                 INET_PROTOSW_ICSK,
2012 };
2013
2014 static int __net_init tcpv6_net_init(struct net *net)
2015 {
2016         return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
2017                                     SOCK_RAW, IPPROTO_TCP, net);
2018 }
2019
2020 static void __net_exit tcpv6_net_exit(struct net *net)
2021 {
2022         inet_ctl_sock_destroy(net->ipv6.tcp_sk);
2023 }
2024
2025 static void __net_exit tcpv6_net_exit_batch(struct list_head *net_exit_list)
2026 {
2027         inet_twsk_purge(&tcp_hashinfo, AF_INET6);
2028 }
2029
2030 static struct pernet_operations tcpv6_net_ops = {
2031         .init       = tcpv6_net_init,
2032         .exit       = tcpv6_net_exit,
2033         .exit_batch = tcpv6_net_exit_batch,
2034 };
2035
2036 int __init tcpv6_init(void)
2037 {
2038         int ret;
2039
2040         ret = inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP);
2041         if (ret)
2042                 goto out;
2043
2044         /* register inet6 protocol */
2045         ret = inet6_register_protosw(&tcpv6_protosw);
2046         if (ret)
2047                 goto out_tcpv6_protocol;
2048
2049         ret = register_pernet_subsys(&tcpv6_net_ops);
2050         if (ret)
2051                 goto out_tcpv6_protosw;
2052 out:
2053         return ret;
2054
2055 out_tcpv6_protosw:
2056         inet6_unregister_protosw(&tcpv6_protosw);
2057 out_tcpv6_protocol:
2058         inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2059         goto out;
2060 }
2061
2062 void tcpv6_exit(void)
2063 {
2064         unregister_pernet_subsys(&tcpv6_net_ops);
2065         inet6_unregister_protosw(&tcpv6_protosw);
2066         inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2067 }