Linux Audio

Check our new training course

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