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 64 #include <linux/proc_fs.h> 65 #include <linux/seq_file.h> 66 67 #include <crypto/hash.h> 68 #include <linux/scatterlist.h> 69 70 #include <trace/events/tcp.h> 71 72 static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb); 73 static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb, 74 struct request_sock *req); 75 76 INDIRECT_CALLABLE_SCOPE int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb); 77 78 static const struct inet_connection_sock_af_ops ipv6_mapped; 79 const struct inet_connection_sock_af_ops ipv6_specific; 80 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 81 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific; 82 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific; 83 #endif 84 85 /* Helper returning the inet6 address from a given tcp socket. 86 * It can be used in TCP stack instead of inet6_sk(sk). 87 * This avoids a dereference and allow compiler optimizations. 88 * It is a specialized version of inet6_sk_generic(). 89 */ 90 #define tcp_inet6_sk(sk) (&container_of_const(tcp_sk(sk), \ 91 struct tcp6_sock, tcp)->inet6) 92 93 static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) 94 { 95 struct dst_entry *dst = skb_dst(skb); 96 97 if (dst && dst_hold_safe(dst)) { 98 const struct rt6_info *rt = (const struct rt6_info *)dst; 99 100 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(rt); 103 } 104 } 105 106 static u32 tcp_v6_init_seq(const struct sk_buff *skb) 107 { 108 return secure_tcpv6_seq(ipv6_hdr(skb)->daddr.s6_addr32, 109 ipv6_hdr(skb)->saddr.s6_addr32, 110 tcp_hdr(skb)->dest, 111 tcp_hdr(skb)->source); 112 } 113 114 static u32 tcp_v6_init_ts_off(const struct net *net, const struct sk_buff *skb) 115 { 116 return secure_tcpv6_ts_off(net, ipv6_hdr(skb)->daddr.s6_addr32, 117 ipv6_hdr(skb)->saddr.s6_addr32); 118 } 119 120 static int tcp_v6_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 135 static 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 339 late_failure: 340 tcp_set_state(sk, TCP_CLOSE); 341 inet_bhash2_reset_saddr(sk); 342 failure: 343 inet->inet_dport = 0; 344 sk->sk_route_caps = 0; 345 return err; 346 } 347 348 static 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 374 static 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 WRITE_ONCE(sk->sk_err, err); 495 sk_error_report(sk); /* Wake people up to see the error (see connect in sock.c) */ 496 497 tcp_done(sk); 498 } else { 499 WRITE_ONCE(sk->sk_err_soft, err); 500 } 501 goto out; 502 case TCP_LISTEN: 503 break; 504 default: 505 /* check if this ICMP message allows revert of backoff. 506 * (see RFC 6069) 507 */ 508 if (!fastopen && type == ICMPV6_DEST_UNREACH && 509 code == ICMPV6_NOROUTE) 510 tcp_ld_RTO_revert(sk, seq); 511 } 512 513 if (!sock_owned_by_user(sk) && inet6_test_bit(RECVERR6, sk)) { 514 WRITE_ONCE(sk->sk_err, err); 515 sk_error_report(sk); 516 } else { 517 WRITE_ONCE(sk->sk_err_soft, err); 518 } 519 out: 520 bh_unlock_sock(sk); 521 sock_put(sk); 522 return 0; 523 } 524 525 526 static int tcp_v6_send_synack(const struct sock *sk, struct dst_entry *dst, 527 struct flowi *fl, 528 struct request_sock *req, 529 struct tcp_fastopen_cookie *foc, 530 enum tcp_synack_type synack_type, 531 struct sk_buff *syn_skb) 532 { 533 struct inet_request_sock *ireq = inet_rsk(req); 534 const struct ipv6_pinfo *np = tcp_inet6_sk(sk); 535 struct ipv6_txoptions *opt; 536 struct flowi6 *fl6 = &fl->u.ip6; 537 struct sk_buff *skb; 538 int err = -ENOMEM; 539 u8 tclass; 540 541 /* First, grab a route. */ 542 if (!dst && (dst = inet6_csk_route_req(sk, fl6, req, 543 IPPROTO_TCP)) == NULL) 544 goto done; 545 546 skb = tcp_make_synack(sk, dst, req, foc, synack_type, syn_skb); 547 548 if (skb) { 549 __tcp_v6_send_check(skb, &ireq->ir_v6_loc_addr, 550 &ireq->ir_v6_rmt_addr); 551 552 fl6->daddr = ireq->ir_v6_rmt_addr; 553 if (inet6_test_bit(REPFLOW, sk) && ireq->pktopts) 554 fl6->flowlabel = ip6_flowlabel(ipv6_hdr(ireq->pktopts)); 555 556 tclass = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_reflect_tos) ? 557 (tcp_rsk(req)->syn_tos & ~INET_ECN_MASK) | 558 (np->tclass & INET_ECN_MASK) : 559 np->tclass; 560 561 if (!INET_ECN_is_capable(tclass) && 562 tcp_bpf_ca_needs_ecn((struct sock *)req)) 563 tclass |= INET_ECN_ECT_0; 564 565 rcu_read_lock(); 566 opt = ireq->ipv6_opt; 567 if (!opt) 568 opt = rcu_dereference(np->opt); 569 err = ip6_xmit(sk, skb, fl6, skb->mark ? : READ_ONCE(sk->sk_mark), 570 opt, tclass, READ_ONCE(sk->sk_priority)); 571 rcu_read_unlock(); 572 err = net_xmit_eval(err); 573 } 574 575 done: 576 return err; 577 } 578 579 580 static void tcp_v6_reqsk_destructor(struct request_sock *req) 581 { 582 kfree(inet_rsk(req)->ipv6_opt); 583 consume_skb(inet_rsk(req)->pktopts); 584 } 585 586 #ifdef CONFIG_TCP_MD5SIG 587 static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(const struct sock *sk, 588 const struct in6_addr *addr, 589 int l3index) 590 { 591 return tcp_md5_do_lookup(sk, l3index, 592 (union tcp_md5_addr *)addr, AF_INET6); 593 } 594 595 static struct tcp_md5sig_key *tcp_v6_md5_lookup(const struct sock *sk, 596 const struct sock *addr_sk) 597 { 598 int l3index; 599 600 l3index = l3mdev_master_ifindex_by_index(sock_net(sk), 601 addr_sk->sk_bound_dev_if); 602 return tcp_v6_md5_do_lookup(sk, &addr_sk->sk_v6_daddr, 603 l3index); 604 } 605 606 static int tcp_v6_parse_md5_keys(struct sock *sk, int optname, 607 sockptr_t optval, int optlen) 608 { 609 struct tcp_md5sig cmd; 610 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr; 611 union tcp_ao_addr *addr; 612 int l3index = 0; 613 u8 prefixlen; 614 bool l3flag; 615 u8 flags; 616 617 if (optlen < sizeof(cmd)) 618 return -EINVAL; 619 620 if (copy_from_sockptr(&cmd, optval, sizeof(cmd))) 621 return -EFAULT; 622 623 if (sin6->sin6_family != AF_INET6) 624 return -EINVAL; 625 626 flags = cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX; 627 l3flag = cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX; 628 629 if (optname == TCP_MD5SIG_EXT && 630 cmd.tcpm_flags & TCP_MD5SIG_FLAG_PREFIX) { 631 prefixlen = cmd.tcpm_prefixlen; 632 if (prefixlen > 128 || (ipv6_addr_v4mapped(&sin6->sin6_addr) && 633 prefixlen > 32)) 634 return -EINVAL; 635 } else { 636 prefixlen = ipv6_addr_v4mapped(&sin6->sin6_addr) ? 32 : 128; 637 } 638 639 if (optname == TCP_MD5SIG_EXT && cmd.tcpm_ifindex && 640 cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX) { 641 struct net_device *dev; 642 643 rcu_read_lock(); 644 dev = dev_get_by_index_rcu(sock_net(sk), cmd.tcpm_ifindex); 645 if (dev && netif_is_l3_master(dev)) 646 l3index = dev->ifindex; 647 rcu_read_unlock(); 648 649 /* ok to reference set/not set outside of rcu; 650 * right now device MUST be an L3 master 651 */ 652 if (!dev || !l3index) 653 return -EINVAL; 654 } 655 656 if (!cmd.tcpm_keylen) { 657 if (ipv6_addr_v4mapped(&sin6->sin6_addr)) 658 return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3], 659 AF_INET, prefixlen, 660 l3index, flags); 661 return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr, 662 AF_INET6, prefixlen, l3index, flags); 663 } 664 665 if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN) 666 return -EINVAL; 667 668 if (ipv6_addr_v4mapped(&sin6->sin6_addr)) { 669 addr = (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3]; 670 671 /* Don't allow keys for peers that have a matching TCP-AO key. 672 * See the comment in tcp_ao_add_cmd() 673 */ 674 if (tcp_ao_required(sk, addr, AF_INET, 675 l3flag ? l3index : -1, false)) 676 return -EKEYREJECTED; 677 return tcp_md5_do_add(sk, addr, 678 AF_INET, prefixlen, l3index, flags, 679 cmd.tcpm_key, cmd.tcpm_keylen); 680 } 681 682 addr = (union tcp_md5_addr *)&sin6->sin6_addr; 683 684 /* Don't allow keys for peers that have a matching TCP-AO key. 685 * See the comment in tcp_ao_add_cmd() 686 */ 687 if (tcp_ao_required(sk, addr, AF_INET6, l3flag ? l3index : -1, false)) 688 return -EKEYREJECTED; 689 690 return tcp_md5_do_add(sk, addr, AF_INET6, prefixlen, l3index, flags, 691 cmd.tcpm_key, cmd.tcpm_keylen); 692 } 693 694 static int tcp_v6_md5_hash_headers(struct tcp_sigpool *hp, 695 const struct in6_addr *daddr, 696 const struct in6_addr *saddr, 697 const struct tcphdr *th, int nbytes) 698 { 699 struct tcp6_pseudohdr *bp; 700 struct scatterlist sg; 701 struct tcphdr *_th; 702 703 bp = hp->scratch; 704 /* 1. TCP pseudo-header (RFC2460) */ 705 bp->saddr = *saddr; 706 bp->daddr = *daddr; 707 bp->protocol = cpu_to_be32(IPPROTO_TCP); 708 bp->len = cpu_to_be32(nbytes); 709 710 _th = (struct tcphdr *)(bp + 1); 711 memcpy(_th, th, sizeof(*th)); 712 _th->check = 0; 713 714 sg_init_one(&sg, bp, sizeof(*bp) + sizeof(*th)); 715 ahash_request_set_crypt(hp->req, &sg, NULL, 716 sizeof(*bp) + sizeof(*th)); 717 return crypto_ahash_update(hp->req); 718 } 719 720 static int tcp_v6_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key, 721 const struct in6_addr *daddr, struct in6_addr *saddr, 722 const struct tcphdr *th) 723 { 724 struct tcp_sigpool hp; 725 726 if (tcp_sigpool_start(tcp_md5_sigpool_id, &hp)) 727 goto clear_hash_nostart; 728 729 if (crypto_ahash_init(hp.req)) 730 goto clear_hash; 731 if (tcp_v6_md5_hash_headers(&hp, daddr, saddr, th, th->doff << 2)) 732 goto clear_hash; 733 if (tcp_md5_hash_key(&hp, key)) 734 goto clear_hash; 735 ahash_request_set_crypt(hp.req, NULL, md5_hash, 0); 736 if (crypto_ahash_final(hp.req)) 737 goto clear_hash; 738 739 tcp_sigpool_end(&hp); 740 return 0; 741 742 clear_hash: 743 tcp_sigpool_end(&hp); 744 clear_hash_nostart: 745 memset(md5_hash, 0, 16); 746 return 1; 747 } 748 749 static int tcp_v6_md5_hash_skb(char *md5_hash, 750 const struct tcp_md5sig_key *key, 751 const struct sock *sk, 752 const struct sk_buff *skb) 753 { 754 const struct tcphdr *th = tcp_hdr(skb); 755 const struct in6_addr *saddr, *daddr; 756 struct tcp_sigpool hp; 757 758 if (sk) { /* valid for establish/request sockets */ 759 saddr = &sk->sk_v6_rcv_saddr; 760 daddr = &sk->sk_v6_daddr; 761 } else { 762 const struct ipv6hdr *ip6h = ipv6_hdr(skb); 763 saddr = &ip6h->saddr; 764 daddr = &ip6h->daddr; 765 } 766 767 if (tcp_sigpool_start(tcp_md5_sigpool_id, &hp)) 768 goto clear_hash_nostart; 769 770 if (crypto_ahash_init(hp.req)) 771 goto clear_hash; 772 773 if (tcp_v6_md5_hash_headers(&hp, daddr, saddr, th, skb->len)) 774 goto clear_hash; 775 if (tcp_sigpool_hash_skb_data(&hp, skb, th->doff << 2)) 776 goto clear_hash; 777 if (tcp_md5_hash_key(&hp, key)) 778 goto clear_hash; 779 ahash_request_set_crypt(hp.req, NULL, md5_hash, 0); 780 if (crypto_ahash_final(hp.req)) 781 goto clear_hash; 782 783 tcp_sigpool_end(&hp); 784 return 0; 785 786 clear_hash: 787 tcp_sigpool_end(&hp); 788 clear_hash_nostart: 789 memset(md5_hash, 0, 16); 790 return 1; 791 } 792 #endif 793 794 static void tcp_v6_init_req(struct request_sock *req, 795 const struct sock *sk_listener, 796 struct sk_buff *skb, 797 u32 tw_isn) 798 { 799 bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags); 800 struct inet_request_sock *ireq = inet_rsk(req); 801 const struct ipv6_pinfo *np = tcp_inet6_sk(sk_listener); 802 803 ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; 804 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; 805 806 /* So that link locals have meaning */ 807 if ((!sk_listener->sk_bound_dev_if || l3_slave) && 808 ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL) 809 ireq->ir_iif = tcp_v6_iif(skb); 810 811 if (!tw_isn && 812 (ipv6_opt_accepted(sk_listener, skb, &TCP_SKB_CB(skb)->header.h6) || 813 np->rxopt.bits.rxinfo || 814 np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim || 815 np->rxopt.bits.rxohlim || inet6_test_bit(REPFLOW, sk_listener))) { 816 refcount_inc(&skb->users); 817 ireq->pktopts = skb; 818 } 819 } 820 821 static struct dst_entry *tcp_v6_route_req(const struct sock *sk, 822 struct sk_buff *skb, 823 struct flowi *fl, 824 struct request_sock *req, 825 u32 tw_isn) 826 { 827 tcp_v6_init_req(req, sk, skb, tw_isn); 828 829 if (security_inet_conn_request(sk, skb, req)) 830 return NULL; 831 832 return inet6_csk_route_req(sk, &fl->u.ip6, req, IPPROTO_TCP); 833 } 834 835 struct request_sock_ops tcp6_request_sock_ops __read_mostly = { 836 .family = AF_INET6, 837 .obj_size = sizeof(struct tcp6_request_sock), 838 .rtx_syn_ack = tcp_rtx_synack, 839 .send_ack = tcp_v6_reqsk_send_ack, 840 .destructor = tcp_v6_reqsk_destructor, 841 .send_reset = tcp_v6_send_reset, 842 .syn_ack_timeout = tcp_syn_ack_timeout, 843 }; 844 845 const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = { 846 .mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - 847 sizeof(struct ipv6hdr), 848 #ifdef CONFIG_TCP_MD5SIG 849 .req_md5_lookup = tcp_v6_md5_lookup, 850 .calc_md5_hash = tcp_v6_md5_hash_skb, 851 #endif 852 #ifdef CONFIG_TCP_AO 853 .ao_lookup = tcp_v6_ao_lookup_rsk, 854 .ao_calc_key = tcp_v6_ao_calc_key_rsk, 855 .ao_synack_hash = tcp_v6_ao_synack_hash, 856 #endif 857 #ifdef CONFIG_SYN_COOKIES 858 .cookie_init_seq = cookie_v6_init_sequence, 859 #endif 860 .route_req = tcp_v6_route_req, 861 .init_seq = tcp_v6_init_seq, 862 .init_ts_off = tcp_v6_init_ts_off, 863 .send_synack = tcp_v6_send_synack, 864 }; 865 866 static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 seq, 867 u32 ack, u32 win, u32 tsval, u32 tsecr, 868 int oif, int rst, u8 tclass, __be32 label, 869 u32 priority, u32 txhash, struct tcp_key *key) 870 { 871 const struct tcphdr *th = tcp_hdr(skb); 872 struct tcphdr *t1; 873 struct sk_buff *buff; 874 struct flowi6 fl6; 875 struct net *net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); 876 struct sock *ctl_sk = net->ipv6.tcp_sk; 877 unsigned int tot_len = sizeof(struct tcphdr); 878 __be32 mrst = 0, *topt; 879 struct dst_entry *dst; 880 __u32 mark = 0; 881 882 if (tsecr) 883 tot_len += TCPOLEN_TSTAMP_ALIGNED; 884 if (tcp_key_is_md5(key)) 885 tot_len += TCPOLEN_MD5SIG_ALIGNED; 886 if (tcp_key_is_ao(key)) 887 tot_len += tcp_ao_len_aligned(key->ao_key); 888 889 #ifdef CONFIG_MPTCP 890 if (rst && !tcp_key_is_md5(key)) { 891 mrst = mptcp_reset_option(skb); 892 893 if (mrst) 894 tot_len += sizeof(__be32); 895 } 896 #endif 897 898 buff = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC); 899 if (!buff) 900 return; 901 902 skb_reserve(buff, MAX_TCP_HEADER); 903 904 t1 = skb_push(buff, tot_len); 905 skb_reset_transport_header(buff); 906 907 /* Swap the send and the receive. */ 908 memset(t1, 0, sizeof(*t1)); 909 t1->dest = th->source; 910 t1->source = th->dest; 911 t1->doff = tot_len / 4; 912 t1->seq = htonl(seq); 913 t1->ack_seq = htonl(ack); 914 t1->ack = !rst || !th->ack; 915 t1->rst = rst; 916 t1->window = htons(win); 917 918 topt = (__be32 *)(t1 + 1); 919 920 if (tsecr) { 921 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | 922 (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP); 923 *topt++ = htonl(tsval); 924 *topt++ = htonl(tsecr); 925 } 926 927 if (mrst) 928 *topt++ = mrst; 929 930 #ifdef CONFIG_TCP_MD5SIG 931 if (tcp_key_is_md5(key)) { 932 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | 933 (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG); 934 tcp_v6_md5_hash_hdr((__u8 *)topt, key->md5_key, 935 &ipv6_hdr(skb)->saddr, 936 &ipv6_hdr(skb)->daddr, t1); 937 } 938 #endif 939 #ifdef CONFIG_TCP_AO 940 if (tcp_key_is_ao(key)) { 941 *topt++ = htonl((TCPOPT_AO << 24) | 942 (tcp_ao_len(key->ao_key) << 16) | 943 (key->ao_key->sndid << 8) | 944 (key->rcv_next)); 945 946 tcp_ao_hash_hdr(AF_INET6, (char *)topt, key->ao_key, 947 key->traffic_key, 948 (union tcp_ao_addr *)&ipv6_hdr(skb)->saddr, 949 (union tcp_ao_addr *)&ipv6_hdr(skb)->daddr, 950 t1, key->sne); 951 } 952 #endif 953 954 memset(&fl6, 0, sizeof(fl6)); 955 fl6.daddr = ipv6_hdr(skb)->saddr; 956 fl6.saddr = ipv6_hdr(skb)->daddr; 957 fl6.flowlabel = label; 958 959 buff->ip_summed = CHECKSUM_PARTIAL; 960 961 __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr); 962 963 fl6.flowi6_proto = IPPROTO_TCP; 964 if (rt6_need_strict(&fl6.daddr) && !oif) 965 fl6.flowi6_oif = tcp_v6_iif(skb); 966 else { 967 if (!oif && netif_index_is_l3_master(net, skb->skb_iif)) 968 oif = skb->skb_iif; 969 970 fl6.flowi6_oif = oif; 971 } 972 973 if (sk) { 974 if (sk->sk_state == TCP_TIME_WAIT) 975 mark = inet_twsk(sk)->tw_mark; 976 else 977 mark = READ_ONCE(sk->sk_mark); 978 skb_set_delivery_time(buff, tcp_transmit_time(sk), true); 979 } 980 if (txhash) { 981 /* autoflowlabel/skb_get_hash_flowi6 rely on buff->hash */ 982 skb_set_hash(buff, txhash, PKT_HASH_TYPE_L4); 983 } 984 fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark) ?: mark; 985 fl6.fl6_dport = t1->dest; 986 fl6.fl6_sport = t1->source; 987 fl6.flowi6_uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL); 988 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6)); 989 990 /* Pass a socket to ip6_dst_lookup either it is for RST 991 * Underlying function will use this to retrieve the network 992 * namespace 993 */ 994 if (sk && sk->sk_state != TCP_TIME_WAIT) 995 dst = ip6_dst_lookup_flow(net, sk, &fl6, NULL); /*sk's xfrm_policy can be referred*/ 996 else 997 dst = ip6_dst_lookup_flow(net, ctl_sk, &fl6, NULL); 998 if (!IS_ERR(dst)) { 999 skb_dst_set(buff, dst); 1000 ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, 1001 tclass & ~INET_ECN_MASK, priority); 1002 TCP_INC_STATS(net, TCP_MIB_OUTSEGS); 1003 if (rst) 1004 TCP_INC_STATS(net, TCP_MIB_OUTRSTS); 1005 return; 1006 } 1007 1008 kfree_skb(buff); 1009 } 1010 1011 static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) 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); 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) 1140 out: 1141 if (allocated_traffic_key) 1142 kfree(key.traffic_key); 1143 rcu_read_unlock(); 1144 #endif 1145 } 1146 1147 static 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 1156 static 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(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, tcptw->tw_rcv_nxt, 1200 tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale, 1201 tcp_tw_tsval(tcptw), 1202 tcptw->tw_ts_recent, tw->tw_bound_dev_if, &key, 1203 tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel), tw->tw_priority, 1204 tw->tw_txhash); 1205 1206 #ifdef CONFIG_TCP_AO 1207 out: 1208 #endif 1209 inet_twsk_put(tw); 1210 } 1211 1212 static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb, 1213 struct request_sock *req) 1214 { 1215 struct tcp_key key = {}; 1216 1217 #ifdef CONFIG_TCP_AO 1218 if (static_branch_unlikely(&tcp_ao_needed.key) && 1219 tcp_rsk_used_ao(req)) { 1220 const struct in6_addr *addr = &ipv6_hdr(skb)->saddr; 1221 const struct tcp_ao_hdr *aoh; 1222 int l3index; 1223 1224 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0; 1225 /* Invalid TCP option size or twice included auth */ 1226 if (tcp_parse_auth_options(tcp_hdr(skb), NULL, &aoh)) 1227 return; 1228 if (!aoh) 1229 return; 1230 key.ao_key = tcp_ao_do_lookup(sk, l3index, 1231 (union tcp_ao_addr *)addr, 1232 AF_INET6, aoh->rnext_keyid, -1); 1233 if (unlikely(!key.ao_key)) { 1234 /* Send ACK with any matching MKT for the peer */ 1235 key.ao_key = tcp_ao_do_lookup(sk, l3index, 1236 (union tcp_ao_addr *)addr, 1237 AF_INET6, -1, -1); 1238 /* Matching key disappeared (user removed the key?) 1239 * let the handshake timeout. 1240 */ 1241 if (!key.ao_key) { 1242 net_info_ratelimited("TCP-AO key for (%pI6, %d)->(%pI6, %d) suddenly disappeared, won't ACK new connection\n", 1243 addr, 1244 ntohs(tcp_hdr(skb)->source), 1245 &ipv6_hdr(skb)->daddr, 1246 ntohs(tcp_hdr(skb)->dest)); 1247 return; 1248 } 1249 } 1250 key.traffic_key = kmalloc(tcp_ao_digest_size(key.ao_key), GFP_ATOMIC); 1251 if (!key.traffic_key) 1252 return; 1253 1254 key.type = TCP_KEY_AO; 1255 key.rcv_next = aoh->keyid; 1256 tcp_v6_ao_calc_key_rsk(key.ao_key, key.traffic_key, req); 1257 #else 1258 if (0) { 1259 #endif 1260 #ifdef CONFIG_TCP_MD5SIG 1261 } else if (static_branch_unlikely(&tcp_md5_needed.key)) { 1262 int l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0; 1263 1264 key.md5_key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr, 1265 l3index); 1266 if (key.md5_key) 1267 key.type = TCP_KEY_MD5; 1268 #endif 1269 } 1270 1271 /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV 1272 * sk->sk_state == TCP_SYN_RECV -> for Fast Open. 1273 */ 1274 /* RFC 7323 2.3 1275 * The window field (SEG.WND) of every outgoing segment, with the 1276 * exception of <SYN> segments, MUST be right-shifted by 1277 * Rcv.Wind.Shift bits: 1278 */ 1279 tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ? 1280 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt, 1281 tcp_rsk(req)->rcv_nxt, 1282 req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale, 1283 tcp_rsk_tsval(tcp_rsk(req)), 1284 READ_ONCE(req->ts_recent), sk->sk_bound_dev_if, 1285 &key, ipv6_get_dsfield(ipv6_hdr(skb)), 0, 1286 READ_ONCE(sk->sk_priority), 1287 READ_ONCE(tcp_rsk(req)->txhash)); 1288 if (tcp_key_is_ao(&key)) 1289 kfree(key.traffic_key); 1290 } 1291 1292 1293 static struct sock *tcp_v6_cookie_check(struct sock *sk, struct sk_buff *skb) 1294 { 1295 #ifdef CONFIG_SYN_COOKIES 1296 const struct tcphdr *th = tcp_hdr(skb); 1297 1298 if (!th->syn) 1299 sk = cookie_v6_check(sk, skb); 1300 #endif 1301 return sk; 1302 } 1303 1304 u16 tcp_v6_get_syncookie(struct sock *sk, struct ipv6hdr *iph, 1305 struct tcphdr *th, u32 *cookie) 1306 { 1307 u16 mss = 0; 1308 #ifdef CONFIG_SYN_COOKIES 1309 mss = tcp_get_syncookie_mss(&tcp6_request_sock_ops, 1310 &tcp_request_sock_ipv6_ops, sk, th); 1311 if (mss) { 1312 *cookie = __cookie_v6_init_sequence(iph, th, &mss); 1313 tcp_synq_overflow(sk); 1314 } 1315 #endif 1316 return mss; 1317 } 1318 1319 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) 1320 { 1321 if (skb->protocol == htons(ETH_P_IP)) 1322 return tcp_v4_conn_request(sk, skb); 1323 1324 if (!ipv6_unicast_destination(skb)) 1325 goto drop; 1326 1327 if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) { 1328 __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS); 1329 return 0; 1330 } 1331 1332 return tcp_conn_request(&tcp6_request_sock_ops, 1333 &tcp_request_sock_ipv6_ops, sk, skb); 1334 1335 drop: 1336 tcp_listendrop(sk); 1337 return 0; /* don't send reset */ 1338 } 1339 1340 static void tcp_v6_restore_cb(struct sk_buff *skb) 1341 { 1342 /* We need to move header back to the beginning if xfrm6_policy_check() 1343 * and tcp_v6_fill_cb() are going to be called again. 1344 * ip6_datagram_recv_specific_ctl() also expects IP6CB to be there. 1345 */ 1346 memmove(IP6CB(skb), &TCP_SKB_CB(skb)->header.h6, 1347 sizeof(struct inet6_skb_parm)); 1348 } 1349 1350 static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *skb, 1351 struct request_sock *req, 1352 struct dst_entry *dst, 1353 struct request_sock *req_unhash, 1354 bool *own_req) 1355 { 1356 struct inet_request_sock *ireq; 1357 struct ipv6_pinfo *newnp; 1358 const struct ipv6_pinfo *np = tcp_inet6_sk(sk); 1359 struct ipv6_txoptions *opt; 1360 struct inet_sock *newinet; 1361 bool found_dup_sk = false; 1362 struct tcp_sock *newtp; 1363 struct sock *newsk; 1364 #ifdef CONFIG_TCP_MD5SIG 1365 struct tcp_md5sig_key *key; 1366 int l3index; 1367 #endif 1368 struct flowi6 fl6; 1369 1370 if (skb->protocol == htons(ETH_P_IP)) { 1371 /* 1372 * v6 mapped 1373 */ 1374 1375 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst, 1376 req_unhash, own_req); 1377 1378 if (!newsk) 1379 return NULL; 1380 1381 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk); 1382 1383 newnp = tcp_inet6_sk(newsk); 1384 newtp = tcp_sk(newsk); 1385 1386 memcpy(newnp, np, sizeof(struct ipv6_pinfo)); 1387 1388 newnp->saddr = newsk->sk_v6_rcv_saddr; 1389 1390 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped; 1391 if (sk_is_mptcp(newsk)) 1392 mptcpv6_handle_mapped(newsk, true); 1393 newsk->sk_backlog_rcv = tcp_v4_do_rcv; 1394 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 1395 newtp->af_specific = &tcp_sock_ipv6_mapped_specific; 1396 #endif 1397 1398 newnp->ipv6_mc_list = NULL; 1399 newnp->ipv6_ac_list = NULL; 1400 newnp->ipv6_fl_list = NULL; 1401 newnp->pktoptions = NULL; 1402 newnp->opt = NULL; 1403 newnp->mcast_oif = inet_iif(skb); 1404 newnp->mcast_hops = ip_hdr(skb)->ttl; 1405 newnp->rcv_flowinfo = 0; 1406 if (inet6_test_bit(REPFLOW, sk)) 1407 newnp->flow_label = 0; 1408 1409 /* 1410 * No need to charge this sock to the relevant IPv6 refcnt debug socks count 1411 * here, tcp_create_openreq_child now does this for us, see the comment in 1412 * that function for the gory details. -acme 1413 */ 1414 1415 /* It is tricky place. Until this moment IPv4 tcp 1416 worked with IPv6 icsk.icsk_af_ops. 1417 Sync it now. 1418 */ 1419 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie); 1420 1421 return newsk; 1422 } 1423 1424 ireq = inet_rsk(req); 1425 1426 if (sk_acceptq_is_full(sk)) 1427 goto out_overflow; 1428 1429 if (!dst) { 1430 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_TCP); 1431 if (!dst) 1432 goto out; 1433 } 1434 1435 newsk = tcp_create_openreq_child(sk, req, skb); 1436 if (!newsk) 1437 goto out_nonewsk; 1438 1439 /* 1440 * No need to charge this sock to the relevant IPv6 refcnt debug socks 1441 * count here, tcp_create_openreq_child now does this for us, see the 1442 * comment in that function for the gory details. -acme 1443 */ 1444 1445 newsk->sk_gso_type = SKB_GSO_TCPV6; 1446 ip6_dst_store(newsk, dst, NULL, NULL); 1447 inet6_sk_rx_dst_set(newsk, skb); 1448 1449 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk); 1450 1451 newtp = tcp_sk(newsk); 1452 newinet = inet_sk(newsk); 1453 newnp = tcp_inet6_sk(newsk); 1454 1455 memcpy(newnp, np, sizeof(struct ipv6_pinfo)); 1456 1457 newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr; 1458 newnp->saddr = ireq->ir_v6_loc_addr; 1459 newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr; 1460 newsk->sk_bound_dev_if = ireq->ir_iif; 1461 1462 /* Now IPv6 options... 1463 1464 First: no IPv4 options. 1465 */ 1466 newinet->inet_opt = NULL; 1467 newnp->ipv6_mc_list = NULL; 1468 newnp->ipv6_ac_list = NULL; 1469 newnp->ipv6_fl_list = NULL; 1470 1471 /* Clone RX bits */ 1472 newnp->rxopt.all = np->rxopt.all; 1473 1474 newnp->pktoptions = NULL; 1475 newnp->opt = NULL; 1476 newnp->mcast_oif = tcp_v6_iif(skb); 1477 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; 1478 newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb)); 1479 if (inet6_test_bit(REPFLOW, sk)) 1480 newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb)); 1481 1482 /* Set ToS of the new socket based upon the value of incoming SYN. 1483 * ECT bits are set later in tcp_init_transfer(). 1484 */ 1485 if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_reflect_tos)) 1486 newnp->tclass = tcp_rsk(req)->syn_tos & ~INET_ECN_MASK; 1487 1488 /* Clone native IPv6 options from listening socket (if any) 1489 1490 Yes, keeping reference count would be much more clever, 1491 but we make one more one thing there: reattach optmem 1492 to newsk. 1493 */ 1494 opt = ireq->ipv6_opt; 1495 if (!opt) 1496 opt = rcu_dereference(np->opt); 1497 if (opt) { 1498 opt = ipv6_dup_options(newsk, opt); 1499 RCU_INIT_POINTER(newnp->opt, opt); 1500 } 1501 inet_csk(newsk)->icsk_ext_hdr_len = 0; 1502 if (opt) 1503 inet_csk(newsk)->icsk_ext_hdr_len = opt->opt_nflen + 1504 opt->opt_flen; 1505 1506 tcp_ca_openreq_child(newsk, dst); 1507 1508 tcp_sync_mss(newsk, dst_mtu(dst)); 1509 newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst)); 1510 1511 tcp_initialize_rcv_mss(newsk); 1512 1513 newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6; 1514 newinet->inet_rcv_saddr = LOOPBACK4_IPV6; 1515 1516 #ifdef CONFIG_TCP_MD5SIG 1517 l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif); 1518 1519 if (!tcp_rsk_used_ao(req)) { 1520 /* Copy over the MD5 key from the original socket */ 1521 key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr, l3index); 1522 if (key) { 1523 const union tcp_md5_addr *addr; 1524 1525 addr = (union tcp_md5_addr *)&newsk->sk_v6_daddr; 1526 if (tcp_md5_key_copy(newsk, addr, AF_INET6, 128, l3index, key)) { 1527 inet_csk_prepare_forced_close(newsk); 1528 tcp_done(newsk); 1529 goto out; 1530 } 1531 } 1532 } 1533 #endif 1534 #ifdef CONFIG_TCP_AO 1535 /* Copy over tcp_ao_info if any */ 1536 if (tcp_ao_copy_all_matching(sk, newsk, req, skb, AF_INET6)) 1537 goto out; /* OOM */ 1538 #endif 1539 1540 if (__inet_inherit_port(sk, newsk) < 0) { 1541 inet_csk_prepare_forced_close(newsk); 1542 tcp_done(newsk); 1543 goto out; 1544 } 1545 *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash), 1546 &found_dup_sk); 1547 if (*own_req) { 1548 tcp_move_syn(newtp, req); 1549 1550 /* Clone pktoptions received with SYN, if we own the req */ 1551 if (ireq->pktopts) { 1552 newnp->pktoptions = skb_clone_and_charge_r(ireq->pktopts, newsk); 1553 consume_skb(ireq->pktopts); 1554 ireq->pktopts = NULL; 1555 if (newnp->pktoptions) 1556 tcp_v6_restore_cb(newnp->pktoptions); 1557 } 1558 } else { 1559 if (!req_unhash && found_dup_sk) { 1560 /* This code path should only be executed in the 1561 * syncookie case only 1562 */ 1563 bh_unlock_sock(newsk); 1564 sock_put(newsk); 1565 newsk = NULL; 1566 } 1567 } 1568 1569 return newsk; 1570 1571 out_overflow: 1572 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); 1573 out_nonewsk: 1574 dst_release(dst); 1575 out: 1576 tcp_listendrop(sk); 1577 return NULL; 1578 } 1579 1580 INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *, 1581 u32)); 1582 /* The socket must have it's spinlock held when we get 1583 * here, unless it is a TCP_LISTEN socket. 1584 * 1585 * We have a potential double-lock case here, so even when 1586 * doing backlog processing we use the BH locking scheme. 1587 * This is because we cannot sleep with the original spinlock 1588 * held. 1589 */ 1590 INDIRECT_CALLABLE_SCOPE 1591 int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) 1592 { 1593 struct ipv6_pinfo *np = tcp_inet6_sk(sk); 1594 struct sk_buff *opt_skb = NULL; 1595 enum skb_drop_reason reason; 1596 struct tcp_sock *tp; 1597 1598 /* Imagine: socket is IPv6. IPv4 packet arrives, 1599 goes to IPv4 receive handler and backlogged. 1600 From backlog it always goes here. Kerboom... 1601 Fortunately, tcp_rcv_established and rcv_established 1602 handle them correctly, but it is not case with 1603 tcp_v6_hnd_req and tcp_v6_send_reset(). --ANK 1604 */ 1605 1606 if (skb->protocol == htons(ETH_P_IP)) 1607 return tcp_v4_do_rcv(sk, skb); 1608 1609 /* 1610 * socket locking is here for SMP purposes as backlog rcv 1611 * is currently called with bh processing disabled. 1612 */ 1613 1614 /* Do Stevens' IPV6_PKTOPTIONS. 1615 1616 Yes, guys, it is the only place in our code, where we 1617 may make it not affecting IPv4. 1618 The rest of code is protocol independent, 1619 and I do not like idea to uglify IPv4. 1620 1621 Actually, all the idea behind IPV6_PKTOPTIONS 1622 looks not very well thought. For now we latch 1623 options, received in the last packet, enqueued 1624 by tcp. Feel free to propose better solution. 1625 --ANK (980728) 1626 */ 1627 if (np->rxopt.all) 1628 opt_skb = skb_clone_and_charge_r(skb, sk); 1629 1630 if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */ 1631 struct dst_entry *dst; 1632 1633 dst = rcu_dereference_protected(sk->sk_rx_dst, 1634 lockdep_sock_is_held(sk)); 1635 1636 sock_rps_save_rxhash(sk, skb); 1637 sk_mark_napi_id(sk, skb); 1638 if (dst) { 1639 if (sk->sk_rx_dst_ifindex != skb->skb_iif || 1640 INDIRECT_CALL_1(dst->ops->check, ip6_dst_check, 1641 dst, sk->sk_rx_dst_cookie) == NULL) { 1642 RCU_INIT_POINTER(sk->sk_rx_dst, NULL); 1643 dst_release(dst); 1644 } 1645 } 1646 1647 tcp_rcv_established(sk, skb); 1648 if (opt_skb) 1649 goto ipv6_pktoptions; 1650 return 0; 1651 } 1652 1653 if (tcp_checksum_complete(skb)) 1654 goto csum_err; 1655 1656 if (sk->sk_state == TCP_LISTEN) { 1657 struct sock *nsk = tcp_v6_cookie_check(sk, skb); 1658 1659 if (nsk != sk) { 1660 if (nsk) { 1661 reason = tcp_child_process(sk, nsk, skb); 1662 if (reason) 1663 goto reset; 1664 } 1665 if (opt_skb) 1666 __kfree_skb(opt_skb); 1667 return 0; 1668 } 1669 } else 1670 sock_rps_save_rxhash(sk, skb); 1671 1672 reason = tcp_rcv_state_process(sk, skb); 1673 if (reason) 1674 goto reset; 1675 if (opt_skb) 1676 goto ipv6_pktoptions; 1677 return 0; 1678 1679 reset: 1680 tcp_v6_send_reset(sk, skb); 1681 discard: 1682 if (opt_skb) 1683 __kfree_skb(opt_skb); 1684 kfree_skb_reason(skb, reason); 1685 return 0; 1686 csum_err: 1687 reason = SKB_DROP_REASON_TCP_CSUM; 1688 trace_tcp_bad_csum(skb); 1689 TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS); 1690 TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS); 1691 goto discard; 1692 1693 1694 ipv6_pktoptions: 1695 /* Do you ask, what is it? 1696 1697 1. skb was enqueued by tcp. 1698 2. skb is added to tail of read queue, rather than out of order. 1699 3. socket is not in passive state. 1700 4. Finally, it really contains options, which user wants to receive. 1701 */ 1702 tp = tcp_sk(sk); 1703 if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt && 1704 !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) { 1705 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo) 1706 WRITE_ONCE(np->mcast_oif, tcp_v6_iif(opt_skb)); 1707 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) 1708 WRITE_ONCE(np->mcast_hops, 1709 ipv6_hdr(opt_skb)->hop_limit); 1710 if (np->rxopt.bits.rxflow || np->rxopt.bits.rxtclass) 1711 np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb)); 1712 if (inet6_test_bit(REPFLOW, sk)) 1713 np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb)); 1714 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) { 1715 tcp_v6_restore_cb(opt_skb); 1716 opt_skb = xchg(&np->pktoptions, opt_skb); 1717 } else { 1718 __kfree_skb(opt_skb); 1719 opt_skb = xchg(&np->pktoptions, NULL); 1720 } 1721 } 1722 1723 consume_skb(opt_skb); 1724 return 0; 1725 } 1726 1727 static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr, 1728 const struct tcphdr *th) 1729 { 1730 /* This is tricky: we move IP6CB at its correct location into 1731 * TCP_SKB_CB(). It must be done after xfrm6_policy_check(), because 1732 * _decode_session6() uses IP6CB(). 1733 * barrier() makes sure compiler won't play aliasing games. 1734 */ 1735 memmove(&TCP_SKB_CB(skb)->header.h6, IP6CB(skb), 1736 sizeof(struct inet6_skb_parm)); 1737 barrier(); 1738 1739 TCP_SKB_CB(skb)->seq = ntohl(th->seq); 1740 TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin + 1741 skb->len - th->doff*4); 1742 TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); 1743 TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th); 1744 TCP_SKB_CB(skb)->ip_dsfield = ipv6_get_dsfield(hdr); 1745 TCP_SKB_CB(skb)->sacked = 0; 1746 TCP_SKB_CB(skb)->has_rxtstamp = 1747 skb->tstamp || skb_hwtstamps(skb)->hwtstamp; 1748 } 1749 1750 INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) 1751 { 1752 enum skb_drop_reason drop_reason; 1753 int sdif = inet6_sdif(skb); 1754 int dif = inet6_iif(skb); 1755 const struct tcphdr *th; 1756 const struct ipv6hdr *hdr; 1757 bool refcounted; 1758 struct sock *sk; 1759 int ret; 1760 u32 isn; 1761 struct net *net = dev_net(skb->dev); 1762 1763 drop_reason = SKB_DROP_REASON_NOT_SPECIFIED; 1764 if (skb->pkt_type != PACKET_HOST) 1765 goto discard_it; 1766 1767 /* 1768 * Count it even if it's bad. 1769 */ 1770 __TCP_INC_STATS(net, TCP_MIB_INSEGS); 1771 1772 if (!pskb_may_pull(skb, sizeof(struct tcphdr))) 1773 goto discard_it; 1774 1775 th = (const struct tcphdr *)skb->data; 1776 1777 if (unlikely(th->doff < sizeof(struct tcphdr) / 4)) { 1778 drop_reason = SKB_DROP_REASON_PKT_TOO_SMALL; 1779 goto bad_packet; 1780 } 1781 if (!pskb_may_pull(skb, th->doff*4)) 1782 goto discard_it; 1783 1784 if (skb_checksum_init(skb, IPPROTO_TCP, ip6_compute_pseudo)) 1785 goto csum_error; 1786 1787 th = (const struct tcphdr *)skb->data; 1788 hdr = ipv6_hdr(skb); 1789 1790 lookup: 1791 sk = __inet6_lookup_skb(net->ipv4.tcp_death_row.hashinfo, skb, __tcp_hdrlen(th), 1792 th->source, th->dest, inet6_iif(skb), sdif, 1793 &refcounted); 1794 if (!sk) 1795 goto no_tcp_socket; 1796 1797 if (sk->sk_state == TCP_TIME_WAIT) 1798 goto do_time_wait; 1799 1800 if (sk->sk_state == TCP_NEW_SYN_RECV) { 1801 struct request_sock *req = inet_reqsk(sk); 1802 bool req_stolen = false; 1803 struct sock *nsk; 1804 1805 sk = req->rsk_listener; 1806 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) 1807 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1808 else 1809 drop_reason = tcp_inbound_hash(sk, req, skb, 1810 &hdr->saddr, &hdr->daddr, 1811 AF_INET6, dif, sdif); 1812 if (drop_reason) { 1813 sk_drops_add(sk, skb); 1814 reqsk_put(req); 1815 goto discard_it; 1816 } 1817 if (tcp_checksum_complete(skb)) { 1818 reqsk_put(req); 1819 goto csum_error; 1820 } 1821 if (unlikely(sk->sk_state != TCP_LISTEN)) { 1822 nsk = reuseport_migrate_sock(sk, req_to_sk(req), skb); 1823 if (!nsk) { 1824 inet_csk_reqsk_queue_drop_and_put(sk, req); 1825 goto lookup; 1826 } 1827 sk = nsk; 1828 /* reuseport_migrate_sock() has already held one sk_refcnt 1829 * before returning. 1830 */ 1831 } else { 1832 sock_hold(sk); 1833 } 1834 refcounted = true; 1835 nsk = NULL; 1836 if (!tcp_filter(sk, skb)) { 1837 th = (const struct tcphdr *)skb->data; 1838 hdr = ipv6_hdr(skb); 1839 tcp_v6_fill_cb(skb, hdr, th); 1840 nsk = tcp_check_req(sk, skb, req, false, &req_stolen); 1841 } else { 1842 drop_reason = SKB_DROP_REASON_SOCKET_FILTER; 1843 } 1844 if (!nsk) { 1845 reqsk_put(req); 1846 if (req_stolen) { 1847 /* Another cpu got exclusive access to req 1848 * and created a full blown socket. 1849 * Try to feed this packet to this socket 1850 * instead of discarding it. 1851 */ 1852 tcp_v6_restore_cb(skb); 1853 sock_put(sk); 1854 goto lookup; 1855 } 1856 goto discard_and_relse; 1857 } 1858 nf_reset_ct(skb); 1859 if (nsk == sk) { 1860 reqsk_put(req); 1861 tcp_v6_restore_cb(skb); 1862 } else { 1863 drop_reason = tcp_child_process(sk, nsk, skb); 1864 if (drop_reason) { 1865 tcp_v6_send_reset(nsk, skb); 1866 goto discard_and_relse; 1867 } 1868 sock_put(sk); 1869 return 0; 1870 } 1871 } 1872 1873 process: 1874 if (static_branch_unlikely(&ip6_min_hopcount)) { 1875 /* min_hopcount can be changed concurrently from do_ipv6_setsockopt() */ 1876 if (unlikely(hdr->hop_limit < READ_ONCE(tcp_inet6_sk(sk)->min_hopcount))) { 1877 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); 1878 drop_reason = SKB_DROP_REASON_TCP_MINTTL; 1879 goto discard_and_relse; 1880 } 1881 } 1882 1883 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) { 1884 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1885 goto discard_and_relse; 1886 } 1887 1888 drop_reason = tcp_inbound_hash(sk, NULL, skb, &hdr->saddr, &hdr->daddr, 1889 AF_INET6, dif, sdif); 1890 if (drop_reason) 1891 goto discard_and_relse; 1892 1893 nf_reset_ct(skb); 1894 1895 if (tcp_filter(sk, skb)) { 1896 drop_reason = SKB_DROP_REASON_SOCKET_FILTER; 1897 goto discard_and_relse; 1898 } 1899 th = (const struct tcphdr *)skb->data; 1900 hdr = ipv6_hdr(skb); 1901 tcp_v6_fill_cb(skb, hdr, th); 1902 1903 skb->dev = NULL; 1904 1905 if (sk->sk_state == TCP_LISTEN) { 1906 ret = tcp_v6_do_rcv(sk, skb); 1907 goto put_and_return; 1908 } 1909 1910 sk_incoming_cpu_update(sk); 1911 1912 bh_lock_sock_nested(sk); 1913 tcp_segs_in(tcp_sk(sk), skb); 1914 ret = 0; 1915 if (!sock_owned_by_user(sk)) { 1916 ret = tcp_v6_do_rcv(sk, skb); 1917 } else { 1918 if (tcp_add_backlog(sk, skb, &drop_reason)) 1919 goto discard_and_relse; 1920 } 1921 bh_unlock_sock(sk); 1922 put_and_return: 1923 if (refcounted) 1924 sock_put(sk); 1925 return ret ? -1 : 0; 1926 1927 no_tcp_socket: 1928 drop_reason = SKB_DROP_REASON_NO_SOCKET; 1929 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) 1930 goto discard_it; 1931 1932 tcp_v6_fill_cb(skb, hdr, th); 1933 1934 if (tcp_checksum_complete(skb)) { 1935 csum_error: 1936 drop_reason = SKB_DROP_REASON_TCP_CSUM; 1937 trace_tcp_bad_csum(skb); 1938 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS); 1939 bad_packet: 1940 __TCP_INC_STATS(net, TCP_MIB_INERRS); 1941 } else { 1942 tcp_v6_send_reset(NULL, skb); 1943 } 1944 1945 discard_it: 1946 SKB_DR_OR(drop_reason, NOT_SPECIFIED); 1947 kfree_skb_reason(skb, drop_reason); 1948 return 0; 1949 1950 discard_and_relse: 1951 sk_drops_add(sk, skb); 1952 if (refcounted) 1953 sock_put(sk); 1954 goto discard_it; 1955 1956 do_time_wait: 1957 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { 1958 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1959 inet_twsk_put(inet_twsk(sk)); 1960 goto discard_it; 1961 } 1962 1963 tcp_v6_fill_cb(skb, hdr, th); 1964 1965 if (tcp_checksum_complete(skb)) { 1966 inet_twsk_put(inet_twsk(sk)); 1967 goto csum_error; 1968 } 1969 1970 switch (tcp_timewait_state_process(inet_twsk(sk), skb, th, &isn)) { 1971 case TCP_TW_SYN: 1972 { 1973 struct sock *sk2; 1974 1975 sk2 = inet6_lookup_listener(net, net->ipv4.tcp_death_row.hashinfo, 1976 skb, __tcp_hdrlen(th), 1977 &ipv6_hdr(skb)->saddr, th->source, 1978 &ipv6_hdr(skb)->daddr, 1979 ntohs(th->dest), 1980 tcp_v6_iif_l3_slave(skb), 1981 sdif); 1982 if (sk2) { 1983 struct inet_timewait_sock *tw = inet_twsk(sk); 1984 inet_twsk_deschedule_put(tw); 1985 sk = sk2; 1986 tcp_v6_restore_cb(skb); 1987 refcounted = false; 1988 __this_cpu_write(tcp_tw_isn, isn); 1989 goto process; 1990 } 1991 } 1992 /* to ACK */ 1993 fallthrough; 1994 case TCP_TW_ACK: 1995 tcp_v6_timewait_ack(sk, skb); 1996 break; 1997 case TCP_TW_RST: 1998 tcp_v6_send_reset(sk, skb); 1999 inet_twsk_deschedule_put(inet_twsk(sk)); 2000 goto discard_it; 2001 case TCP_TW_SUCCESS: 2002 ; 2003 } 2004 goto discard_it; 2005 } 2006 2007 void tcp_v6_early_demux(struct sk_buff *skb) 2008 { 2009 struct net *net = dev_net(skb->dev); 2010 const struct ipv6hdr *hdr; 2011 const struct tcphdr *th; 2012 struct sock *sk; 2013 2014 if (skb->pkt_type != PACKET_HOST) 2015 return; 2016 2017 if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr))) 2018 return; 2019 2020 hdr = ipv6_hdr(skb); 2021 th = tcp_hdr(skb); 2022 2023 if (th->doff < sizeof(struct tcphdr) / 4) 2024 return; 2025 2026 /* Note : We use inet6_iif() here, not tcp_v6_iif() */ 2027 sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, 2028 &hdr->saddr, th->source, 2029 &hdr->daddr, ntohs(th->dest), 2030 inet6_iif(skb), inet6_sdif(skb)); 2031 if (sk) { 2032 skb->sk = sk; 2033 skb->destructor = sock_edemux; 2034 if (sk_fullsock(sk)) { 2035 struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst); 2036 2037 if (dst) 2038 dst = dst_check(dst, sk->sk_rx_dst_cookie); 2039 if (dst && 2040 sk->sk_rx_dst_ifindex == skb->skb_iif) 2041 skb_dst_set_noref(skb, dst); 2042 } 2043 } 2044 } 2045 2046 static struct timewait_sock_ops tcp6_timewait_sock_ops = { 2047 .twsk_obj_size = sizeof(struct tcp6_timewait_sock), 2048 .twsk_unique = tcp_twsk_unique, 2049 .twsk_destructor = tcp_twsk_destructor, 2050 }; 2051 2052 INDIRECT_CALLABLE_SCOPE void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb) 2053 { 2054 __tcp_v6_send_check(skb, &sk->sk_v6_rcv_saddr, &sk->sk_v6_daddr); 2055 } 2056 2057 const struct inet_connection_sock_af_ops ipv6_specific = { 2058 .queue_xmit = inet6_csk_xmit, 2059 .send_check = tcp_v6_send_check, 2060 .rebuild_header = inet6_sk_rebuild_header, 2061 .sk_rx_dst_set = inet6_sk_rx_dst_set, 2062 .conn_request = tcp_v6_conn_request, 2063 .syn_recv_sock = tcp_v6_syn_recv_sock, 2064 .net_header_len = sizeof(struct ipv6hdr), 2065 .setsockopt = ipv6_setsockopt, 2066 .getsockopt = ipv6_getsockopt, 2067 .addr2sockaddr = inet6_csk_addr2sockaddr, 2068 .sockaddr_len = sizeof(struct sockaddr_in6), 2069 .mtu_reduced = tcp_v6_mtu_reduced, 2070 }; 2071 2072 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2073 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = { 2074 #ifdef CONFIG_TCP_MD5SIG 2075 .md5_lookup = tcp_v6_md5_lookup, 2076 .calc_md5_hash = tcp_v6_md5_hash_skb, 2077 .md5_parse = tcp_v6_parse_md5_keys, 2078 #endif 2079 #ifdef CONFIG_TCP_AO 2080 .ao_lookup = tcp_v6_ao_lookup, 2081 .calc_ao_hash = tcp_v6_ao_hash_skb, 2082 .ao_parse = tcp_v6_parse_ao, 2083 .ao_calc_key_sk = tcp_v6_ao_calc_key_sk, 2084 #endif 2085 }; 2086 #endif 2087 2088 /* 2089 * TCP over IPv4 via INET6 API 2090 */ 2091 static const struct inet_connection_sock_af_ops ipv6_mapped = { 2092 .queue_xmit = ip_queue_xmit, 2093 .send_check = tcp_v4_send_check, 2094 .rebuild_header = inet_sk_rebuild_header, 2095 .sk_rx_dst_set = inet_sk_rx_dst_set, 2096 .conn_request = tcp_v6_conn_request, 2097 .syn_recv_sock = tcp_v6_syn_recv_sock, 2098 .net_header_len = sizeof(struct iphdr), 2099 .setsockopt = ipv6_setsockopt, 2100 .getsockopt = ipv6_getsockopt, 2101 .addr2sockaddr = inet6_csk_addr2sockaddr, 2102 .sockaddr_len = sizeof(struct sockaddr_in6), 2103 .mtu_reduced = tcp_v4_mtu_reduced, 2104 }; 2105 2106 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2107 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = { 2108 #ifdef CONFIG_TCP_MD5SIG 2109 .md5_lookup = tcp_v4_md5_lookup, 2110 .calc_md5_hash = tcp_v4_md5_hash_skb, 2111 .md5_parse = tcp_v6_parse_md5_keys, 2112 #endif 2113 #ifdef CONFIG_TCP_AO 2114 .ao_lookup = tcp_v6_ao_lookup, 2115 .calc_ao_hash = tcp_v4_ao_hash_skb, 2116 .ao_parse = tcp_v6_parse_ao, 2117 .ao_calc_key_sk = tcp_v4_ao_calc_key_sk, 2118 #endif 2119 }; 2120 #endif 2121 2122 /* NOTE: A lot of things set to zero explicitly by call to 2123 * sk_alloc() so need not be done here. 2124 */ 2125 static int tcp_v6_init_sock(struct sock *sk) 2126 { 2127 struct inet_connection_sock *icsk = inet_csk(sk); 2128 2129 tcp_init_sock(sk); 2130 2131 icsk->icsk_af_ops = &ipv6_specific; 2132 2133 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2134 tcp_sk(sk)->af_specific = &tcp_sock_ipv6_specific; 2135 #endif 2136 2137 return 0; 2138 } 2139 2140 #ifdef CONFIG_PROC_FS 2141 /* Proc filesystem TCPv6 sock list dumping. */ 2142 static void get_openreq6(struct seq_file *seq, 2143 const struct request_sock *req, int i) 2144 { 2145 long ttd = req->rsk_timer.expires - jiffies; 2146 const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr; 2147 const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr; 2148 2149 if (ttd < 0) 2150 ttd = 0; 2151 2152 seq_printf(seq, 2153 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2154 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n", 2155 i, 2156 src->s6_addr32[0], src->s6_addr32[1], 2157 src->s6_addr32[2], src->s6_addr32[3], 2158 inet_rsk(req)->ir_num, 2159 dest->s6_addr32[0], dest->s6_addr32[1], 2160 dest->s6_addr32[2], dest->s6_addr32[3], 2161 ntohs(inet_rsk(req)->ir_rmt_port), 2162 TCP_SYN_RECV, 2163 0, 0, /* could print option size, but that is af dependent. */ 2164 1, /* timers active (only the expire timer) */ 2165 jiffies_to_clock_t(ttd), 2166 req->num_timeout, 2167 from_kuid_munged(seq_user_ns(seq), 2168 sock_i_uid(req->rsk_listener)), 2169 0, /* non standard timer */ 2170 0, /* open_requests have no inode */ 2171 0, req); 2172 } 2173 2174 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) 2175 { 2176 const struct in6_addr *dest, *src; 2177 __u16 destp, srcp; 2178 int timer_active; 2179 unsigned long timer_expires; 2180 const struct inet_sock *inet = inet_sk(sp); 2181 const struct tcp_sock *tp = tcp_sk(sp); 2182 const struct inet_connection_sock *icsk = inet_csk(sp); 2183 const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq; 2184 int rx_queue; 2185 int state; 2186 2187 dest = &sp->sk_v6_daddr; 2188 src = &sp->sk_v6_rcv_saddr; 2189 destp = ntohs(inet->inet_dport); 2190 srcp = ntohs(inet->inet_sport); 2191 2192 if (icsk->icsk_pending == ICSK_TIME_RETRANS || 2193 icsk->icsk_pending == ICSK_TIME_REO_TIMEOUT || 2194 icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) { 2195 timer_active = 1; 2196 timer_expires = icsk->icsk_timeout; 2197 } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) { 2198 timer_active = 4; 2199 timer_expires = icsk->icsk_timeout; 2200 } else if (timer_pending(&sp->sk_timer)) { 2201 timer_active = 2; 2202 timer_expires = sp->sk_timer.expires; 2203 } else { 2204 timer_active = 0; 2205 timer_expires = jiffies; 2206 } 2207 2208 state = inet_sk_state_load(sp); 2209 if (state == TCP_LISTEN) 2210 rx_queue = READ_ONCE(sp->sk_ack_backlog); 2211 else 2212 /* Because we don't lock the socket, 2213 * we might find a transient negative value. 2214 */ 2215 rx_queue = max_t(int, READ_ONCE(tp->rcv_nxt) - 2216 READ_ONCE(tp->copied_seq), 0); 2217 2218 seq_printf(seq, 2219 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2220 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n", 2221 i, 2222 src->s6_addr32[0], src->s6_addr32[1], 2223 src->s6_addr32[2], src->s6_addr32[3], srcp, 2224 dest->s6_addr32[0], dest->s6_addr32[1], 2225 dest->s6_addr32[2], dest->s6_addr32[3], destp, 2226 state, 2227 READ_ONCE(tp->write_seq) - tp->snd_una, 2228 rx_queue, 2229 timer_active, 2230 jiffies_delta_to_clock_t(timer_expires - jiffies), 2231 icsk->icsk_retransmits, 2232 from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), 2233 icsk->icsk_probes_out, 2234 sock_i_ino(sp), 2235 refcount_read(&sp->sk_refcnt), sp, 2236 jiffies_to_clock_t(icsk->icsk_rto), 2237 jiffies_to_clock_t(icsk->icsk_ack.ato), 2238 (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sp), 2239 tcp_snd_cwnd(tp), 2240 state == TCP_LISTEN ? 2241 fastopenq->max_qlen : 2242 (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh) 2243 ); 2244 } 2245 2246 static void get_timewait6_sock(struct seq_file *seq, 2247 struct inet_timewait_sock *tw, int i) 2248 { 2249 long delta = tw->tw_timer.expires - jiffies; 2250 const struct in6_addr *dest, *src; 2251 __u16 destp, srcp; 2252 2253 dest = &tw->tw_v6_daddr; 2254 src = &tw->tw_v6_rcv_saddr; 2255 destp = ntohs(tw->tw_dport); 2256 srcp = ntohs(tw->tw_sport); 2257 2258 seq_printf(seq, 2259 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2260 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n", 2261 i, 2262 src->s6_addr32[0], src->s6_addr32[1], 2263 src->s6_addr32[2], src->s6_addr32[3], srcp, 2264 dest->s6_addr32[0], dest->s6_addr32[1], 2265 dest->s6_addr32[2], dest->s6_addr32[3], destp, 2266 tw->tw_substate, 0, 0, 2267 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0, 2268 refcount_read(&tw->tw_refcnt), tw); 2269 } 2270 2271 static int tcp6_seq_show(struct seq_file *seq, void *v) 2272 { 2273 struct tcp_iter_state *st; 2274 struct sock *sk = v; 2275 2276 if (v == SEQ_START_TOKEN) { 2277 seq_puts(seq, 2278 " sl " 2279 "local_address " 2280 "remote_address " 2281 "st tx_queue rx_queue tr tm->when retrnsmt" 2282 " uid timeout inode\n"); 2283 goto out; 2284 } 2285 st = seq->private; 2286 2287 if (sk->sk_state == TCP_TIME_WAIT) 2288 get_timewait6_sock(seq, v, st->num); 2289 else if (sk->sk_state == TCP_NEW_SYN_RECV) 2290 get_openreq6(seq, v, st->num); 2291 else 2292 get_tcp6_sock(seq, v, st->num); 2293 out: 2294 return 0; 2295 } 2296 2297 static const struct seq_operations tcp6_seq_ops = { 2298 .show = tcp6_seq_show, 2299 .start = tcp_seq_start, 2300 .next = tcp_seq_next, 2301 .stop = tcp_seq_stop, 2302 }; 2303 2304 static struct tcp_seq_afinfo tcp6_seq_afinfo = { 2305 .family = AF_INET6, 2306 }; 2307 2308 int __net_init tcp6_proc_init(struct net *net) 2309 { 2310 if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops, 2311 sizeof(struct tcp_iter_state), &tcp6_seq_afinfo)) 2312 return -ENOMEM; 2313 return 0; 2314 } 2315 2316 void tcp6_proc_exit(struct net *net) 2317 { 2318 remove_proc_entry("tcp6", net->proc_net); 2319 } 2320 #endif 2321 2322 struct proto tcpv6_prot = { 2323 .name = "TCPv6", 2324 .owner = THIS_MODULE, 2325 .close = tcp_close, 2326 .pre_connect = tcp_v6_pre_connect, 2327 .connect = tcp_v6_connect, 2328 .disconnect = tcp_disconnect, 2329 .accept = inet_csk_accept, 2330 .ioctl = tcp_ioctl, 2331 .init = tcp_v6_init_sock, 2332 .destroy = tcp_v4_destroy_sock, 2333 .shutdown = tcp_shutdown, 2334 .setsockopt = tcp_setsockopt, 2335 .getsockopt = tcp_getsockopt, 2336 .bpf_bypass_getsockopt = tcp_bpf_bypass_getsockopt, 2337 .keepalive = tcp_set_keepalive, 2338 .recvmsg = tcp_recvmsg, 2339 .sendmsg = tcp_sendmsg, 2340 .splice_eof = tcp_splice_eof, 2341 .backlog_rcv = tcp_v6_do_rcv, 2342 .release_cb = tcp_release_cb, 2343 .hash = inet6_hash, 2344 .unhash = inet_unhash, 2345 .get_port = inet_csk_get_port, 2346 .put_port = inet_put_port, 2347 #ifdef CONFIG_BPF_SYSCALL 2348 .psock_update_sk_prot = tcp_bpf_update_proto, 2349 #endif 2350 .enter_memory_pressure = tcp_enter_memory_pressure, 2351 .leave_memory_pressure = tcp_leave_memory_pressure, 2352 .stream_memory_free = tcp_stream_memory_free, 2353 .sockets_allocated = &tcp_sockets_allocated, 2354 2355 .memory_allocated = &tcp_memory_allocated, 2356 .per_cpu_fw_alloc = &tcp_memory_per_cpu_fw_alloc, 2357 2358 .memory_pressure = &tcp_memory_pressure, 2359 .orphan_count = &tcp_orphan_count, 2360 .sysctl_mem = sysctl_tcp_mem, 2361 .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_tcp_wmem), 2362 .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_tcp_rmem), 2363 .max_header = MAX_TCP_HEADER, 2364 .obj_size = sizeof(struct tcp6_sock), 2365 .ipv6_pinfo_offset = offsetof(struct tcp6_sock, inet6), 2366 .slab_flags = SLAB_TYPESAFE_BY_RCU, 2367 .twsk_prot = &tcp6_timewait_sock_ops, 2368 .rsk_prot = &tcp6_request_sock_ops, 2369 .h.hashinfo = NULL, 2370 .no_autobind = true, 2371 .diag_destroy = tcp_abort, 2372 }; 2373 EXPORT_SYMBOL_GPL(tcpv6_prot); 2374 2375 2376 static struct inet_protosw tcpv6_protosw = { 2377 .type = SOCK_STREAM, 2378 .protocol = IPPROTO_TCP, 2379 .prot = &tcpv6_prot, 2380 .ops = &inet6_stream_ops, 2381 .flags = INET_PROTOSW_PERMANENT | 2382 INET_PROTOSW_ICSK, 2383 }; 2384 2385 static int __net_init tcpv6_net_init(struct net *net) 2386 { 2387 return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6, 2388 SOCK_RAW, IPPROTO_TCP, net); 2389 } 2390 2391 static void __net_exit tcpv6_net_exit(struct net *net) 2392 { 2393 inet_ctl_sock_destroy(net->ipv6.tcp_sk); 2394 } 2395 2396 static struct pernet_operations tcpv6_net_ops = { 2397 .init = tcpv6_net_init, 2398 .exit = tcpv6_net_exit, 2399 }; 2400 2401 int __init tcpv6_init(void) 2402 { 2403 int ret; 2404 2405 net_hotdata.tcpv6_protocol = (struct inet6_protocol) { 2406 .handler = tcp_v6_rcv, 2407 .err_handler = tcp_v6_err, 2408 .flags = INET6_PROTO_NOPOLICY | INET6_PROTO_FINAL, 2409 }; 2410 ret = inet6_add_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2411 if (ret) 2412 goto out; 2413 2414 /* register inet6 protocol */ 2415 ret = inet6_register_protosw(&tcpv6_protosw); 2416 if (ret) 2417 goto out_tcpv6_protocol; 2418 2419 ret = register_pernet_subsys(&tcpv6_net_ops); 2420 if (ret) 2421 goto out_tcpv6_protosw; 2422 2423 ret = mptcpv6_init(); 2424 if (ret) 2425 goto out_tcpv6_pernet_subsys; 2426 2427 out: 2428 return ret; 2429 2430 out_tcpv6_pernet_subsys: 2431 unregister_pernet_subsys(&tcpv6_net_ops); 2432 out_tcpv6_protosw: 2433 inet6_unregister_protosw(&tcpv6_protosw); 2434 out_tcpv6_protocol: 2435 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2436 goto out; 2437 } 2438 2439 void tcpv6_exit(void) 2440 { 2441 unregister_pernet_subsys(&tcpv6_net_ops); 2442 inet6_unregister_protosw(&tcpv6_protosw); 2443 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2444 } 2445