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