Linux Audio

Check our new training course

Linux BSP development engineering services

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