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 73 static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb, 74 enum sk_rst_reason reason); 75 static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb, 76 struct request_sock *req); 77 78 INDIRECT_CALLABLE_SCOPE int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb); 79 80 static const struct inet_connection_sock_af_ops ipv6_mapped; 81 const struct inet_connection_sock_af_ops ipv6_specific; 82 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 83 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific; 84 static 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 95 static 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 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 enum sk_rst_reason reason) 1013 { 1014 const struct tcphdr *th = tcp_hdr(skb); 1015 struct ipv6hdr *ipv6h = ipv6_hdr(skb); 1016 const __u8 *md5_hash_location = NULL; 1017 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 1018 bool allocated_traffic_key = false; 1019 #endif 1020 const struct tcp_ao_hdr *aoh; 1021 struct tcp_key key = {}; 1022 u32 seq = 0, ack_seq = 0; 1023 __be32 label = 0; 1024 u32 priority = 0; 1025 struct net *net; 1026 u32 txhash = 0; 1027 int oif = 0; 1028 #ifdef CONFIG_TCP_MD5SIG 1029 unsigned char newhash[16]; 1030 int genhash; 1031 struct sock *sk1 = NULL; 1032 #endif 1033 1034 if (th->rst) 1035 return; 1036 1037 /* If sk not NULL, it means we did a successful lookup and incoming 1038 * route had to be correct. prequeue might have dropped our dst. 1039 */ 1040 if (!sk && !ipv6_unicast_destination(skb)) 1041 return; 1042 1043 net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); 1044 /* Invalid TCP option size or twice included auth */ 1045 if (tcp_parse_auth_options(th, &md5_hash_location, &aoh)) 1046 return; 1047 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 1048 rcu_read_lock(); 1049 #endif 1050 #ifdef CONFIG_TCP_MD5SIG 1051 if (sk && sk_fullsock(sk)) { 1052 int l3index; 1053 1054 /* sdif set, means packet ingressed via a device 1055 * in an L3 domain and inet_iif is set to it. 1056 */ 1057 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0; 1058 key.md5_key = tcp_v6_md5_do_lookup(sk, &ipv6h->saddr, l3index); 1059 if (key.md5_key) 1060 key.type = TCP_KEY_MD5; 1061 } else if (md5_hash_location) { 1062 int dif = tcp_v6_iif_l3_slave(skb); 1063 int sdif = tcp_v6_sdif(skb); 1064 int l3index; 1065 1066 /* 1067 * active side is lost. Try to find listening socket through 1068 * source port, and then find md5 key through listening socket. 1069 * we are not loose security here: 1070 * Incoming packet is checked with md5 hash with finding key, 1071 * no RST generated if md5 hash doesn't match. 1072 */ 1073 sk1 = inet6_lookup_listener(net, net->ipv4.tcp_death_row.hashinfo, 1074 NULL, 0, &ipv6h->saddr, th->source, 1075 &ipv6h->daddr, ntohs(th->source), 1076 dif, sdif); 1077 if (!sk1) 1078 goto out; 1079 1080 /* sdif set, means packet ingressed via a device 1081 * in an L3 domain and dif is set to it. 1082 */ 1083 l3index = tcp_v6_sdif(skb) ? dif : 0; 1084 1085 key.md5_key = tcp_v6_md5_do_lookup(sk1, &ipv6h->saddr, l3index); 1086 if (!key.md5_key) 1087 goto out; 1088 key.type = TCP_KEY_MD5; 1089 1090 genhash = tcp_v6_md5_hash_skb(newhash, key.md5_key, NULL, skb); 1091 if (genhash || memcmp(md5_hash_location, newhash, 16) != 0) 1092 goto out; 1093 } 1094 #endif 1095 1096 if (th->ack) 1097 seq = ntohl(th->ack_seq); 1098 else 1099 ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len - 1100 (th->doff << 2); 1101 1102 #ifdef CONFIG_TCP_AO 1103 if (aoh) { 1104 int l3index; 1105 1106 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0; 1107 if (tcp_ao_prepare_reset(sk, skb, aoh, l3index, seq, 1108 &key.ao_key, &key.traffic_key, 1109 &allocated_traffic_key, 1110 &key.rcv_next, &key.sne)) 1111 goto out; 1112 key.type = TCP_KEY_AO; 1113 } 1114 #endif 1115 1116 if (sk) { 1117 oif = sk->sk_bound_dev_if; 1118 if (sk_fullsock(sk)) { 1119 if (inet6_test_bit(REPFLOW, sk)) 1120 label = ip6_flowlabel(ipv6h); 1121 priority = READ_ONCE(sk->sk_priority); 1122 txhash = sk->sk_txhash; 1123 } 1124 if (sk->sk_state == TCP_TIME_WAIT) { 1125 label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel); 1126 priority = inet_twsk(sk)->tw_priority; 1127 txhash = inet_twsk(sk)->tw_txhash; 1128 } 1129 } else { 1130 if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET) 1131 label = ip6_flowlabel(ipv6h); 1132 } 1133 1134 trace_tcp_send_reset(sk, skb, reason); 1135 1136 tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, 1, 1137 ipv6_get_dsfield(ipv6h), label, priority, txhash, 1138 &key); 1139 1140 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 1141 out: 1142 if (allocated_traffic_key) 1143 kfree(key.traffic_key); 1144 rcu_read_unlock(); 1145 #endif 1146 } 1147 1148 static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq, 1149 u32 ack, u32 win, u32 tsval, u32 tsecr, int oif, 1150 struct tcp_key *key, u8 tclass, 1151 __be32 label, u32 priority, u32 txhash) 1152 { 1153 tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, 0, 1154 tclass, label, priority, txhash, key); 1155 } 1156 1157 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb) 1158 { 1159 struct inet_timewait_sock *tw = inet_twsk(sk); 1160 struct tcp_timewait_sock *tcptw = tcp_twsk(sk); 1161 struct tcp_key key = {}; 1162 #ifdef CONFIG_TCP_AO 1163 struct tcp_ao_info *ao_info; 1164 1165 if (static_branch_unlikely(&tcp_ao_needed.key)) { 1166 1167 /* FIXME: the segment to-be-acked is not verified yet */ 1168 ao_info = rcu_dereference(tcptw->ao_info); 1169 if (ao_info) { 1170 const struct tcp_ao_hdr *aoh; 1171 1172 /* Invalid TCP option size or twice included auth */ 1173 if (tcp_parse_auth_options(tcp_hdr(skb), NULL, &aoh)) 1174 goto out; 1175 if (aoh) 1176 key.ao_key = tcp_ao_established_key(ao_info, 1177 aoh->rnext_keyid, -1); 1178 } 1179 } 1180 if (key.ao_key) { 1181 struct tcp_ao_key *rnext_key; 1182 1183 key.traffic_key = snd_other_key(key.ao_key); 1184 /* rcv_next switches to our rcv_next */ 1185 rnext_key = READ_ONCE(ao_info->rnext_key); 1186 key.rcv_next = rnext_key->rcvid; 1187 key.sne = READ_ONCE(ao_info->snd_sne); 1188 key.type = TCP_KEY_AO; 1189 #else 1190 if (0) { 1191 #endif 1192 #ifdef CONFIG_TCP_MD5SIG 1193 } else if (static_branch_unlikely(&tcp_md5_needed.key)) { 1194 key.md5_key = tcp_twsk_md5_key(tcptw); 1195 if (key.md5_key) 1196 key.type = TCP_KEY_MD5; 1197 #endif 1198 } 1199 1200 tcp_v6_send_ack(sk, skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt, 1201 tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale, 1202 tcp_tw_tsval(tcptw), 1203 tcptw->tw_ts_recent, tw->tw_bound_dev_if, &key, 1204 tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel), tw->tw_priority, 1205 tw->tw_txhash); 1206 1207 #ifdef CONFIG_TCP_AO 1208 out: 1209 #endif 1210 inet_twsk_put(tw); 1211 } 1212 1213 static 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 /* RFC 7323 2.3 1276 * The window field (SEG.WND) of every outgoing segment, with the 1277 * exception of <SYN> segments, MUST be right-shifted by 1278 * Rcv.Wind.Shift bits: 1279 */ 1280 tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ? 1281 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt, 1282 tcp_rsk(req)->rcv_nxt, 1283 req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale, 1284 tcp_rsk_tsval(tcp_rsk(req)), 1285 READ_ONCE(req->ts_recent), sk->sk_bound_dev_if, 1286 &key, ipv6_get_dsfield(ipv6_hdr(skb)), 0, 1287 READ_ONCE(sk->sk_priority), 1288 READ_ONCE(tcp_rsk(req)->txhash)); 1289 if (tcp_key_is_ao(&key)) 1290 kfree(key.traffic_key); 1291 } 1292 1293 1294 static struct sock *tcp_v6_cookie_check(struct sock *sk, struct sk_buff *skb) 1295 { 1296 #ifdef CONFIG_SYN_COOKIES 1297 const struct tcphdr *th = tcp_hdr(skb); 1298 1299 if (!th->syn) 1300 sk = cookie_v6_check(sk, skb); 1301 #endif 1302 return sk; 1303 } 1304 1305 u16 tcp_v6_get_syncookie(struct sock *sk, struct ipv6hdr *iph, 1306 struct tcphdr *th, u32 *cookie) 1307 { 1308 u16 mss = 0; 1309 #ifdef CONFIG_SYN_COOKIES 1310 mss = tcp_get_syncookie_mss(&tcp6_request_sock_ops, 1311 &tcp_request_sock_ipv6_ops, sk, th); 1312 if (mss) { 1313 *cookie = __cookie_v6_init_sequence(iph, th, &mss); 1314 tcp_synq_overflow(sk); 1315 } 1316 #endif 1317 return mss; 1318 } 1319 1320 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) 1321 { 1322 if (skb->protocol == htons(ETH_P_IP)) 1323 return tcp_v4_conn_request(sk, skb); 1324 1325 if (!ipv6_unicast_destination(skb)) 1326 goto drop; 1327 1328 if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) { 1329 __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS); 1330 return 0; 1331 } 1332 1333 return tcp_conn_request(&tcp6_request_sock_ops, 1334 &tcp_request_sock_ipv6_ops, sk, skb); 1335 1336 drop: 1337 tcp_listendrop(sk); 1338 return 0; /* don't send reset */ 1339 } 1340 1341 static void tcp_v6_restore_cb(struct sk_buff *skb) 1342 { 1343 /* We need to move header back to the beginning if xfrm6_policy_check() 1344 * and tcp_v6_fill_cb() are going to be called again. 1345 * ip6_datagram_recv_specific_ctl() also expects IP6CB to be there. 1346 */ 1347 memmove(IP6CB(skb), &TCP_SKB_CB(skb)->header.h6, 1348 sizeof(struct inet6_skb_parm)); 1349 } 1350 1351 static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *skb, 1352 struct request_sock *req, 1353 struct dst_entry *dst, 1354 struct request_sock *req_unhash, 1355 bool *own_req) 1356 { 1357 struct inet_request_sock *ireq; 1358 struct ipv6_pinfo *newnp; 1359 const struct ipv6_pinfo *np = tcp_inet6_sk(sk); 1360 struct ipv6_txoptions *opt; 1361 struct inet_sock *newinet; 1362 bool found_dup_sk = false; 1363 struct tcp_sock *newtp; 1364 struct sock *newsk; 1365 #ifdef CONFIG_TCP_MD5SIG 1366 struct tcp_md5sig_key *key; 1367 int l3index; 1368 #endif 1369 struct flowi6 fl6; 1370 1371 if (skb->protocol == htons(ETH_P_IP)) { 1372 /* 1373 * v6 mapped 1374 */ 1375 1376 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst, 1377 req_unhash, own_req); 1378 1379 if (!newsk) 1380 return NULL; 1381 1382 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk); 1383 1384 newnp = tcp_inet6_sk(newsk); 1385 newtp = tcp_sk(newsk); 1386 1387 memcpy(newnp, np, sizeof(struct ipv6_pinfo)); 1388 1389 newnp->saddr = newsk->sk_v6_rcv_saddr; 1390 1391 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped; 1392 if (sk_is_mptcp(newsk)) 1393 mptcpv6_handle_mapped(newsk, true); 1394 newsk->sk_backlog_rcv = tcp_v4_do_rcv; 1395 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 1396 newtp->af_specific = &tcp_sock_ipv6_mapped_specific; 1397 #endif 1398 1399 newnp->ipv6_mc_list = NULL; 1400 newnp->ipv6_ac_list = NULL; 1401 newnp->ipv6_fl_list = NULL; 1402 newnp->pktoptions = NULL; 1403 newnp->opt = NULL; 1404 newnp->mcast_oif = inet_iif(skb); 1405 newnp->mcast_hops = ip_hdr(skb)->ttl; 1406 newnp->rcv_flowinfo = 0; 1407 if (inet6_test_bit(REPFLOW, sk)) 1408 newnp->flow_label = 0; 1409 1410 /* 1411 * No need to charge this sock to the relevant IPv6 refcnt debug socks count 1412 * here, tcp_create_openreq_child now does this for us, see the comment in 1413 * that function for the gory details. -acme 1414 */ 1415 1416 /* It is tricky place. Until this moment IPv4 tcp 1417 worked with IPv6 icsk.icsk_af_ops. 1418 Sync it now. 1419 */ 1420 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie); 1421 1422 return newsk; 1423 } 1424 1425 ireq = inet_rsk(req); 1426 1427 if (sk_acceptq_is_full(sk)) 1428 goto out_overflow; 1429 1430 if (!dst) { 1431 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_TCP); 1432 if (!dst) 1433 goto out; 1434 } 1435 1436 newsk = tcp_create_openreq_child(sk, req, skb); 1437 if (!newsk) 1438 goto out_nonewsk; 1439 1440 /* 1441 * No need to charge this sock to the relevant IPv6 refcnt debug socks 1442 * count here, tcp_create_openreq_child now does this for us, see the 1443 * comment in that function for the gory details. -acme 1444 */ 1445 1446 newsk->sk_gso_type = SKB_GSO_TCPV6; 1447 ip6_dst_store(newsk, dst, NULL, NULL); 1448 inet6_sk_rx_dst_set(newsk, skb); 1449 1450 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk); 1451 1452 newtp = tcp_sk(newsk); 1453 newinet = inet_sk(newsk); 1454 newnp = tcp_inet6_sk(newsk); 1455 1456 memcpy(newnp, np, sizeof(struct ipv6_pinfo)); 1457 1458 newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr; 1459 newnp->saddr = ireq->ir_v6_loc_addr; 1460 newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr; 1461 newsk->sk_bound_dev_if = ireq->ir_iif; 1462 1463 /* Now IPv6 options... 1464 1465 First: no IPv4 options. 1466 */ 1467 newinet->inet_opt = NULL; 1468 newnp->ipv6_mc_list = NULL; 1469 newnp->ipv6_ac_list = NULL; 1470 newnp->ipv6_fl_list = NULL; 1471 1472 /* Clone RX bits */ 1473 newnp->rxopt.all = np->rxopt.all; 1474 1475 newnp->pktoptions = NULL; 1476 newnp->opt = NULL; 1477 newnp->mcast_oif = tcp_v6_iif(skb); 1478 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; 1479 newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb)); 1480 if (inet6_test_bit(REPFLOW, sk)) 1481 newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb)); 1482 1483 /* Set ToS of the new socket based upon the value of incoming SYN. 1484 * ECT bits are set later in tcp_init_transfer(). 1485 */ 1486 if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_reflect_tos)) 1487 newnp->tclass = tcp_rsk(req)->syn_tos & ~INET_ECN_MASK; 1488 1489 /* Clone native IPv6 options from listening socket (if any) 1490 1491 Yes, keeping reference count would be much more clever, 1492 but we make one more one thing there: reattach optmem 1493 to newsk. 1494 */ 1495 opt = ireq->ipv6_opt; 1496 if (!opt) 1497 opt = rcu_dereference(np->opt); 1498 if (opt) { 1499 opt = ipv6_dup_options(newsk, opt); 1500 RCU_INIT_POINTER(newnp->opt, opt); 1501 } 1502 inet_csk(newsk)->icsk_ext_hdr_len = 0; 1503 if (opt) 1504 inet_csk(newsk)->icsk_ext_hdr_len = opt->opt_nflen + 1505 opt->opt_flen; 1506 1507 tcp_ca_openreq_child(newsk, dst); 1508 1509 tcp_sync_mss(newsk, dst_mtu(dst)); 1510 newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst)); 1511 1512 tcp_initialize_rcv_mss(newsk); 1513 1514 newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6; 1515 newinet->inet_rcv_saddr = LOOPBACK4_IPV6; 1516 1517 #ifdef CONFIG_TCP_MD5SIG 1518 l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif); 1519 1520 if (!tcp_rsk_used_ao(req)) { 1521 /* Copy over the MD5 key from the original socket */ 1522 key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr, l3index); 1523 if (key) { 1524 const union tcp_md5_addr *addr; 1525 1526 addr = (union tcp_md5_addr *)&newsk->sk_v6_daddr; 1527 if (tcp_md5_key_copy(newsk, addr, AF_INET6, 128, l3index, key)) { 1528 inet_csk_prepare_forced_close(newsk); 1529 tcp_done(newsk); 1530 goto out; 1531 } 1532 } 1533 } 1534 #endif 1535 #ifdef CONFIG_TCP_AO 1536 /* Copy over tcp_ao_info if any */ 1537 if (tcp_ao_copy_all_matching(sk, newsk, req, skb, AF_INET6)) 1538 goto out; /* OOM */ 1539 #endif 1540 1541 if (__inet_inherit_port(sk, newsk) < 0) { 1542 inet_csk_prepare_forced_close(newsk); 1543 tcp_done(newsk); 1544 goto out; 1545 } 1546 *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash), 1547 &found_dup_sk); 1548 if (*own_req) { 1549 tcp_move_syn(newtp, req); 1550 1551 /* Clone pktoptions received with SYN, if we own the req */ 1552 if (ireq->pktopts) { 1553 newnp->pktoptions = skb_clone_and_charge_r(ireq->pktopts, newsk); 1554 consume_skb(ireq->pktopts); 1555 ireq->pktopts = NULL; 1556 if (newnp->pktoptions) 1557 tcp_v6_restore_cb(newnp->pktoptions); 1558 } 1559 } else { 1560 if (!req_unhash && found_dup_sk) { 1561 /* This code path should only be executed in the 1562 * syncookie case only 1563 */ 1564 bh_unlock_sock(newsk); 1565 sock_put(newsk); 1566 newsk = NULL; 1567 } 1568 } 1569 1570 return newsk; 1571 1572 out_overflow: 1573 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); 1574 out_nonewsk: 1575 dst_release(dst); 1576 out: 1577 tcp_listendrop(sk); 1578 return NULL; 1579 } 1580 1581 INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *, 1582 u32)); 1583 /* The socket must have it's spinlock held when we get 1584 * here, unless it is a TCP_LISTEN socket. 1585 * 1586 * We have a potential double-lock case here, so even when 1587 * doing backlog processing we use the BH locking scheme. 1588 * This is because we cannot sleep with the original spinlock 1589 * held. 1590 */ 1591 INDIRECT_CALLABLE_SCOPE 1592 int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) 1593 { 1594 struct ipv6_pinfo *np = tcp_inet6_sk(sk); 1595 struct sk_buff *opt_skb = NULL; 1596 enum skb_drop_reason reason; 1597 struct tcp_sock *tp; 1598 1599 /* Imagine: socket is IPv6. IPv4 packet arrives, 1600 goes to IPv4 receive handler and backlogged. 1601 From backlog it always goes here. Kerboom... 1602 Fortunately, tcp_rcv_established and rcv_established 1603 handle them correctly, but it is not case with 1604 tcp_v6_hnd_req and tcp_v6_send_reset(). --ANK 1605 */ 1606 1607 if (skb->protocol == htons(ETH_P_IP)) 1608 return tcp_v4_do_rcv(sk, skb); 1609 1610 /* 1611 * socket locking is here for SMP purposes as backlog rcv 1612 * is currently called with bh processing disabled. 1613 */ 1614 1615 /* Do Stevens' IPV6_PKTOPTIONS. 1616 1617 Yes, guys, it is the only place in our code, where we 1618 may make it not affecting IPv4. 1619 The rest of code is protocol independent, 1620 and I do not like idea to uglify IPv4. 1621 1622 Actually, all the idea behind IPV6_PKTOPTIONS 1623 looks not very well thought. For now we latch 1624 options, received in the last packet, enqueued 1625 by tcp. Feel free to propose better solution. 1626 --ANK (980728) 1627 */ 1628 if (np->rxopt.all) 1629 opt_skb = skb_clone_and_charge_r(skb, sk); 1630 1631 if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */ 1632 struct dst_entry *dst; 1633 1634 dst = rcu_dereference_protected(sk->sk_rx_dst, 1635 lockdep_sock_is_held(sk)); 1636 1637 sock_rps_save_rxhash(sk, skb); 1638 sk_mark_napi_id(sk, skb); 1639 if (dst) { 1640 if (sk->sk_rx_dst_ifindex != skb->skb_iif || 1641 INDIRECT_CALL_1(dst->ops->check, ip6_dst_check, 1642 dst, sk->sk_rx_dst_cookie) == NULL) { 1643 RCU_INIT_POINTER(sk->sk_rx_dst, NULL); 1644 dst_release(dst); 1645 } 1646 } 1647 1648 tcp_rcv_established(sk, skb); 1649 if (opt_skb) 1650 goto ipv6_pktoptions; 1651 return 0; 1652 } 1653 1654 if (tcp_checksum_complete(skb)) 1655 goto csum_err; 1656 1657 if (sk->sk_state == TCP_LISTEN) { 1658 struct sock *nsk = tcp_v6_cookie_check(sk, skb); 1659 1660 if (nsk != sk) { 1661 if (nsk) { 1662 reason = tcp_child_process(sk, nsk, skb); 1663 if (reason) 1664 goto reset; 1665 } 1666 if (opt_skb) 1667 __kfree_skb(opt_skb); 1668 return 0; 1669 } 1670 } else 1671 sock_rps_save_rxhash(sk, skb); 1672 1673 reason = tcp_rcv_state_process(sk, skb); 1674 if (reason) 1675 goto reset; 1676 if (opt_skb) 1677 goto ipv6_pktoptions; 1678 return 0; 1679 1680 reset: 1681 tcp_v6_send_reset(sk, skb, sk_rst_convert_drop_reason(reason)); 1682 discard: 1683 if (opt_skb) 1684 __kfree_skb(opt_skb); 1685 kfree_skb_reason(skb, reason); 1686 return 0; 1687 csum_err: 1688 reason = SKB_DROP_REASON_TCP_CSUM; 1689 trace_tcp_bad_csum(skb); 1690 TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS); 1691 TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS); 1692 goto discard; 1693 1694 1695 ipv6_pktoptions: 1696 /* Do you ask, what is it? 1697 1698 1. skb was enqueued by tcp. 1699 2. skb is added to tail of read queue, rather than out of order. 1700 3. socket is not in passive state. 1701 4. Finally, it really contains options, which user wants to receive. 1702 */ 1703 tp = tcp_sk(sk); 1704 if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt && 1705 !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) { 1706 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo) 1707 WRITE_ONCE(np->mcast_oif, tcp_v6_iif(opt_skb)); 1708 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) 1709 WRITE_ONCE(np->mcast_hops, 1710 ipv6_hdr(opt_skb)->hop_limit); 1711 if (np->rxopt.bits.rxflow || np->rxopt.bits.rxtclass) 1712 np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb)); 1713 if (inet6_test_bit(REPFLOW, sk)) 1714 np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb)); 1715 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) { 1716 tcp_v6_restore_cb(opt_skb); 1717 opt_skb = xchg(&np->pktoptions, opt_skb); 1718 } else { 1719 __kfree_skb(opt_skb); 1720 opt_skb = xchg(&np->pktoptions, NULL); 1721 } 1722 } 1723 1724 consume_skb(opt_skb); 1725 return 0; 1726 } 1727 1728 static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr, 1729 const struct tcphdr *th) 1730 { 1731 /* This is tricky: we move IP6CB at its correct location into 1732 * TCP_SKB_CB(). It must be done after xfrm6_policy_check(), because 1733 * _decode_session6() uses IP6CB(). 1734 * barrier() makes sure compiler won't play aliasing games. 1735 */ 1736 memmove(&TCP_SKB_CB(skb)->header.h6, IP6CB(skb), 1737 sizeof(struct inet6_skb_parm)); 1738 barrier(); 1739 1740 TCP_SKB_CB(skb)->seq = ntohl(th->seq); 1741 TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin + 1742 skb->len - th->doff*4); 1743 TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); 1744 TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th); 1745 TCP_SKB_CB(skb)->ip_dsfield = ipv6_get_dsfield(hdr); 1746 TCP_SKB_CB(skb)->sacked = 0; 1747 TCP_SKB_CB(skb)->has_rxtstamp = 1748 skb->tstamp || skb_hwtstamps(skb)->hwtstamp; 1749 } 1750 1751 INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) 1752 { 1753 enum skb_drop_reason drop_reason; 1754 int sdif = inet6_sdif(skb); 1755 int dif = inet6_iif(skb); 1756 const struct tcphdr *th; 1757 const struct ipv6hdr *hdr; 1758 bool refcounted; 1759 struct sock *sk; 1760 int ret; 1761 u32 isn; 1762 struct net *net = dev_net(skb->dev); 1763 1764 drop_reason = SKB_DROP_REASON_NOT_SPECIFIED; 1765 if (skb->pkt_type != PACKET_HOST) 1766 goto discard_it; 1767 1768 /* 1769 * Count it even if it's bad. 1770 */ 1771 __TCP_INC_STATS(net, TCP_MIB_INSEGS); 1772 1773 if (!pskb_may_pull(skb, sizeof(struct tcphdr))) 1774 goto discard_it; 1775 1776 th = (const struct tcphdr *)skb->data; 1777 1778 if (unlikely(th->doff < sizeof(struct tcphdr) / 4)) { 1779 drop_reason = SKB_DROP_REASON_PKT_TOO_SMALL; 1780 goto bad_packet; 1781 } 1782 if (!pskb_may_pull(skb, th->doff*4)) 1783 goto discard_it; 1784 1785 if (skb_checksum_init(skb, IPPROTO_TCP, ip6_compute_pseudo)) 1786 goto csum_error; 1787 1788 th = (const struct tcphdr *)skb->data; 1789 hdr = ipv6_hdr(skb); 1790 1791 lookup: 1792 sk = __inet6_lookup_skb(net->ipv4.tcp_death_row.hashinfo, skb, __tcp_hdrlen(th), 1793 th->source, th->dest, inet6_iif(skb), sdif, 1794 &refcounted); 1795 if (!sk) 1796 goto no_tcp_socket; 1797 1798 if (sk->sk_state == TCP_TIME_WAIT) 1799 goto do_time_wait; 1800 1801 if (sk->sk_state == TCP_NEW_SYN_RECV) { 1802 struct request_sock *req = inet_reqsk(sk); 1803 bool req_stolen = false; 1804 struct sock *nsk; 1805 1806 sk = req->rsk_listener; 1807 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) 1808 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1809 else 1810 drop_reason = tcp_inbound_hash(sk, req, skb, 1811 &hdr->saddr, &hdr->daddr, 1812 AF_INET6, dif, sdif); 1813 if (drop_reason) { 1814 sk_drops_add(sk, skb); 1815 reqsk_put(req); 1816 goto discard_it; 1817 } 1818 if (tcp_checksum_complete(skb)) { 1819 reqsk_put(req); 1820 goto csum_error; 1821 } 1822 if (unlikely(sk->sk_state != TCP_LISTEN)) { 1823 nsk = reuseport_migrate_sock(sk, req_to_sk(req), skb); 1824 if (!nsk) { 1825 inet_csk_reqsk_queue_drop_and_put(sk, req); 1826 goto lookup; 1827 } 1828 sk = nsk; 1829 /* reuseport_migrate_sock() has already held one sk_refcnt 1830 * before returning. 1831 */ 1832 } else { 1833 sock_hold(sk); 1834 } 1835 refcounted = true; 1836 nsk = NULL; 1837 if (!tcp_filter(sk, skb)) { 1838 th = (const struct tcphdr *)skb->data; 1839 hdr = ipv6_hdr(skb); 1840 tcp_v6_fill_cb(skb, hdr, th); 1841 nsk = tcp_check_req(sk, skb, req, false, &req_stolen); 1842 } else { 1843 drop_reason = SKB_DROP_REASON_SOCKET_FILTER; 1844 } 1845 if (!nsk) { 1846 reqsk_put(req); 1847 if (req_stolen) { 1848 /* Another cpu got exclusive access to req 1849 * and created a full blown socket. 1850 * Try to feed this packet to this socket 1851 * instead of discarding it. 1852 */ 1853 tcp_v6_restore_cb(skb); 1854 sock_put(sk); 1855 goto lookup; 1856 } 1857 goto discard_and_relse; 1858 } 1859 nf_reset_ct(skb); 1860 if (nsk == sk) { 1861 reqsk_put(req); 1862 tcp_v6_restore_cb(skb); 1863 } else { 1864 drop_reason = tcp_child_process(sk, nsk, skb); 1865 if (drop_reason) { 1866 enum sk_rst_reason rst_reason; 1867 1868 rst_reason = sk_rst_convert_drop_reason(drop_reason); 1869 tcp_v6_send_reset(nsk, skb, rst_reason); 1870 goto discard_and_relse; 1871 } 1872 sock_put(sk); 1873 return 0; 1874 } 1875 } 1876 1877 process: 1878 if (static_branch_unlikely(&ip6_min_hopcount)) { 1879 /* min_hopcount can be changed concurrently from do_ipv6_setsockopt() */ 1880 if (unlikely(hdr->hop_limit < READ_ONCE(tcp_inet6_sk(sk)->min_hopcount))) { 1881 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); 1882 drop_reason = SKB_DROP_REASON_TCP_MINTTL; 1883 goto discard_and_relse; 1884 } 1885 } 1886 1887 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) { 1888 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1889 goto discard_and_relse; 1890 } 1891 1892 drop_reason = tcp_inbound_hash(sk, NULL, skb, &hdr->saddr, &hdr->daddr, 1893 AF_INET6, dif, sdif); 1894 if (drop_reason) 1895 goto discard_and_relse; 1896 1897 nf_reset_ct(skb); 1898 1899 if (tcp_filter(sk, skb)) { 1900 drop_reason = SKB_DROP_REASON_SOCKET_FILTER; 1901 goto discard_and_relse; 1902 } 1903 th = (const struct tcphdr *)skb->data; 1904 hdr = ipv6_hdr(skb); 1905 tcp_v6_fill_cb(skb, hdr, th); 1906 1907 skb->dev = NULL; 1908 1909 if (sk->sk_state == TCP_LISTEN) { 1910 ret = tcp_v6_do_rcv(sk, skb); 1911 goto put_and_return; 1912 } 1913 1914 sk_incoming_cpu_update(sk); 1915 1916 bh_lock_sock_nested(sk); 1917 tcp_segs_in(tcp_sk(sk), skb); 1918 ret = 0; 1919 if (!sock_owned_by_user(sk)) { 1920 ret = tcp_v6_do_rcv(sk, skb); 1921 } else { 1922 if (tcp_add_backlog(sk, skb, &drop_reason)) 1923 goto discard_and_relse; 1924 } 1925 bh_unlock_sock(sk); 1926 put_and_return: 1927 if (refcounted) 1928 sock_put(sk); 1929 return ret ? -1 : 0; 1930 1931 no_tcp_socket: 1932 drop_reason = SKB_DROP_REASON_NO_SOCKET; 1933 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) 1934 goto discard_it; 1935 1936 tcp_v6_fill_cb(skb, hdr, th); 1937 1938 if (tcp_checksum_complete(skb)) { 1939 csum_error: 1940 drop_reason = SKB_DROP_REASON_TCP_CSUM; 1941 trace_tcp_bad_csum(skb); 1942 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS); 1943 bad_packet: 1944 __TCP_INC_STATS(net, TCP_MIB_INERRS); 1945 } else { 1946 tcp_v6_send_reset(NULL, skb, sk_rst_convert_drop_reason(drop_reason)); 1947 } 1948 1949 discard_it: 1950 SKB_DR_OR(drop_reason, NOT_SPECIFIED); 1951 kfree_skb_reason(skb, drop_reason); 1952 return 0; 1953 1954 discard_and_relse: 1955 sk_drops_add(sk, skb); 1956 if (refcounted) 1957 sock_put(sk); 1958 goto discard_it; 1959 1960 do_time_wait: 1961 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { 1962 drop_reason = SKB_DROP_REASON_XFRM_POLICY; 1963 inet_twsk_put(inet_twsk(sk)); 1964 goto discard_it; 1965 } 1966 1967 tcp_v6_fill_cb(skb, hdr, th); 1968 1969 if (tcp_checksum_complete(skb)) { 1970 inet_twsk_put(inet_twsk(sk)); 1971 goto csum_error; 1972 } 1973 1974 switch (tcp_timewait_state_process(inet_twsk(sk), skb, th, &isn)) { 1975 case TCP_TW_SYN: 1976 { 1977 struct sock *sk2; 1978 1979 sk2 = inet6_lookup_listener(net, net->ipv4.tcp_death_row.hashinfo, 1980 skb, __tcp_hdrlen(th), 1981 &ipv6_hdr(skb)->saddr, th->source, 1982 &ipv6_hdr(skb)->daddr, 1983 ntohs(th->dest), 1984 tcp_v6_iif_l3_slave(skb), 1985 sdif); 1986 if (sk2) { 1987 struct inet_timewait_sock *tw = inet_twsk(sk); 1988 inet_twsk_deschedule_put(tw); 1989 sk = sk2; 1990 tcp_v6_restore_cb(skb); 1991 refcounted = false; 1992 __this_cpu_write(tcp_tw_isn, isn); 1993 goto process; 1994 } 1995 } 1996 /* to ACK */ 1997 fallthrough; 1998 case TCP_TW_ACK: 1999 tcp_v6_timewait_ack(sk, skb); 2000 break; 2001 case TCP_TW_RST: 2002 tcp_v6_send_reset(sk, skb, SK_RST_REASON_TCP_TIMEWAIT_SOCKET); 2003 inet_twsk_deschedule_put(inet_twsk(sk)); 2004 goto discard_it; 2005 case TCP_TW_SUCCESS: 2006 ; 2007 } 2008 goto discard_it; 2009 } 2010 2011 void tcp_v6_early_demux(struct sk_buff *skb) 2012 { 2013 struct net *net = dev_net(skb->dev); 2014 const struct ipv6hdr *hdr; 2015 const struct tcphdr *th; 2016 struct sock *sk; 2017 2018 if (skb->pkt_type != PACKET_HOST) 2019 return; 2020 2021 if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr))) 2022 return; 2023 2024 hdr = ipv6_hdr(skb); 2025 th = tcp_hdr(skb); 2026 2027 if (th->doff < sizeof(struct tcphdr) / 4) 2028 return; 2029 2030 /* Note : We use inet6_iif() here, not tcp_v6_iif() */ 2031 sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, 2032 &hdr->saddr, th->source, 2033 &hdr->daddr, ntohs(th->dest), 2034 inet6_iif(skb), inet6_sdif(skb)); 2035 if (sk) { 2036 skb->sk = sk; 2037 skb->destructor = sock_edemux; 2038 if (sk_fullsock(sk)) { 2039 struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst); 2040 2041 if (dst) 2042 dst = dst_check(dst, sk->sk_rx_dst_cookie); 2043 if (dst && 2044 sk->sk_rx_dst_ifindex == skb->skb_iif) 2045 skb_dst_set_noref(skb, dst); 2046 } 2047 } 2048 } 2049 2050 static struct timewait_sock_ops tcp6_timewait_sock_ops = { 2051 .twsk_obj_size = sizeof(struct tcp6_timewait_sock), 2052 .twsk_destructor = tcp_twsk_destructor, 2053 }; 2054 2055 INDIRECT_CALLABLE_SCOPE void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb) 2056 { 2057 __tcp_v6_send_check(skb, &sk->sk_v6_rcv_saddr, &sk->sk_v6_daddr); 2058 } 2059 2060 const struct inet_connection_sock_af_ops ipv6_specific = { 2061 .queue_xmit = inet6_csk_xmit, 2062 .send_check = tcp_v6_send_check, 2063 .rebuild_header = inet6_sk_rebuild_header, 2064 .sk_rx_dst_set = inet6_sk_rx_dst_set, 2065 .conn_request = tcp_v6_conn_request, 2066 .syn_recv_sock = tcp_v6_syn_recv_sock, 2067 .net_header_len = sizeof(struct ipv6hdr), 2068 .setsockopt = ipv6_setsockopt, 2069 .getsockopt = ipv6_getsockopt, 2070 .addr2sockaddr = inet6_csk_addr2sockaddr, 2071 .sockaddr_len = sizeof(struct sockaddr_in6), 2072 .mtu_reduced = tcp_v6_mtu_reduced, 2073 }; 2074 2075 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2076 static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = { 2077 #ifdef CONFIG_TCP_MD5SIG 2078 .md5_lookup = tcp_v6_md5_lookup, 2079 .calc_md5_hash = tcp_v6_md5_hash_skb, 2080 .md5_parse = tcp_v6_parse_md5_keys, 2081 #endif 2082 #ifdef CONFIG_TCP_AO 2083 .ao_lookup = tcp_v6_ao_lookup, 2084 .calc_ao_hash = tcp_v6_ao_hash_skb, 2085 .ao_parse = tcp_v6_parse_ao, 2086 .ao_calc_key_sk = tcp_v6_ao_calc_key_sk, 2087 #endif 2088 }; 2089 #endif 2090 2091 /* 2092 * TCP over IPv4 via INET6 API 2093 */ 2094 static const struct inet_connection_sock_af_ops ipv6_mapped = { 2095 .queue_xmit = ip_queue_xmit, 2096 .send_check = tcp_v4_send_check, 2097 .rebuild_header = inet_sk_rebuild_header, 2098 .sk_rx_dst_set = inet_sk_rx_dst_set, 2099 .conn_request = tcp_v6_conn_request, 2100 .syn_recv_sock = tcp_v6_syn_recv_sock, 2101 .net_header_len = sizeof(struct iphdr), 2102 .setsockopt = ipv6_setsockopt, 2103 .getsockopt = ipv6_getsockopt, 2104 .addr2sockaddr = inet6_csk_addr2sockaddr, 2105 .sockaddr_len = sizeof(struct sockaddr_in6), 2106 .mtu_reduced = tcp_v4_mtu_reduced, 2107 }; 2108 2109 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2110 static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = { 2111 #ifdef CONFIG_TCP_MD5SIG 2112 .md5_lookup = tcp_v4_md5_lookup, 2113 .calc_md5_hash = tcp_v4_md5_hash_skb, 2114 .md5_parse = tcp_v6_parse_md5_keys, 2115 #endif 2116 #ifdef CONFIG_TCP_AO 2117 .ao_lookup = tcp_v6_ao_lookup, 2118 .calc_ao_hash = tcp_v4_ao_hash_skb, 2119 .ao_parse = tcp_v6_parse_ao, 2120 .ao_calc_key_sk = tcp_v4_ao_calc_key_sk, 2121 #endif 2122 }; 2123 #endif 2124 2125 /* NOTE: A lot of things set to zero explicitly by call to 2126 * sk_alloc() so need not be done here. 2127 */ 2128 static int tcp_v6_init_sock(struct sock *sk) 2129 { 2130 struct inet_connection_sock *icsk = inet_csk(sk); 2131 2132 tcp_init_sock(sk); 2133 2134 icsk->icsk_af_ops = &ipv6_specific; 2135 2136 #if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO) 2137 tcp_sk(sk)->af_specific = &tcp_sock_ipv6_specific; 2138 #endif 2139 2140 return 0; 2141 } 2142 2143 #ifdef CONFIG_PROC_FS 2144 /* Proc filesystem TCPv6 sock list dumping. */ 2145 static void get_openreq6(struct seq_file *seq, 2146 const struct request_sock *req, int i) 2147 { 2148 long ttd = req->rsk_timer.expires - jiffies; 2149 const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr; 2150 const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr; 2151 2152 if (ttd < 0) 2153 ttd = 0; 2154 2155 seq_printf(seq, 2156 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2157 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n", 2158 i, 2159 src->s6_addr32[0], src->s6_addr32[1], 2160 src->s6_addr32[2], src->s6_addr32[3], 2161 inet_rsk(req)->ir_num, 2162 dest->s6_addr32[0], dest->s6_addr32[1], 2163 dest->s6_addr32[2], dest->s6_addr32[3], 2164 ntohs(inet_rsk(req)->ir_rmt_port), 2165 TCP_SYN_RECV, 2166 0, 0, /* could print option size, but that is af dependent. */ 2167 1, /* timers active (only the expire timer) */ 2168 jiffies_to_clock_t(ttd), 2169 req->num_timeout, 2170 from_kuid_munged(seq_user_ns(seq), 2171 sock_i_uid(req->rsk_listener)), 2172 0, /* non standard timer */ 2173 0, /* open_requests have no inode */ 2174 0, req); 2175 } 2176 2177 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) 2178 { 2179 const struct in6_addr *dest, *src; 2180 __u16 destp, srcp; 2181 int timer_active; 2182 unsigned long timer_expires; 2183 const struct inet_sock *inet = inet_sk(sp); 2184 const struct tcp_sock *tp = tcp_sk(sp); 2185 const struct inet_connection_sock *icsk = inet_csk(sp); 2186 const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq; 2187 int rx_queue; 2188 int state; 2189 2190 dest = &sp->sk_v6_daddr; 2191 src = &sp->sk_v6_rcv_saddr; 2192 destp = ntohs(inet->inet_dport); 2193 srcp = ntohs(inet->inet_sport); 2194 2195 if (icsk->icsk_pending == ICSK_TIME_RETRANS || 2196 icsk->icsk_pending == ICSK_TIME_REO_TIMEOUT || 2197 icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) { 2198 timer_active = 1; 2199 timer_expires = icsk->icsk_timeout; 2200 } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) { 2201 timer_active = 4; 2202 timer_expires = icsk->icsk_timeout; 2203 } else if (timer_pending(&sp->sk_timer)) { 2204 timer_active = 2; 2205 timer_expires = sp->sk_timer.expires; 2206 } else { 2207 timer_active = 0; 2208 timer_expires = jiffies; 2209 } 2210 2211 state = inet_sk_state_load(sp); 2212 if (state == TCP_LISTEN) 2213 rx_queue = READ_ONCE(sp->sk_ack_backlog); 2214 else 2215 /* Because we don't lock the socket, 2216 * we might find a transient negative value. 2217 */ 2218 rx_queue = max_t(int, READ_ONCE(tp->rcv_nxt) - 2219 READ_ONCE(tp->copied_seq), 0); 2220 2221 seq_printf(seq, 2222 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2223 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n", 2224 i, 2225 src->s6_addr32[0], src->s6_addr32[1], 2226 src->s6_addr32[2], src->s6_addr32[3], srcp, 2227 dest->s6_addr32[0], dest->s6_addr32[1], 2228 dest->s6_addr32[2], dest->s6_addr32[3], destp, 2229 state, 2230 READ_ONCE(tp->write_seq) - tp->snd_una, 2231 rx_queue, 2232 timer_active, 2233 jiffies_delta_to_clock_t(timer_expires - jiffies), 2234 icsk->icsk_retransmits, 2235 from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), 2236 icsk->icsk_probes_out, 2237 sock_i_ino(sp), 2238 refcount_read(&sp->sk_refcnt), sp, 2239 jiffies_to_clock_t(icsk->icsk_rto), 2240 jiffies_to_clock_t(icsk->icsk_ack.ato), 2241 (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sp), 2242 tcp_snd_cwnd(tp), 2243 state == TCP_LISTEN ? 2244 fastopenq->max_qlen : 2245 (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh) 2246 ); 2247 } 2248 2249 static void get_timewait6_sock(struct seq_file *seq, 2250 struct inet_timewait_sock *tw, int i) 2251 { 2252 long delta = tw->tw_timer.expires - jiffies; 2253 const struct in6_addr *dest, *src; 2254 __u16 destp, srcp; 2255 2256 dest = &tw->tw_v6_daddr; 2257 src = &tw->tw_v6_rcv_saddr; 2258 destp = ntohs(tw->tw_dport); 2259 srcp = ntohs(tw->tw_sport); 2260 2261 seq_printf(seq, 2262 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " 2263 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n", 2264 i, 2265 src->s6_addr32[0], src->s6_addr32[1], 2266 src->s6_addr32[2], src->s6_addr32[3], srcp, 2267 dest->s6_addr32[0], dest->s6_addr32[1], 2268 dest->s6_addr32[2], dest->s6_addr32[3], destp, 2269 tw->tw_substate, 0, 0, 2270 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0, 2271 refcount_read(&tw->tw_refcnt), tw); 2272 } 2273 2274 static int tcp6_seq_show(struct seq_file *seq, void *v) 2275 { 2276 struct tcp_iter_state *st; 2277 struct sock *sk = v; 2278 2279 if (v == SEQ_START_TOKEN) { 2280 seq_puts(seq, 2281 " sl " 2282 "local_address " 2283 "remote_address " 2284 "st tx_queue rx_queue tr tm->when retrnsmt" 2285 " uid timeout inode\n"); 2286 goto out; 2287 } 2288 st = seq->private; 2289 2290 if (sk->sk_state == TCP_TIME_WAIT) 2291 get_timewait6_sock(seq, v, st->num); 2292 else if (sk->sk_state == TCP_NEW_SYN_RECV) 2293 get_openreq6(seq, v, st->num); 2294 else 2295 get_tcp6_sock(seq, v, st->num); 2296 out: 2297 return 0; 2298 } 2299 2300 static const struct seq_operations tcp6_seq_ops = { 2301 .show = tcp6_seq_show, 2302 .start = tcp_seq_start, 2303 .next = tcp_seq_next, 2304 .stop = tcp_seq_stop, 2305 }; 2306 2307 static struct tcp_seq_afinfo tcp6_seq_afinfo = { 2308 .family = AF_INET6, 2309 }; 2310 2311 int __net_init tcp6_proc_init(struct net *net) 2312 { 2313 if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops, 2314 sizeof(struct tcp_iter_state), &tcp6_seq_afinfo)) 2315 return -ENOMEM; 2316 return 0; 2317 } 2318 2319 void tcp6_proc_exit(struct net *net) 2320 { 2321 remove_proc_entry("tcp6", net->proc_net); 2322 } 2323 #endif 2324 2325 struct proto tcpv6_prot = { 2326 .name = "TCPv6", 2327 .owner = THIS_MODULE, 2328 .close = tcp_close, 2329 .pre_connect = tcp_v6_pre_connect, 2330 .connect = tcp_v6_connect, 2331 .disconnect = tcp_disconnect, 2332 .accept = inet_csk_accept, 2333 .ioctl = tcp_ioctl, 2334 .init = tcp_v6_init_sock, 2335 .destroy = tcp_v4_destroy_sock, 2336 .shutdown = tcp_shutdown, 2337 .setsockopt = tcp_setsockopt, 2338 .getsockopt = tcp_getsockopt, 2339 .bpf_bypass_getsockopt = tcp_bpf_bypass_getsockopt, 2340 .keepalive = tcp_set_keepalive, 2341 .recvmsg = tcp_recvmsg, 2342 .sendmsg = tcp_sendmsg, 2343 .splice_eof = tcp_splice_eof, 2344 .backlog_rcv = tcp_v6_do_rcv, 2345 .release_cb = tcp_release_cb, 2346 .hash = inet6_hash, 2347 .unhash = inet_unhash, 2348 .get_port = inet_csk_get_port, 2349 .put_port = inet_put_port, 2350 #ifdef CONFIG_BPF_SYSCALL 2351 .psock_update_sk_prot = tcp_bpf_update_proto, 2352 #endif 2353 .enter_memory_pressure = tcp_enter_memory_pressure, 2354 .leave_memory_pressure = tcp_leave_memory_pressure, 2355 .stream_memory_free = tcp_stream_memory_free, 2356 .sockets_allocated = &tcp_sockets_allocated, 2357 2358 .memory_allocated = &tcp_memory_allocated, 2359 .per_cpu_fw_alloc = &tcp_memory_per_cpu_fw_alloc, 2360 2361 .memory_pressure = &tcp_memory_pressure, 2362 .orphan_count = &tcp_orphan_count, 2363 .sysctl_mem = sysctl_tcp_mem, 2364 .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_tcp_wmem), 2365 .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_tcp_rmem), 2366 .max_header = MAX_TCP_HEADER, 2367 .obj_size = sizeof(struct tcp6_sock), 2368 .ipv6_pinfo_offset = offsetof(struct tcp6_sock, inet6), 2369 .slab_flags = SLAB_TYPESAFE_BY_RCU, 2370 .twsk_prot = &tcp6_timewait_sock_ops, 2371 .rsk_prot = &tcp6_request_sock_ops, 2372 .h.hashinfo = NULL, 2373 .no_autobind = true, 2374 .diag_destroy = tcp_abort, 2375 }; 2376 EXPORT_SYMBOL_GPL(tcpv6_prot); 2377 2378 2379 static struct inet_protosw tcpv6_protosw = { 2380 .type = SOCK_STREAM, 2381 .protocol = IPPROTO_TCP, 2382 .prot = &tcpv6_prot, 2383 .ops = &inet6_stream_ops, 2384 .flags = INET_PROTOSW_PERMANENT | 2385 INET_PROTOSW_ICSK, 2386 }; 2387 2388 static int __net_init tcpv6_net_init(struct net *net) 2389 { 2390 return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6, 2391 SOCK_RAW, IPPROTO_TCP, net); 2392 } 2393 2394 static void __net_exit tcpv6_net_exit(struct net *net) 2395 { 2396 inet_ctl_sock_destroy(net->ipv6.tcp_sk); 2397 } 2398 2399 static struct pernet_operations tcpv6_net_ops = { 2400 .init = tcpv6_net_init, 2401 .exit = tcpv6_net_exit, 2402 }; 2403 2404 int __init tcpv6_init(void) 2405 { 2406 int ret; 2407 2408 net_hotdata.tcpv6_protocol = (struct inet6_protocol) { 2409 .handler = tcp_v6_rcv, 2410 .err_handler = tcp_v6_err, 2411 .flags = INET6_PROTO_NOPOLICY | INET6_PROTO_FINAL, 2412 }; 2413 ret = inet6_add_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2414 if (ret) 2415 goto out; 2416 2417 /* register inet6 protocol */ 2418 ret = inet6_register_protosw(&tcpv6_protosw); 2419 if (ret) 2420 goto out_tcpv6_protocol; 2421 2422 ret = register_pernet_subsys(&tcpv6_net_ops); 2423 if (ret) 2424 goto out_tcpv6_protosw; 2425 2426 ret = mptcpv6_init(); 2427 if (ret) 2428 goto out_tcpv6_pernet_subsys; 2429 2430 out: 2431 return ret; 2432 2433 out_tcpv6_pernet_subsys: 2434 unregister_pernet_subsys(&tcpv6_net_ops); 2435 out_tcpv6_protosw: 2436 inet6_unregister_protosw(&tcpv6_protosw); 2437 out_tcpv6_protocol: 2438 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2439 goto out; 2440 } 2441 2442 void tcpv6_exit(void) 2443 { 2444 unregister_pernet_subsys(&tcpv6_net_ops); 2445 inet6_unregister_protosw(&tcpv6_protosw); 2446 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP); 2447 } 2448