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