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