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