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