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