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