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