1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2018 Chelsio Communications, Inc. 4 * 5 * Written by: Atul Gupta (atul.gupta@chelsio.com) 6 */ 7 8 #include <linux/module.h> 9 #include <linux/list.h> 10 #include <linux/workqueue.h> 11 #include <linux/skbuff.h> 12 #include <linux/timer.h> 13 #include <linux/notifier.h> 14 #include <linux/inetdevice.h> 15 #include <linux/ip.h> 16 #include <linux/tcp.h> 17 #include <linux/sched/signal.h> 18 #include <linux/kallsyms.h> 19 #include <linux/kprobes.h> 20 #include <linux/if_vlan.h> 21 #include <linux/ipv6.h> 22 #include <net/ipv6.h> 23 #include <net/transp_v6.h> 24 #include <net/ip6_route.h> 25 #include <net/inet_common.h> 26 #include <net/tcp.h> 27 #include <net/dst.h> 28 #include <net/tls.h> 29 #include <net/addrconf.h> 30 #include <net/secure_seq.h> 31 32 #include "chtls.h" 33 #include "chtls_cm.h" 34 #include "clip_tbl.h" 35 36 /* 37 * State transitions and actions for close. Note that if we are in SYN_SENT 38 * we remain in that state as we cannot control a connection while it's in 39 * SYN_SENT; such connections are allowed to establish and are then aborted. 40 */ 41 static unsigned char new_state[16] = { 42 /* current state: new state: action: */ 43 /* (Invalid) */ TCP_CLOSE, 44 /* TCP_ESTABLISHED */ TCP_FIN_WAIT1 | TCP_ACTION_FIN, 45 /* TCP_SYN_SENT */ TCP_SYN_SENT, 46 /* TCP_SYN_RECV */ TCP_FIN_WAIT1 | TCP_ACTION_FIN, 47 /* TCP_FIN_WAIT1 */ TCP_FIN_WAIT1, 48 /* TCP_FIN_WAIT2 */ TCP_FIN_WAIT2, 49 /* TCP_TIME_WAIT */ TCP_CLOSE, 50 /* TCP_CLOSE */ TCP_CLOSE, 51 /* TCP_CLOSE_WAIT */ TCP_LAST_ACK | TCP_ACTION_FIN, 52 /* TCP_LAST_ACK */ TCP_LAST_ACK, 53 /* TCP_LISTEN */ TCP_CLOSE, 54 /* TCP_CLOSING */ TCP_CLOSING, 55 }; 56 57 static struct chtls_sock *chtls_sock_create(struct chtls_dev *cdev) 58 { 59 struct chtls_sock *csk = kzalloc(sizeof(*csk), GFP_ATOMIC); 60 61 if (!csk) 62 return NULL; 63 64 csk->txdata_skb_cache = alloc_skb(TXDATA_SKB_LEN, GFP_ATOMIC); 65 if (!csk->txdata_skb_cache) { 66 kfree(csk); 67 return NULL; 68 } 69 70 kref_init(&csk->kref); 71 csk->cdev = cdev; 72 skb_queue_head_init(&csk->txq); 73 csk->wr_skb_head = NULL; 74 csk->wr_skb_tail = NULL; 75 csk->mss = MAX_MSS; 76 csk->tlshws.ofld = 1; 77 csk->tlshws.txkey = -1; 78 csk->tlshws.rxkey = -1; 79 csk->tlshws.mfs = TLS_MFS; 80 skb_queue_head_init(&csk->tlshws.sk_recv_queue); 81 return csk; 82 } 83 84 static void chtls_sock_release(struct kref *ref) 85 { 86 struct chtls_sock *csk = 87 container_of(ref, struct chtls_sock, kref); 88 89 kfree(csk); 90 } 91 92 static struct net_device *chtls_find_netdev(struct chtls_dev *cdev, 93 struct sock *sk) 94 { 95 struct adapter *adap = pci_get_drvdata(cdev->pdev); 96 struct net_device *ndev = cdev->ports[0]; 97 #if IS_ENABLED(CONFIG_IPV6) 98 struct net_device *temp; 99 int addr_type; 100 #endif 101 int i; 102 103 switch (sk->sk_family) { 104 case PF_INET: 105 if (likely(!inet_sk(sk)->inet_rcv_saddr)) 106 return ndev; 107 ndev = __ip_dev_find(&init_net, inet_sk(sk)->inet_rcv_saddr, false); 108 break; 109 #if IS_ENABLED(CONFIG_IPV6) 110 case PF_INET6: 111 addr_type = ipv6_addr_type(&sk->sk_v6_rcv_saddr); 112 if (likely(addr_type == IPV6_ADDR_ANY)) 113 return ndev; 114 115 for_each_netdev_rcu(&init_net, temp) { 116 if (ipv6_chk_addr(&init_net, (struct in6_addr *) 117 &sk->sk_v6_rcv_saddr, temp, 1)) { 118 ndev = temp; 119 break; 120 } 121 } 122 break; 123 #endif 124 default: 125 return NULL; 126 } 127 128 if (!ndev) 129 return NULL; 130 131 if (is_vlan_dev(ndev)) 132 ndev = vlan_dev_real_dev(ndev); 133 134 for_each_port(adap, i) 135 if (cdev->ports[i] == ndev) 136 return ndev; 137 return NULL; 138 } 139 140 static void assign_rxopt(struct sock *sk, unsigned int opt) 141 { 142 const struct chtls_dev *cdev; 143 struct chtls_sock *csk; 144 struct tcp_sock *tp; 145 146 csk = rcu_dereference_sk_user_data(sk); 147 tp = tcp_sk(sk); 148 149 cdev = csk->cdev; 150 tp->tcp_header_len = sizeof(struct tcphdr); 151 tp->rx_opt.mss_clamp = cdev->mtus[TCPOPT_MSS_G(opt)] - 40; 152 tp->mss_cache = tp->rx_opt.mss_clamp; 153 tp->rx_opt.tstamp_ok = TCPOPT_TSTAMP_G(opt); 154 tp->rx_opt.snd_wscale = TCPOPT_SACK_G(opt); 155 tp->rx_opt.wscale_ok = TCPOPT_WSCALE_OK_G(opt); 156 SND_WSCALE(tp) = TCPOPT_SND_WSCALE_G(opt); 157 if (!tp->rx_opt.wscale_ok) 158 tp->rx_opt.rcv_wscale = 0; 159 if (tp->rx_opt.tstamp_ok) { 160 tp->tcp_header_len += TCPOLEN_TSTAMP_ALIGNED; 161 tp->rx_opt.mss_clamp -= TCPOLEN_TSTAMP_ALIGNED; 162 } else if (csk->opt2 & TSTAMPS_EN_F) { 163 csk->opt2 &= ~TSTAMPS_EN_F; 164 csk->mtu_idx = TCPOPT_MSS_G(opt); 165 } 166 } 167 168 static void chtls_purge_receive_queue(struct sock *sk) 169 { 170 struct sk_buff *skb; 171 172 while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) { 173 skb_dst_set(skb, (void *)NULL); 174 kfree_skb(skb); 175 } 176 } 177 178 static void chtls_purge_write_queue(struct sock *sk) 179 { 180 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 181 struct sk_buff *skb; 182 183 while ((skb = __skb_dequeue(&csk->txq))) { 184 sk->sk_wmem_queued -= skb->truesize; 185 __kfree_skb(skb); 186 } 187 } 188 189 static void chtls_purge_recv_queue(struct sock *sk) 190 { 191 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 192 struct chtls_hws *tlsk = &csk->tlshws; 193 struct sk_buff *skb; 194 195 while ((skb = __skb_dequeue(&tlsk->sk_recv_queue)) != NULL) { 196 skb_dst_set(skb, NULL); 197 kfree_skb(skb); 198 } 199 } 200 201 static void abort_arp_failure(void *handle, struct sk_buff *skb) 202 { 203 struct cpl_abort_req *req = cplhdr(skb); 204 struct chtls_dev *cdev; 205 206 cdev = (struct chtls_dev *)handle; 207 req->cmd = CPL_ABORT_NO_RST; 208 cxgb4_ofld_send(cdev->lldi->ports[0], skb); 209 } 210 211 static struct sk_buff *alloc_ctrl_skb(struct sk_buff *skb, int len) 212 { 213 if (likely(skb && !skb_shared(skb) && !skb_cloned(skb))) { 214 __skb_trim(skb, 0); 215 refcount_add(2, &skb->users); 216 } else { 217 skb = alloc_skb(len, GFP_KERNEL | __GFP_NOFAIL); 218 } 219 return skb; 220 } 221 222 static void chtls_send_abort(struct sock *sk, int mode, struct sk_buff *skb) 223 { 224 struct cpl_abort_req *req; 225 struct chtls_sock *csk; 226 struct tcp_sock *tp; 227 228 csk = rcu_dereference_sk_user_data(sk); 229 tp = tcp_sk(sk); 230 231 if (!skb) 232 skb = alloc_ctrl_skb(csk->txdata_skb_cache, sizeof(*req)); 233 234 req = (struct cpl_abort_req *)skb_put(skb, sizeof(*req)); 235 INIT_TP_WR_CPL(req, CPL_ABORT_REQ, csk->tid); 236 skb_set_queue_mapping(skb, (csk->txq_idx << 1) | CPL_PRIORITY_DATA); 237 req->rsvd0 = htonl(tp->snd_nxt); 238 req->rsvd1 = !csk_flag_nochk(csk, CSK_TX_DATA_SENT); 239 req->cmd = mode; 240 t4_set_arp_err_handler(skb, csk->cdev, abort_arp_failure); 241 send_or_defer(sk, tp, skb, mode == CPL_ABORT_SEND_RST); 242 } 243 244 static void chtls_send_reset(struct sock *sk, int mode, struct sk_buff *skb) 245 { 246 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 247 248 if (unlikely(csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN) || 249 !csk->cdev)) { 250 if (sk->sk_state == TCP_SYN_RECV) 251 csk_set_flag(csk, CSK_RST_ABORTED); 252 goto out; 253 } 254 255 if (!csk_flag_nochk(csk, CSK_TX_DATA_SENT)) { 256 struct tcp_sock *tp = tcp_sk(sk); 257 258 if (send_tx_flowc_wr(sk, 0, tp->snd_nxt, tp->rcv_nxt) < 0) 259 WARN_ONCE(1, "send tx flowc error"); 260 csk_set_flag(csk, CSK_TX_DATA_SENT); 261 } 262 263 csk_set_flag(csk, CSK_ABORT_RPL_PENDING); 264 chtls_purge_write_queue(sk); 265 266 csk_set_flag(csk, CSK_ABORT_SHUTDOWN); 267 if (sk->sk_state != TCP_SYN_RECV) 268 chtls_send_abort(sk, mode, skb); 269 else 270 goto out; 271 272 return; 273 out: 274 kfree_skb(skb); 275 } 276 277 static void release_tcp_port(struct sock *sk) 278 { 279 if (inet_csk(sk)->icsk_bind_hash) 280 inet_put_port(sk); 281 } 282 283 static void tcp_uncork(struct sock *sk) 284 { 285 struct tcp_sock *tp = tcp_sk(sk); 286 287 if (tp->nonagle & TCP_NAGLE_CORK) { 288 tp->nonagle &= ~TCP_NAGLE_CORK; 289 chtls_tcp_push(sk, 0); 290 } 291 } 292 293 static void chtls_close_conn(struct sock *sk) 294 { 295 struct cpl_close_con_req *req; 296 struct chtls_sock *csk; 297 struct sk_buff *skb; 298 unsigned int tid; 299 unsigned int len; 300 301 len = roundup(sizeof(struct cpl_close_con_req), 16); 302 csk = rcu_dereference_sk_user_data(sk); 303 tid = csk->tid; 304 305 skb = alloc_skb(len, GFP_KERNEL | __GFP_NOFAIL); 306 req = (struct cpl_close_con_req *)__skb_put(skb, len); 307 memset(req, 0, len); 308 req->wr.wr_hi = htonl(FW_WR_OP_V(FW_TP_WR) | 309 FW_WR_IMMDLEN_V(sizeof(*req) - 310 sizeof(req->wr))); 311 req->wr.wr_mid = htonl(FW_WR_LEN16_V(DIV_ROUND_UP(sizeof(*req), 16)) | 312 FW_WR_FLOWID_V(tid)); 313 314 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_CON_REQ, tid)); 315 316 tcp_uncork(sk); 317 skb_entail(sk, skb, ULPCB_FLAG_NO_HDR | ULPCB_FLAG_NO_APPEND); 318 if (sk->sk_state != TCP_SYN_SENT) 319 chtls_push_frames(csk, 1); 320 } 321 322 /* 323 * Perform a state transition during close and return the actions indicated 324 * for the transition. Do not make this function inline, the main reason 325 * it exists at all is to avoid multiple inlining of tcp_set_state. 326 */ 327 static int make_close_transition(struct sock *sk) 328 { 329 int next = (int)new_state[sk->sk_state]; 330 331 tcp_set_state(sk, next & TCP_STATE_MASK); 332 return next & TCP_ACTION_FIN; 333 } 334 335 void chtls_close(struct sock *sk, long timeout) 336 { 337 int data_lost, prev_state; 338 struct chtls_sock *csk; 339 340 csk = rcu_dereference_sk_user_data(sk); 341 342 lock_sock(sk); 343 sk->sk_shutdown |= SHUTDOWN_MASK; 344 345 data_lost = skb_queue_len(&sk->sk_receive_queue); 346 data_lost |= skb_queue_len(&csk->tlshws.sk_recv_queue); 347 chtls_purge_recv_queue(sk); 348 chtls_purge_receive_queue(sk); 349 350 if (sk->sk_state == TCP_CLOSE) { 351 goto wait; 352 } else if (data_lost || sk->sk_state == TCP_SYN_SENT) { 353 chtls_send_reset(sk, CPL_ABORT_SEND_RST, NULL); 354 release_tcp_port(sk); 355 goto unlock; 356 } else if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime) { 357 sk->sk_prot->disconnect(sk, 0); 358 } else if (make_close_transition(sk)) { 359 chtls_close_conn(sk); 360 } 361 wait: 362 if (timeout) 363 sk_stream_wait_close(sk, timeout); 364 365 unlock: 366 prev_state = sk->sk_state; 367 sock_hold(sk); 368 sock_orphan(sk); 369 370 release_sock(sk); 371 372 local_bh_disable(); 373 bh_lock_sock(sk); 374 375 if (prev_state != TCP_CLOSE && sk->sk_state == TCP_CLOSE) 376 goto out; 377 378 if (sk->sk_state == TCP_FIN_WAIT2 && tcp_sk(sk)->linger2 < 0 && 379 !csk_flag(sk, CSK_ABORT_SHUTDOWN)) { 380 struct sk_buff *skb; 381 382 skb = alloc_skb(sizeof(struct cpl_abort_req), GFP_ATOMIC); 383 if (skb) 384 chtls_send_reset(sk, CPL_ABORT_SEND_RST, skb); 385 } 386 387 if (sk->sk_state == TCP_CLOSE) 388 inet_csk_destroy_sock(sk); 389 390 out: 391 bh_unlock_sock(sk); 392 local_bh_enable(); 393 sock_put(sk); 394 } 395 396 /* 397 * Wait until a socket enters on of the given states. 398 */ 399 static int wait_for_states(struct sock *sk, unsigned int states) 400 { 401 DECLARE_WAITQUEUE(wait, current); 402 struct socket_wq _sk_wq; 403 long current_timeo; 404 int err = 0; 405 406 current_timeo = 200; 407 408 /* 409 * We want this to work even when there's no associated struct socket. 410 * In that case we provide a temporary wait_queue_head_t. 411 */ 412 if (!sk->sk_wq) { 413 init_waitqueue_head(&_sk_wq.wait); 414 _sk_wq.fasync_list = NULL; 415 init_rcu_head_on_stack(&_sk_wq.rcu); 416 RCU_INIT_POINTER(sk->sk_wq, &_sk_wq); 417 } 418 419 add_wait_queue(sk_sleep(sk), &wait); 420 while (!sk_in_state(sk, states)) { 421 if (!current_timeo) { 422 err = -EBUSY; 423 break; 424 } 425 if (signal_pending(current)) { 426 err = sock_intr_errno(current_timeo); 427 break; 428 } 429 set_current_state(TASK_UNINTERRUPTIBLE); 430 release_sock(sk); 431 if (!sk_in_state(sk, states)) 432 current_timeo = schedule_timeout(current_timeo); 433 __set_current_state(TASK_RUNNING); 434 lock_sock(sk); 435 } 436 remove_wait_queue(sk_sleep(sk), &wait); 437 438 if (rcu_dereference(sk->sk_wq) == &_sk_wq) 439 sk->sk_wq = NULL; 440 return err; 441 } 442 443 int chtls_disconnect(struct sock *sk, int flags) 444 { 445 struct tcp_sock *tp; 446 int err; 447 448 tp = tcp_sk(sk); 449 chtls_purge_recv_queue(sk); 450 chtls_purge_receive_queue(sk); 451 chtls_purge_write_queue(sk); 452 453 if (sk->sk_state != TCP_CLOSE) { 454 sk->sk_err = ECONNRESET; 455 chtls_send_reset(sk, CPL_ABORT_SEND_RST, NULL); 456 err = wait_for_states(sk, TCPF_CLOSE); 457 if (err) 458 return err; 459 } 460 chtls_purge_recv_queue(sk); 461 chtls_purge_receive_queue(sk); 462 tp->max_window = 0xFFFF << (tp->rx_opt.snd_wscale); 463 return tcp_disconnect(sk, flags); 464 } 465 466 #define SHUTDOWN_ELIGIBLE_STATE (TCPF_ESTABLISHED | \ 467 TCPF_SYN_RECV | TCPF_CLOSE_WAIT) 468 void chtls_shutdown(struct sock *sk, int how) 469 { 470 if ((how & SEND_SHUTDOWN) && 471 sk_in_state(sk, SHUTDOWN_ELIGIBLE_STATE) && 472 make_close_transition(sk)) 473 chtls_close_conn(sk); 474 } 475 476 void chtls_destroy_sock(struct sock *sk) 477 { 478 struct chtls_sock *csk; 479 480 csk = rcu_dereference_sk_user_data(sk); 481 chtls_purge_recv_queue(sk); 482 csk->ulp_mode = ULP_MODE_NONE; 483 chtls_purge_write_queue(sk); 484 free_tls_keyid(sk); 485 kref_put(&csk->kref, chtls_sock_release); 486 if (sk->sk_family == AF_INET) 487 sk->sk_prot = &tcp_prot; 488 #if IS_ENABLED(CONFIG_IPV6) 489 else 490 sk->sk_prot = &tcpv6_prot; 491 #endif 492 sk->sk_prot->destroy(sk); 493 } 494 495 static void reset_listen_child(struct sock *child) 496 { 497 struct chtls_sock *csk = rcu_dereference_sk_user_data(child); 498 struct sk_buff *skb; 499 500 skb = alloc_ctrl_skb(csk->txdata_skb_cache, 501 sizeof(struct cpl_abort_req)); 502 503 chtls_send_reset(child, CPL_ABORT_SEND_RST, skb); 504 sock_orphan(child); 505 INC_ORPHAN_COUNT(child); 506 if (child->sk_state == TCP_CLOSE) 507 inet_csk_destroy_sock(child); 508 } 509 510 static void chtls_disconnect_acceptq(struct sock *listen_sk) 511 { 512 struct request_sock **pprev; 513 514 pprev = ACCEPT_QUEUE(listen_sk); 515 while (*pprev) { 516 struct request_sock *req = *pprev; 517 518 if (req->rsk_ops == &chtls_rsk_ops || 519 req->rsk_ops == &chtls_rsk_opsv6) { 520 struct sock *child = req->sk; 521 522 *pprev = req->dl_next; 523 sk_acceptq_removed(listen_sk); 524 reqsk_put(req); 525 sock_hold(child); 526 local_bh_disable(); 527 bh_lock_sock(child); 528 release_tcp_port(child); 529 reset_listen_child(child); 530 bh_unlock_sock(child); 531 local_bh_enable(); 532 sock_put(child); 533 } else { 534 pprev = &req->dl_next; 535 } 536 } 537 } 538 539 static int listen_hashfn(const struct sock *sk) 540 { 541 return ((unsigned long)sk >> 10) & (LISTEN_INFO_HASH_SIZE - 1); 542 } 543 544 static struct listen_info *listen_hash_add(struct chtls_dev *cdev, 545 struct sock *sk, 546 unsigned int stid) 547 { 548 struct listen_info *p = kmalloc(sizeof(*p), GFP_KERNEL); 549 550 if (p) { 551 int key = listen_hashfn(sk); 552 553 p->sk = sk; 554 p->stid = stid; 555 spin_lock(&cdev->listen_lock); 556 p->next = cdev->listen_hash_tab[key]; 557 cdev->listen_hash_tab[key] = p; 558 spin_unlock(&cdev->listen_lock); 559 } 560 return p; 561 } 562 563 static int listen_hash_find(struct chtls_dev *cdev, 564 struct sock *sk) 565 { 566 struct listen_info *p; 567 int stid = -1; 568 int key; 569 570 key = listen_hashfn(sk); 571 572 spin_lock(&cdev->listen_lock); 573 for (p = cdev->listen_hash_tab[key]; p; p = p->next) 574 if (p->sk == sk) { 575 stid = p->stid; 576 break; 577 } 578 spin_unlock(&cdev->listen_lock); 579 return stid; 580 } 581 582 static int listen_hash_del(struct chtls_dev *cdev, 583 struct sock *sk) 584 { 585 struct listen_info *p, **prev; 586 int stid = -1; 587 int key; 588 589 key = listen_hashfn(sk); 590 prev = &cdev->listen_hash_tab[key]; 591 592 spin_lock(&cdev->listen_lock); 593 for (p = *prev; p; prev = &p->next, p = p->next) 594 if (p->sk == sk) { 595 stid = p->stid; 596 *prev = p->next; 597 kfree(p); 598 break; 599 } 600 spin_unlock(&cdev->listen_lock); 601 return stid; 602 } 603 604 static void cleanup_syn_rcv_conn(struct sock *child, struct sock *parent) 605 { 606 struct request_sock *req; 607 struct chtls_sock *csk; 608 609 csk = rcu_dereference_sk_user_data(child); 610 req = csk->passive_reap_next; 611 612 reqsk_queue_removed(&inet_csk(parent)->icsk_accept_queue, req); 613 __skb_unlink((struct sk_buff *)&csk->synq, &csk->listen_ctx->synq); 614 chtls_reqsk_free(req); 615 csk->passive_reap_next = NULL; 616 } 617 618 static void chtls_reset_synq(struct listen_ctx *listen_ctx) 619 { 620 struct sock *listen_sk = listen_ctx->lsk; 621 622 while (!skb_queue_empty(&listen_ctx->synq)) { 623 struct chtls_sock *csk = 624 container_of((struct synq *)__skb_dequeue 625 (&listen_ctx->synq), struct chtls_sock, synq); 626 struct sock *child = csk->sk; 627 628 cleanup_syn_rcv_conn(child, listen_sk); 629 sock_hold(child); 630 local_bh_disable(); 631 bh_lock_sock(child); 632 release_tcp_port(child); 633 reset_listen_child(child); 634 bh_unlock_sock(child); 635 local_bh_enable(); 636 sock_put(child); 637 } 638 } 639 640 int chtls_listen_start(struct chtls_dev *cdev, struct sock *sk) 641 { 642 struct net_device *ndev; 643 #if IS_ENABLED(CONFIG_IPV6) 644 bool clip_valid = false; 645 #endif 646 struct listen_ctx *ctx; 647 struct adapter *adap; 648 struct port_info *pi; 649 int ret = 0; 650 int stid; 651 652 rcu_read_lock(); 653 ndev = chtls_find_netdev(cdev, sk); 654 rcu_read_unlock(); 655 if (!ndev) 656 return -EBADF; 657 658 pi = netdev_priv(ndev); 659 adap = pi->adapter; 660 if (!(adap->flags & CXGB4_FULL_INIT_DONE)) 661 return -EBADF; 662 663 if (listen_hash_find(cdev, sk) >= 0) /* already have it */ 664 return -EADDRINUSE; 665 666 ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); 667 if (!ctx) 668 return -ENOMEM; 669 670 __module_get(THIS_MODULE); 671 ctx->lsk = sk; 672 ctx->cdev = cdev; 673 ctx->state = T4_LISTEN_START_PENDING; 674 skb_queue_head_init(&ctx->synq); 675 676 stid = cxgb4_alloc_stid(cdev->tids, sk->sk_family, ctx); 677 if (stid < 0) 678 goto free_ctx; 679 680 sock_hold(sk); 681 if (!listen_hash_add(cdev, sk, stid)) 682 goto free_stid; 683 684 if (sk->sk_family == PF_INET) { 685 ret = cxgb4_create_server(ndev, stid, 686 inet_sk(sk)->inet_rcv_saddr, 687 inet_sk(sk)->inet_sport, 0, 688 cdev->lldi->rxq_ids[0]); 689 #if IS_ENABLED(CONFIG_IPV6) 690 } else { 691 int addr_type; 692 693 addr_type = ipv6_addr_type(&sk->sk_v6_rcv_saddr); 694 if (addr_type != IPV6_ADDR_ANY) { 695 ret = cxgb4_clip_get(ndev, (const u32 *) 696 &sk->sk_v6_rcv_saddr, 1); 697 if (ret) 698 goto del_hash; 699 clip_valid = true; 700 } 701 ret = cxgb4_create_server6(ndev, stid, 702 &sk->sk_v6_rcv_saddr, 703 inet_sk(sk)->inet_sport, 704 cdev->lldi->rxq_ids[0]); 705 #endif 706 } 707 if (ret > 0) 708 ret = net_xmit_errno(ret); 709 if (ret) 710 goto del_hash; 711 return 0; 712 del_hash: 713 #if IS_ENABLED(CONFIG_IPV6) 714 if (clip_valid) 715 cxgb4_clip_release(ndev, (const u32 *)&sk->sk_v6_rcv_saddr, 1); 716 #endif 717 listen_hash_del(cdev, sk); 718 free_stid: 719 cxgb4_free_stid(cdev->tids, stid, sk->sk_family); 720 sock_put(sk); 721 free_ctx: 722 kfree(ctx); 723 module_put(THIS_MODULE); 724 return -EBADF; 725 } 726 727 void chtls_listen_stop(struct chtls_dev *cdev, struct sock *sk) 728 { 729 struct listen_ctx *listen_ctx; 730 int stid; 731 732 stid = listen_hash_del(cdev, sk); 733 if (stid < 0) 734 return; 735 736 listen_ctx = (struct listen_ctx *)lookup_stid(cdev->tids, stid); 737 chtls_reset_synq(listen_ctx); 738 739 cxgb4_remove_server(cdev->lldi->ports[0], stid, 740 cdev->lldi->rxq_ids[0], sk->sk_family == PF_INET6); 741 742 #if IS_ENABLED(CONFIG_IPV6) 743 if (sk->sk_family == PF_INET6) { 744 struct net_device *ndev = chtls_find_netdev(cdev, sk); 745 int addr_type = 0; 746 747 addr_type = ipv6_addr_type((const struct in6_addr *) 748 &sk->sk_v6_rcv_saddr); 749 if (addr_type != IPV6_ADDR_ANY) 750 cxgb4_clip_release(ndev, (const u32 *) 751 &sk->sk_v6_rcv_saddr, 1); 752 } 753 #endif 754 chtls_disconnect_acceptq(sk); 755 } 756 757 static int chtls_pass_open_rpl(struct chtls_dev *cdev, struct sk_buff *skb) 758 { 759 struct cpl_pass_open_rpl *rpl = cplhdr(skb) + RSS_HDR; 760 unsigned int stid = GET_TID(rpl); 761 struct listen_ctx *listen_ctx; 762 763 listen_ctx = (struct listen_ctx *)lookup_stid(cdev->tids, stid); 764 if (!listen_ctx) 765 return CPL_RET_BUF_DONE; 766 767 if (listen_ctx->state == T4_LISTEN_START_PENDING) { 768 listen_ctx->state = T4_LISTEN_STARTED; 769 return CPL_RET_BUF_DONE; 770 } 771 772 if (rpl->status != CPL_ERR_NONE) { 773 pr_info("Unexpected PASS_OPEN_RPL status %u for STID %u\n", 774 rpl->status, stid); 775 return CPL_RET_BUF_DONE; 776 } 777 cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family); 778 sock_put(listen_ctx->lsk); 779 kfree(listen_ctx); 780 module_put(THIS_MODULE); 781 782 return 0; 783 } 784 785 static int chtls_close_listsrv_rpl(struct chtls_dev *cdev, struct sk_buff *skb) 786 { 787 struct cpl_close_listsvr_rpl *rpl = cplhdr(skb) + RSS_HDR; 788 struct listen_ctx *listen_ctx; 789 unsigned int stid; 790 void *data; 791 792 stid = GET_TID(rpl); 793 data = lookup_stid(cdev->tids, stid); 794 listen_ctx = (struct listen_ctx *)data; 795 796 if (rpl->status != CPL_ERR_NONE) { 797 pr_info("Unexpected CLOSE_LISTSRV_RPL status %u for STID %u\n", 798 rpl->status, stid); 799 return CPL_RET_BUF_DONE; 800 } 801 802 cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family); 803 sock_put(listen_ctx->lsk); 804 kfree(listen_ctx); 805 module_put(THIS_MODULE); 806 807 return 0; 808 } 809 810 static void chtls_purge_wr_queue(struct sock *sk) 811 { 812 struct sk_buff *skb; 813 814 while ((skb = dequeue_wr(sk)) != NULL) 815 kfree_skb(skb); 816 } 817 818 static void chtls_release_resources(struct sock *sk) 819 { 820 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 821 struct chtls_dev *cdev = csk->cdev; 822 unsigned int tid = csk->tid; 823 struct tid_info *tids; 824 825 if (!cdev) 826 return; 827 828 tids = cdev->tids; 829 kfree_skb(csk->txdata_skb_cache); 830 csk->txdata_skb_cache = NULL; 831 832 if (csk->wr_credits != csk->wr_max_credits) { 833 chtls_purge_wr_queue(sk); 834 chtls_reset_wr_list(csk); 835 } 836 837 if (csk->l2t_entry) { 838 cxgb4_l2t_release(csk->l2t_entry); 839 csk->l2t_entry = NULL; 840 } 841 842 if (sk->sk_state != TCP_SYN_SENT) { 843 cxgb4_remove_tid(tids, csk->port_id, tid, sk->sk_family); 844 sock_put(sk); 845 } 846 } 847 848 static void chtls_conn_done(struct sock *sk) 849 { 850 if (sock_flag(sk, SOCK_DEAD)) 851 chtls_purge_receive_queue(sk); 852 sk_wakeup_sleepers(sk, 0); 853 tcp_done(sk); 854 } 855 856 static void do_abort_syn_rcv(struct sock *child, struct sock *parent) 857 { 858 /* 859 * If the server is still open we clean up the child connection, 860 * otherwise the server already did the clean up as it was purging 861 * its SYN queue and the skb was just sitting in its backlog. 862 */ 863 if (likely(parent->sk_state == TCP_LISTEN)) { 864 cleanup_syn_rcv_conn(child, parent); 865 /* Without the below call to sock_orphan, 866 * we leak the socket resource with syn_flood test 867 * as inet_csk_destroy_sock will not be called 868 * in tcp_done since SOCK_DEAD flag is not set. 869 * Kernel handles this differently where new socket is 870 * created only after 3 way handshake is done. 871 */ 872 sock_orphan(child); 873 percpu_counter_inc((child)->sk_prot->orphan_count); 874 chtls_release_resources(child); 875 chtls_conn_done(child); 876 } else { 877 if (csk_flag(child, CSK_RST_ABORTED)) { 878 chtls_release_resources(child); 879 chtls_conn_done(child); 880 } 881 } 882 } 883 884 static void pass_open_abort(struct sock *child, struct sock *parent, 885 struct sk_buff *skb) 886 { 887 do_abort_syn_rcv(child, parent); 888 kfree_skb(skb); 889 } 890 891 static void bl_pass_open_abort(struct sock *lsk, struct sk_buff *skb) 892 { 893 pass_open_abort(skb->sk, lsk, skb); 894 } 895 896 static void chtls_pass_open_arp_failure(struct sock *sk, 897 struct sk_buff *skb) 898 { 899 const struct request_sock *oreq; 900 struct chtls_sock *csk; 901 struct chtls_dev *cdev; 902 struct sock *parent; 903 void *data; 904 905 csk = rcu_dereference_sk_user_data(sk); 906 cdev = csk->cdev; 907 908 /* 909 * If the connection is being aborted due to the parent listening 910 * socket going away there's nothing to do, the ABORT_REQ will close 911 * the connection. 912 */ 913 if (csk_flag(sk, CSK_ABORT_RPL_PENDING)) { 914 kfree_skb(skb); 915 return; 916 } 917 918 oreq = csk->passive_reap_next; 919 data = lookup_stid(cdev->tids, oreq->ts_recent); 920 parent = ((struct listen_ctx *)data)->lsk; 921 922 bh_lock_sock(parent); 923 if (!sock_owned_by_user(parent)) { 924 pass_open_abort(sk, parent, skb); 925 } else { 926 BLOG_SKB_CB(skb)->backlog_rcv = bl_pass_open_abort; 927 __sk_add_backlog(parent, skb); 928 } 929 bh_unlock_sock(parent); 930 } 931 932 static void chtls_accept_rpl_arp_failure(void *handle, 933 struct sk_buff *skb) 934 { 935 struct sock *sk = (struct sock *)handle; 936 937 sock_hold(sk); 938 process_cpl_msg(chtls_pass_open_arp_failure, sk, skb); 939 sock_put(sk); 940 } 941 942 static unsigned int chtls_select_mss(const struct chtls_sock *csk, 943 unsigned int pmtu, 944 struct cpl_pass_accept_req *req) 945 { 946 struct chtls_dev *cdev; 947 struct dst_entry *dst; 948 unsigned int tcpoptsz; 949 unsigned int iphdrsz; 950 unsigned int mtu_idx; 951 struct tcp_sock *tp; 952 unsigned int mss; 953 struct sock *sk; 954 955 mss = ntohs(req->tcpopt.mss); 956 sk = csk->sk; 957 dst = __sk_dst_get(sk); 958 cdev = csk->cdev; 959 tp = tcp_sk(sk); 960 tcpoptsz = 0; 961 962 #if IS_ENABLED(CONFIG_IPV6) 963 if (sk->sk_family == AF_INET6) 964 iphdrsz = sizeof(struct ipv6hdr) + sizeof(struct tcphdr); 965 else 966 #endif 967 iphdrsz = sizeof(struct iphdr) + sizeof(struct tcphdr); 968 if (req->tcpopt.tstamp) 969 tcpoptsz += round_up(TCPOLEN_TIMESTAMP, 4); 970 971 tp->advmss = dst_metric_advmss(dst); 972 if (USER_MSS(tp) && tp->advmss > USER_MSS(tp)) 973 tp->advmss = USER_MSS(tp); 974 if (tp->advmss > pmtu - iphdrsz) 975 tp->advmss = pmtu - iphdrsz; 976 if (mss && tp->advmss > mss) 977 tp->advmss = mss; 978 979 tp->advmss = cxgb4_best_aligned_mtu(cdev->lldi->mtus, 980 iphdrsz + tcpoptsz, 981 tp->advmss - tcpoptsz, 982 8, &mtu_idx); 983 tp->advmss -= iphdrsz; 984 985 inet_csk(sk)->icsk_pmtu_cookie = pmtu; 986 return mtu_idx; 987 } 988 989 static unsigned int select_rcv_wscale(int space, int wscale_ok, int win_clamp) 990 { 991 int wscale = 0; 992 993 if (space > MAX_RCV_WND) 994 space = MAX_RCV_WND; 995 if (win_clamp && win_clamp < space) 996 space = win_clamp; 997 998 if (wscale_ok) { 999 while (wscale < 14 && (65535 << wscale) < space) 1000 wscale++; 1001 } 1002 return wscale; 1003 } 1004 1005 static void chtls_pass_accept_rpl(struct sk_buff *skb, 1006 struct cpl_pass_accept_req *req, 1007 unsigned int tid) 1008 1009 { 1010 struct cpl_t5_pass_accept_rpl *rpl5; 1011 struct cxgb4_lld_info *lldi; 1012 const struct tcphdr *tcph; 1013 const struct tcp_sock *tp; 1014 struct chtls_sock *csk; 1015 unsigned int len; 1016 struct sock *sk; 1017 u32 opt2, hlen; 1018 u64 opt0; 1019 1020 sk = skb->sk; 1021 tp = tcp_sk(sk); 1022 csk = sk->sk_user_data; 1023 csk->tid = tid; 1024 lldi = csk->cdev->lldi; 1025 len = roundup(sizeof(*rpl5), 16); 1026 1027 rpl5 = __skb_put_zero(skb, len); 1028 INIT_TP_WR(rpl5, tid); 1029 1030 OPCODE_TID(rpl5) = cpu_to_be32(MK_OPCODE_TID(CPL_PASS_ACCEPT_RPL, 1031 csk->tid)); 1032 csk->mtu_idx = chtls_select_mss(csk, dst_mtu(__sk_dst_get(sk)), 1033 req); 1034 opt0 = TCAM_BYPASS_F | 1035 WND_SCALE_V(RCV_WSCALE(tp)) | 1036 MSS_IDX_V(csk->mtu_idx) | 1037 L2T_IDX_V(csk->l2t_entry->idx) | 1038 NAGLE_V(!(tp->nonagle & TCP_NAGLE_OFF)) | 1039 TX_CHAN_V(csk->tx_chan) | 1040 SMAC_SEL_V(csk->smac_idx) | 1041 DSCP_V(csk->tos >> 2) | 1042 ULP_MODE_V(ULP_MODE_TLS) | 1043 RCV_BUFSIZ_V(min(tp->rcv_wnd >> 10, RCV_BUFSIZ_M)); 1044 1045 opt2 = RX_CHANNEL_V(0) | 1046 RSS_QUEUE_VALID_F | RSS_QUEUE_V(csk->rss_qid); 1047 1048 if (!is_t5(lldi->adapter_type)) 1049 opt2 |= RX_FC_DISABLE_F; 1050 if (req->tcpopt.tstamp) 1051 opt2 |= TSTAMPS_EN_F; 1052 if (req->tcpopt.sack) 1053 opt2 |= SACK_EN_F; 1054 hlen = ntohl(req->hdr_len); 1055 1056 tcph = (struct tcphdr *)((u8 *)(req + 1) + 1057 T6_ETH_HDR_LEN_G(hlen) + T6_IP_HDR_LEN_G(hlen)); 1058 if (tcph->ece && tcph->cwr) 1059 opt2 |= CCTRL_ECN_V(1); 1060 opt2 |= CONG_CNTRL_V(CONG_ALG_NEWRENO); 1061 opt2 |= T5_ISS_F; 1062 opt2 |= T5_OPT_2_VALID_F; 1063 opt2 |= WND_SCALE_EN_V(WSCALE_OK(tp)); 1064 rpl5->opt0 = cpu_to_be64(opt0); 1065 rpl5->opt2 = cpu_to_be32(opt2); 1066 rpl5->iss = cpu_to_be32((prandom_u32() & ~7UL) - 1); 1067 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id); 1068 t4_set_arp_err_handler(skb, sk, chtls_accept_rpl_arp_failure); 1069 cxgb4_l2t_send(csk->egress_dev, skb, csk->l2t_entry); 1070 } 1071 1072 static void inet_inherit_port(struct inet_hashinfo *hash_info, 1073 struct sock *lsk, struct sock *newsk) 1074 { 1075 local_bh_disable(); 1076 __inet_inherit_port(lsk, newsk); 1077 local_bh_enable(); 1078 } 1079 1080 static int chtls_backlog_rcv(struct sock *sk, struct sk_buff *skb) 1081 { 1082 if (skb->protocol) { 1083 kfree_skb(skb); 1084 return 0; 1085 } 1086 BLOG_SKB_CB(skb)->backlog_rcv(sk, skb); 1087 return 0; 1088 } 1089 1090 static void chtls_set_tcp_window(struct chtls_sock *csk) 1091 { 1092 struct net_device *ndev = csk->egress_dev; 1093 struct port_info *pi = netdev_priv(ndev); 1094 unsigned int linkspeed; 1095 u8 scale; 1096 1097 linkspeed = pi->link_cfg.speed; 1098 scale = linkspeed / SPEED_10000; 1099 #define CHTLS_10G_RCVWIN (256 * 1024) 1100 csk->rcv_win = CHTLS_10G_RCVWIN; 1101 if (scale) 1102 csk->rcv_win *= scale; 1103 #define CHTLS_10G_SNDWIN (256 * 1024) 1104 csk->snd_win = CHTLS_10G_SNDWIN; 1105 if (scale) 1106 csk->snd_win *= scale; 1107 } 1108 1109 static struct sock *chtls_recv_sock(struct sock *lsk, 1110 struct request_sock *oreq, 1111 void *network_hdr, 1112 const struct cpl_pass_accept_req *req, 1113 struct chtls_dev *cdev) 1114 { 1115 struct neighbour *n = NULL; 1116 struct inet_sock *newinet; 1117 const struct iphdr *iph; 1118 struct tls_context *ctx; 1119 struct net_device *ndev; 1120 struct chtls_sock *csk; 1121 struct dst_entry *dst; 1122 struct tcp_sock *tp; 1123 struct sock *newsk; 1124 u16 port_id; 1125 int rxq_idx; 1126 int step; 1127 1128 iph = (const struct iphdr *)network_hdr; 1129 newsk = tcp_create_openreq_child(lsk, oreq, cdev->askb); 1130 if (!newsk) 1131 goto free_oreq; 1132 1133 if (lsk->sk_family == AF_INET) { 1134 dst = inet_csk_route_child_sock(lsk, newsk, oreq); 1135 if (!dst) 1136 goto free_sk; 1137 1138 n = dst_neigh_lookup(dst, &iph->saddr); 1139 #if IS_ENABLED(CONFIG_IPV6) 1140 } else { 1141 const struct ipv6hdr *ip6h; 1142 struct flowi6 fl6; 1143 1144 ip6h = (const struct ipv6hdr *)network_hdr; 1145 memset(&fl6, 0, sizeof(fl6)); 1146 fl6.flowi6_proto = IPPROTO_TCP; 1147 fl6.saddr = ip6h->daddr; 1148 fl6.daddr = ip6h->saddr; 1149 fl6.fl6_dport = inet_rsk(oreq)->ir_rmt_port; 1150 fl6.fl6_sport = htons(inet_rsk(oreq)->ir_num); 1151 security_req_classify_flow(oreq, flowi6_to_flowi(&fl6)); 1152 dst = ip6_dst_lookup_flow(sock_net(lsk), lsk, &fl6, NULL); 1153 if (IS_ERR(dst)) 1154 goto free_sk; 1155 n = dst_neigh_lookup(dst, &ip6h->saddr); 1156 #endif 1157 } 1158 if (!n) 1159 goto free_sk; 1160 1161 ndev = n->dev; 1162 if (!ndev) 1163 goto free_dst; 1164 if (is_vlan_dev(ndev)) 1165 ndev = vlan_dev_real_dev(ndev); 1166 1167 port_id = cxgb4_port_idx(ndev); 1168 1169 csk = chtls_sock_create(cdev); 1170 if (!csk) 1171 goto free_dst; 1172 1173 csk->l2t_entry = cxgb4_l2t_get(cdev->lldi->l2t, n, ndev, 0); 1174 if (!csk->l2t_entry) 1175 goto free_csk; 1176 1177 newsk->sk_user_data = csk; 1178 newsk->sk_backlog_rcv = chtls_backlog_rcv; 1179 1180 tp = tcp_sk(newsk); 1181 newinet = inet_sk(newsk); 1182 1183 if (iph->version == 0x4) { 1184 newinet->inet_daddr = iph->saddr; 1185 newinet->inet_rcv_saddr = iph->daddr; 1186 newinet->inet_saddr = iph->daddr; 1187 #if IS_ENABLED(CONFIG_IPV6) 1188 } else { 1189 struct tcp6_sock *newtcp6sk = (struct tcp6_sock *)newsk; 1190 struct inet_request_sock *treq = inet_rsk(oreq); 1191 struct ipv6_pinfo *newnp = inet6_sk(newsk); 1192 struct ipv6_pinfo *np = inet6_sk(lsk); 1193 1194 inet_sk(newsk)->pinet6 = &newtcp6sk->inet6; 1195 memcpy(newnp, np, sizeof(struct ipv6_pinfo)); 1196 newsk->sk_v6_daddr = treq->ir_v6_rmt_addr; 1197 newsk->sk_v6_rcv_saddr = treq->ir_v6_loc_addr; 1198 inet6_sk(newsk)->saddr = treq->ir_v6_loc_addr; 1199 newnp->ipv6_fl_list = NULL; 1200 newnp->pktoptions = NULL; 1201 newsk->sk_bound_dev_if = treq->ir_iif; 1202 newinet->inet_opt = NULL; 1203 newinet->inet_daddr = LOOPBACK4_IPV6; 1204 newinet->inet_saddr = LOOPBACK4_IPV6; 1205 #endif 1206 } 1207 1208 oreq->ts_recent = PASS_OPEN_TID_G(ntohl(req->tos_stid)); 1209 sk_setup_caps(newsk, dst); 1210 ctx = tls_get_ctx(lsk); 1211 newsk->sk_destruct = ctx->sk_destruct; 1212 csk->sk = newsk; 1213 csk->passive_reap_next = oreq; 1214 csk->tx_chan = cxgb4_port_chan(ndev); 1215 csk->port_id = port_id; 1216 csk->egress_dev = ndev; 1217 csk->tos = PASS_OPEN_TOS_G(ntohl(req->tos_stid)); 1218 chtls_set_tcp_window(csk); 1219 tp->rcv_wnd = csk->rcv_win; 1220 csk->sndbuf = csk->snd_win; 1221 csk->ulp_mode = ULP_MODE_TLS; 1222 step = cdev->lldi->nrxq / cdev->lldi->nchan; 1223 csk->rss_qid = cdev->lldi->rxq_ids[port_id * step]; 1224 rxq_idx = port_id * step; 1225 csk->txq_idx = (rxq_idx < cdev->lldi->ntxq) ? rxq_idx : 1226 port_id * step; 1227 csk->sndbuf = newsk->sk_sndbuf; 1228 csk->smac_idx = ((struct port_info *)netdev_priv(ndev))->smt_idx; 1229 RCV_WSCALE(tp) = select_rcv_wscale(tcp_full_space(newsk), 1230 sock_net(newsk)-> 1231 ipv4.sysctl_tcp_window_scaling, 1232 tp->window_clamp); 1233 neigh_release(n); 1234 inet_inherit_port(&tcp_hashinfo, lsk, newsk); 1235 csk_set_flag(csk, CSK_CONN_INLINE); 1236 bh_unlock_sock(newsk); /* tcp_create_openreq_child ->sk_clone_lock */ 1237 1238 return newsk; 1239 free_csk: 1240 chtls_sock_release(&csk->kref); 1241 free_dst: 1242 dst_release(dst); 1243 free_sk: 1244 inet_csk_prepare_forced_close(newsk); 1245 tcp_done(newsk); 1246 free_oreq: 1247 chtls_reqsk_free(oreq); 1248 return NULL; 1249 } 1250 1251 /* 1252 * Populate a TID_RELEASE WR. The skb must be already propely sized. 1253 */ 1254 static void mk_tid_release(struct sk_buff *skb, 1255 unsigned int chan, unsigned int tid) 1256 { 1257 struct cpl_tid_release *req; 1258 unsigned int len; 1259 1260 len = roundup(sizeof(struct cpl_tid_release), 16); 1261 req = (struct cpl_tid_release *)__skb_put(skb, len); 1262 memset(req, 0, len); 1263 set_wr_txq(skb, CPL_PRIORITY_SETUP, chan); 1264 INIT_TP_WR_CPL(req, CPL_TID_RELEASE, tid); 1265 } 1266 1267 static int chtls_get_module(struct sock *sk) 1268 { 1269 struct inet_connection_sock *icsk = inet_csk(sk); 1270 1271 if (!try_module_get(icsk->icsk_ulp_ops->owner)) 1272 return -1; 1273 1274 return 0; 1275 } 1276 1277 static void chtls_pass_accept_request(struct sock *sk, 1278 struct sk_buff *skb) 1279 { 1280 struct cpl_t5_pass_accept_rpl *rpl; 1281 struct cpl_pass_accept_req *req; 1282 struct listen_ctx *listen_ctx; 1283 struct vlan_ethhdr *vlan_eh; 1284 struct request_sock *oreq; 1285 struct sk_buff *reply_skb; 1286 struct chtls_sock *csk; 1287 struct chtls_dev *cdev; 1288 struct ipv6hdr *ip6h; 1289 struct tcphdr *tcph; 1290 struct sock *newsk; 1291 struct ethhdr *eh; 1292 struct iphdr *iph; 1293 void *network_hdr; 1294 unsigned int stid; 1295 unsigned int len; 1296 unsigned int tid; 1297 bool th_ecn, ect; 1298 __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */ 1299 u16 eth_hdr_len; 1300 bool ecn_ok; 1301 1302 req = cplhdr(skb) + RSS_HDR; 1303 tid = GET_TID(req); 1304 cdev = BLOG_SKB_CB(skb)->cdev; 1305 newsk = lookup_tid(cdev->tids, tid); 1306 stid = PASS_OPEN_TID_G(ntohl(req->tos_stid)); 1307 if (newsk) { 1308 pr_info("tid (%d) already in use\n", tid); 1309 return; 1310 } 1311 1312 len = roundup(sizeof(*rpl), 16); 1313 reply_skb = alloc_skb(len, GFP_ATOMIC); 1314 if (!reply_skb) { 1315 cxgb4_remove_tid(cdev->tids, 0, tid, sk->sk_family); 1316 kfree_skb(skb); 1317 return; 1318 } 1319 1320 if (sk->sk_state != TCP_LISTEN) 1321 goto reject; 1322 1323 if (inet_csk_reqsk_queue_is_full(sk)) 1324 goto reject; 1325 1326 if (sk_acceptq_is_full(sk)) 1327 goto reject; 1328 1329 1330 eth_hdr_len = T6_ETH_HDR_LEN_G(ntohl(req->hdr_len)); 1331 if (eth_hdr_len == ETH_HLEN) { 1332 eh = (struct ethhdr *)(req + 1); 1333 iph = (struct iphdr *)(eh + 1); 1334 ip6h = (struct ipv6hdr *)(eh + 1); 1335 network_hdr = (void *)(eh + 1); 1336 } else { 1337 vlan_eh = (struct vlan_ethhdr *)(req + 1); 1338 iph = (struct iphdr *)(vlan_eh + 1); 1339 ip6h = (struct ipv6hdr *)(vlan_eh + 1); 1340 network_hdr = (void *)(vlan_eh + 1); 1341 } 1342 1343 if (iph->version == 0x4) { 1344 tcph = (struct tcphdr *)(iph + 1); 1345 skb_set_network_header(skb, (void *)iph - (void *)req); 1346 oreq = inet_reqsk_alloc(&chtls_rsk_ops, sk, true); 1347 } else { 1348 tcph = (struct tcphdr *)(ip6h + 1); 1349 skb_set_network_header(skb, (void *)ip6h - (void *)req); 1350 oreq = inet_reqsk_alloc(&chtls_rsk_opsv6, sk, false); 1351 } 1352 1353 if (!oreq) 1354 goto reject; 1355 1356 oreq->rsk_rcv_wnd = 0; 1357 oreq->rsk_window_clamp = 0; 1358 oreq->syncookie = 0; 1359 oreq->mss = 0; 1360 oreq->ts_recent = 0; 1361 1362 tcp_rsk(oreq)->tfo_listener = false; 1363 tcp_rsk(oreq)->rcv_isn = ntohl(tcph->seq); 1364 chtls_set_req_port(oreq, tcph->source, tcph->dest); 1365 if (iph->version == 0x4) { 1366 chtls_set_req_addr(oreq, iph->daddr, iph->saddr); 1367 ip_dsfield = ipv4_get_dsfield(iph); 1368 #if IS_ENABLED(CONFIG_IPV6) 1369 } else { 1370 inet_rsk(oreq)->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; 1371 inet_rsk(oreq)->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; 1372 ip_dsfield = ipv6_get_dsfield(ipv6_hdr(skb)); 1373 #endif 1374 } 1375 if (req->tcpopt.wsf <= 14 && 1376 sock_net(sk)->ipv4.sysctl_tcp_window_scaling) { 1377 inet_rsk(oreq)->wscale_ok = 1; 1378 inet_rsk(oreq)->snd_wscale = req->tcpopt.wsf; 1379 } 1380 inet_rsk(oreq)->ir_iif = sk->sk_bound_dev_if; 1381 th_ecn = tcph->ece && tcph->cwr; 1382 if (th_ecn) { 1383 ect = !INET_ECN_is_not_ect(ip_dsfield); 1384 ecn_ok = sock_net(sk)->ipv4.sysctl_tcp_ecn; 1385 if ((!ect && ecn_ok) || tcp_ca_needs_ecn(sk)) 1386 inet_rsk(oreq)->ecn_ok = 1; 1387 } 1388 1389 newsk = chtls_recv_sock(sk, oreq, network_hdr, req, cdev); 1390 if (!newsk) 1391 goto free_oreq; 1392 1393 if (chtls_get_module(newsk)) 1394 goto reject; 1395 inet_csk_reqsk_queue_added(sk); 1396 reply_skb->sk = newsk; 1397 chtls_install_cpl_ops(newsk); 1398 cxgb4_insert_tid(cdev->tids, newsk, tid, newsk->sk_family); 1399 csk = rcu_dereference_sk_user_data(newsk); 1400 listen_ctx = (struct listen_ctx *)lookup_stid(cdev->tids, stid); 1401 csk->listen_ctx = listen_ctx; 1402 __skb_queue_tail(&listen_ctx->synq, (struct sk_buff *)&csk->synq); 1403 chtls_pass_accept_rpl(reply_skb, req, tid); 1404 kfree_skb(skb); 1405 return; 1406 1407 free_oreq: 1408 chtls_reqsk_free(oreq); 1409 reject: 1410 mk_tid_release(reply_skb, 0, tid); 1411 cxgb4_ofld_send(cdev->lldi->ports[0], reply_skb); 1412 kfree_skb(skb); 1413 } 1414 1415 /* 1416 * Handle a CPL_PASS_ACCEPT_REQ message. 1417 */ 1418 static int chtls_pass_accept_req(struct chtls_dev *cdev, struct sk_buff *skb) 1419 { 1420 struct cpl_pass_accept_req *req = cplhdr(skb) + RSS_HDR; 1421 struct listen_ctx *ctx; 1422 unsigned int stid; 1423 unsigned int tid; 1424 struct sock *lsk; 1425 void *data; 1426 1427 stid = PASS_OPEN_TID_G(ntohl(req->tos_stid)); 1428 tid = GET_TID(req); 1429 1430 data = lookup_stid(cdev->tids, stid); 1431 if (!data) 1432 return 1; 1433 1434 ctx = (struct listen_ctx *)data; 1435 lsk = ctx->lsk; 1436 1437 if (unlikely(tid_out_of_range(cdev->tids, tid))) { 1438 pr_info("passive open TID %u too large\n", tid); 1439 return 1; 1440 } 1441 1442 BLOG_SKB_CB(skb)->cdev = cdev; 1443 process_cpl_msg(chtls_pass_accept_request, lsk, skb); 1444 return 0; 1445 } 1446 1447 /* 1448 * Completes some final bits of initialization for just established connections 1449 * and changes their state to TCP_ESTABLISHED. 1450 * 1451 * snd_isn here is the ISN after the SYN, i.e., the true ISN + 1. 1452 */ 1453 static void make_established(struct sock *sk, u32 snd_isn, unsigned int opt) 1454 { 1455 struct tcp_sock *tp = tcp_sk(sk); 1456 1457 tp->pushed_seq = snd_isn; 1458 tp->write_seq = snd_isn; 1459 tp->snd_nxt = snd_isn; 1460 tp->snd_una = snd_isn; 1461 inet_sk(sk)->inet_id = prandom_u32(); 1462 assign_rxopt(sk, opt); 1463 1464 if (tp->rcv_wnd > (RCV_BUFSIZ_M << 10)) 1465 tp->rcv_wup -= tp->rcv_wnd - (RCV_BUFSIZ_M << 10); 1466 1467 smp_mb(); 1468 tcp_set_state(sk, TCP_ESTABLISHED); 1469 } 1470 1471 static void chtls_abort_conn(struct sock *sk, struct sk_buff *skb) 1472 { 1473 struct sk_buff *abort_skb; 1474 1475 abort_skb = alloc_skb(sizeof(struct cpl_abort_req), GFP_ATOMIC); 1476 if (abort_skb) 1477 chtls_send_reset(sk, CPL_ABORT_SEND_RST, abort_skb); 1478 } 1479 1480 static struct sock *reap_list; 1481 static DEFINE_SPINLOCK(reap_list_lock); 1482 1483 /* 1484 * Process the reap list. 1485 */ 1486 DECLARE_TASK_FUNC(process_reap_list, task_param) 1487 { 1488 spin_lock_bh(&reap_list_lock); 1489 while (reap_list) { 1490 struct sock *sk = reap_list; 1491 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 1492 1493 reap_list = csk->passive_reap_next; 1494 csk->passive_reap_next = NULL; 1495 spin_unlock(&reap_list_lock); 1496 sock_hold(sk); 1497 1498 bh_lock_sock(sk); 1499 chtls_abort_conn(sk, NULL); 1500 sock_orphan(sk); 1501 if (sk->sk_state == TCP_CLOSE) 1502 inet_csk_destroy_sock(sk); 1503 bh_unlock_sock(sk); 1504 sock_put(sk); 1505 spin_lock(&reap_list_lock); 1506 } 1507 spin_unlock_bh(&reap_list_lock); 1508 } 1509 1510 static DECLARE_WORK(reap_task, process_reap_list); 1511 1512 static void add_to_reap_list(struct sock *sk) 1513 { 1514 struct chtls_sock *csk = sk->sk_user_data; 1515 1516 local_bh_disable(); 1517 bh_lock_sock(sk); 1518 release_tcp_port(sk); /* release the port immediately */ 1519 1520 spin_lock(&reap_list_lock); 1521 csk->passive_reap_next = reap_list; 1522 reap_list = sk; 1523 if (!csk->passive_reap_next) 1524 schedule_work(&reap_task); 1525 spin_unlock(&reap_list_lock); 1526 bh_unlock_sock(sk); 1527 local_bh_enable(); 1528 } 1529 1530 static void add_pass_open_to_parent(struct sock *child, struct sock *lsk, 1531 struct chtls_dev *cdev) 1532 { 1533 struct request_sock *oreq; 1534 struct chtls_sock *csk; 1535 1536 if (lsk->sk_state != TCP_LISTEN) 1537 return; 1538 1539 csk = child->sk_user_data; 1540 oreq = csk->passive_reap_next; 1541 csk->passive_reap_next = NULL; 1542 1543 reqsk_queue_removed(&inet_csk(lsk)->icsk_accept_queue, oreq); 1544 __skb_unlink((struct sk_buff *)&csk->synq, &csk->listen_ctx->synq); 1545 1546 if (sk_acceptq_is_full(lsk)) { 1547 chtls_reqsk_free(oreq); 1548 add_to_reap_list(child); 1549 } else { 1550 refcount_set(&oreq->rsk_refcnt, 1); 1551 inet_csk_reqsk_queue_add(lsk, oreq, child); 1552 lsk->sk_data_ready(lsk); 1553 } 1554 } 1555 1556 static void bl_add_pass_open_to_parent(struct sock *lsk, struct sk_buff *skb) 1557 { 1558 struct sock *child = skb->sk; 1559 1560 skb->sk = NULL; 1561 add_pass_open_to_parent(child, lsk, BLOG_SKB_CB(skb)->cdev); 1562 kfree_skb(skb); 1563 } 1564 1565 static int chtls_pass_establish(struct chtls_dev *cdev, struct sk_buff *skb) 1566 { 1567 struct cpl_pass_establish *req = cplhdr(skb) + RSS_HDR; 1568 struct chtls_sock *csk; 1569 struct sock *lsk, *sk; 1570 unsigned int hwtid; 1571 1572 hwtid = GET_TID(req); 1573 sk = lookup_tid(cdev->tids, hwtid); 1574 if (!sk) 1575 return (CPL_RET_UNKNOWN_TID | CPL_RET_BUF_DONE); 1576 1577 bh_lock_sock(sk); 1578 if (unlikely(sock_owned_by_user(sk))) { 1579 kfree_skb(skb); 1580 } else { 1581 unsigned int stid; 1582 void *data; 1583 1584 csk = sk->sk_user_data; 1585 csk->wr_max_credits = 64; 1586 csk->wr_credits = 64; 1587 csk->wr_unacked = 0; 1588 make_established(sk, ntohl(req->snd_isn), ntohs(req->tcp_opt)); 1589 stid = PASS_OPEN_TID_G(ntohl(req->tos_stid)); 1590 sk->sk_state_change(sk); 1591 if (unlikely(sk->sk_socket)) 1592 sk_wake_async(sk, 0, POLL_OUT); 1593 1594 data = lookup_stid(cdev->tids, stid); 1595 lsk = ((struct listen_ctx *)data)->lsk; 1596 1597 bh_lock_sock(lsk); 1598 if (unlikely(skb_queue_empty(&csk->listen_ctx->synq))) { 1599 /* removed from synq */ 1600 bh_unlock_sock(lsk); 1601 kfree_skb(skb); 1602 goto unlock; 1603 } 1604 1605 if (likely(!sock_owned_by_user(lsk))) { 1606 kfree_skb(skb); 1607 add_pass_open_to_parent(sk, lsk, cdev); 1608 } else { 1609 skb->sk = sk; 1610 BLOG_SKB_CB(skb)->cdev = cdev; 1611 BLOG_SKB_CB(skb)->backlog_rcv = 1612 bl_add_pass_open_to_parent; 1613 __sk_add_backlog(lsk, skb); 1614 } 1615 bh_unlock_sock(lsk); 1616 } 1617 unlock: 1618 bh_unlock_sock(sk); 1619 return 0; 1620 } 1621 1622 /* 1623 * Handle receipt of an urgent pointer. 1624 */ 1625 static void handle_urg_ptr(struct sock *sk, u32 urg_seq) 1626 { 1627 struct tcp_sock *tp = tcp_sk(sk); 1628 1629 urg_seq--; 1630 if (tp->urg_data && !after(urg_seq, tp->urg_seq)) 1631 return; /* duplicate pointer */ 1632 1633 sk_send_sigurg(sk); 1634 if (tp->urg_seq == tp->copied_seq && tp->urg_data && 1635 !sock_flag(sk, SOCK_URGINLINE) && 1636 tp->copied_seq != tp->rcv_nxt) { 1637 struct sk_buff *skb = skb_peek(&sk->sk_receive_queue); 1638 1639 tp->copied_seq++; 1640 if (skb && tp->copied_seq - ULP_SKB_CB(skb)->seq >= skb->len) 1641 chtls_free_skb(sk, skb); 1642 } 1643 1644 tp->urg_data = TCP_URG_NOTYET; 1645 tp->urg_seq = urg_seq; 1646 } 1647 1648 static void check_sk_callbacks(struct chtls_sock *csk) 1649 { 1650 struct sock *sk = csk->sk; 1651 1652 if (unlikely(sk->sk_user_data && 1653 !csk_flag_nochk(csk, CSK_CALLBACKS_CHKD))) 1654 csk_set_flag(csk, CSK_CALLBACKS_CHKD); 1655 } 1656 1657 /* 1658 * Handles Rx data that arrives in a state where the socket isn't accepting 1659 * new data. 1660 */ 1661 static void handle_excess_rx(struct sock *sk, struct sk_buff *skb) 1662 { 1663 if (!csk_flag(sk, CSK_ABORT_SHUTDOWN)) 1664 chtls_abort_conn(sk, skb); 1665 1666 kfree_skb(skb); 1667 } 1668 1669 static void chtls_recv_data(struct sock *sk, struct sk_buff *skb) 1670 { 1671 struct cpl_rx_data *hdr = cplhdr(skb) + RSS_HDR; 1672 struct chtls_sock *csk; 1673 struct tcp_sock *tp; 1674 1675 csk = rcu_dereference_sk_user_data(sk); 1676 tp = tcp_sk(sk); 1677 1678 if (unlikely(sk->sk_shutdown & RCV_SHUTDOWN)) { 1679 handle_excess_rx(sk, skb); 1680 return; 1681 } 1682 1683 ULP_SKB_CB(skb)->seq = ntohl(hdr->seq); 1684 ULP_SKB_CB(skb)->psh = hdr->psh; 1685 skb_ulp_mode(skb) = ULP_MODE_NONE; 1686 1687 skb_reset_transport_header(skb); 1688 __skb_pull(skb, sizeof(*hdr) + RSS_HDR); 1689 if (!skb->data_len) 1690 __skb_trim(skb, ntohs(hdr->len)); 1691 1692 if (unlikely(hdr->urg)) 1693 handle_urg_ptr(sk, tp->rcv_nxt + ntohs(hdr->urg)); 1694 if (unlikely(tp->urg_data == TCP_URG_NOTYET && 1695 tp->urg_seq - tp->rcv_nxt < skb->len)) 1696 tp->urg_data = TCP_URG_VALID | 1697 skb->data[tp->urg_seq - tp->rcv_nxt]; 1698 1699 if (unlikely(hdr->dack_mode != csk->delack_mode)) { 1700 csk->delack_mode = hdr->dack_mode; 1701 csk->delack_seq = tp->rcv_nxt; 1702 } 1703 1704 tcp_hdr(skb)->fin = 0; 1705 tp->rcv_nxt += skb->len; 1706 1707 __skb_queue_tail(&sk->sk_receive_queue, skb); 1708 1709 if (!sock_flag(sk, SOCK_DEAD)) { 1710 check_sk_callbacks(csk); 1711 sk->sk_data_ready(sk); 1712 } 1713 } 1714 1715 static int chtls_rx_data(struct chtls_dev *cdev, struct sk_buff *skb) 1716 { 1717 struct cpl_rx_data *req = cplhdr(skb) + RSS_HDR; 1718 unsigned int hwtid = GET_TID(req); 1719 struct sock *sk; 1720 1721 sk = lookup_tid(cdev->tids, hwtid); 1722 if (unlikely(!sk)) { 1723 pr_err("can't find conn. for hwtid %u.\n", hwtid); 1724 return -EINVAL; 1725 } 1726 skb_dst_set(skb, NULL); 1727 process_cpl_msg(chtls_recv_data, sk, skb); 1728 return 0; 1729 } 1730 1731 static void chtls_recv_pdu(struct sock *sk, struct sk_buff *skb) 1732 { 1733 struct cpl_tls_data *hdr = cplhdr(skb); 1734 struct chtls_sock *csk; 1735 struct chtls_hws *tlsk; 1736 struct tcp_sock *tp; 1737 1738 csk = rcu_dereference_sk_user_data(sk); 1739 tlsk = &csk->tlshws; 1740 tp = tcp_sk(sk); 1741 1742 if (unlikely(sk->sk_shutdown & RCV_SHUTDOWN)) { 1743 handle_excess_rx(sk, skb); 1744 return; 1745 } 1746 1747 ULP_SKB_CB(skb)->seq = ntohl(hdr->seq); 1748 ULP_SKB_CB(skb)->flags = 0; 1749 skb_ulp_mode(skb) = ULP_MODE_TLS; 1750 1751 skb_reset_transport_header(skb); 1752 __skb_pull(skb, sizeof(*hdr)); 1753 if (!skb->data_len) 1754 __skb_trim(skb, 1755 CPL_TLS_DATA_LENGTH_G(ntohl(hdr->length_pkd))); 1756 1757 if (unlikely(tp->urg_data == TCP_URG_NOTYET && tp->urg_seq - 1758 tp->rcv_nxt < skb->len)) 1759 tp->urg_data = TCP_URG_VALID | 1760 skb->data[tp->urg_seq - tp->rcv_nxt]; 1761 1762 tcp_hdr(skb)->fin = 0; 1763 tlsk->pldlen = CPL_TLS_DATA_LENGTH_G(ntohl(hdr->length_pkd)); 1764 __skb_queue_tail(&tlsk->sk_recv_queue, skb); 1765 } 1766 1767 static int chtls_rx_pdu(struct chtls_dev *cdev, struct sk_buff *skb) 1768 { 1769 struct cpl_tls_data *req = cplhdr(skb); 1770 unsigned int hwtid = GET_TID(req); 1771 struct sock *sk; 1772 1773 sk = lookup_tid(cdev->tids, hwtid); 1774 if (unlikely(!sk)) { 1775 pr_err("can't find conn. for hwtid %u.\n", hwtid); 1776 return -EINVAL; 1777 } 1778 skb_dst_set(skb, NULL); 1779 process_cpl_msg(chtls_recv_pdu, sk, skb); 1780 return 0; 1781 } 1782 1783 static void chtls_set_hdrlen(struct sk_buff *skb, unsigned int nlen) 1784 { 1785 struct tlsrx_cmp_hdr *tls_cmp_hdr = cplhdr(skb); 1786 1787 skb->hdr_len = ntohs((__force __be16)tls_cmp_hdr->length); 1788 tls_cmp_hdr->length = ntohs((__force __be16)nlen); 1789 } 1790 1791 static void chtls_rx_hdr(struct sock *sk, struct sk_buff *skb) 1792 { 1793 struct tlsrx_cmp_hdr *tls_hdr_pkt; 1794 struct cpl_rx_tls_cmp *cmp_cpl; 1795 struct sk_buff *skb_rec; 1796 struct chtls_sock *csk; 1797 struct chtls_hws *tlsk; 1798 struct tcp_sock *tp; 1799 1800 cmp_cpl = cplhdr(skb); 1801 csk = rcu_dereference_sk_user_data(sk); 1802 tlsk = &csk->tlshws; 1803 tp = tcp_sk(sk); 1804 1805 ULP_SKB_CB(skb)->seq = ntohl(cmp_cpl->seq); 1806 ULP_SKB_CB(skb)->flags = 0; 1807 1808 skb_reset_transport_header(skb); 1809 __skb_pull(skb, sizeof(*cmp_cpl)); 1810 tls_hdr_pkt = (struct tlsrx_cmp_hdr *)skb->data; 1811 if (tls_hdr_pkt->res_to_mac_error & TLSRX_HDR_PKT_ERROR_M) 1812 tls_hdr_pkt->type = CONTENT_TYPE_ERROR; 1813 if (!skb->data_len) 1814 __skb_trim(skb, TLS_HEADER_LENGTH); 1815 1816 tp->rcv_nxt += 1817 CPL_RX_TLS_CMP_PDULENGTH_G(ntohl(cmp_cpl->pdulength_length)); 1818 1819 ULP_SKB_CB(skb)->flags |= ULPCB_FLAG_TLS_HDR; 1820 skb_rec = __skb_dequeue(&tlsk->sk_recv_queue); 1821 if (!skb_rec) { 1822 __skb_queue_tail(&sk->sk_receive_queue, skb); 1823 } else { 1824 chtls_set_hdrlen(skb, tlsk->pldlen); 1825 tlsk->pldlen = 0; 1826 __skb_queue_tail(&sk->sk_receive_queue, skb); 1827 __skb_queue_tail(&sk->sk_receive_queue, skb_rec); 1828 } 1829 1830 if (!sock_flag(sk, SOCK_DEAD)) { 1831 check_sk_callbacks(csk); 1832 sk->sk_data_ready(sk); 1833 } 1834 } 1835 1836 static int chtls_rx_cmp(struct chtls_dev *cdev, struct sk_buff *skb) 1837 { 1838 struct cpl_rx_tls_cmp *req = cplhdr(skb); 1839 unsigned int hwtid = GET_TID(req); 1840 struct sock *sk; 1841 1842 sk = lookup_tid(cdev->tids, hwtid); 1843 if (unlikely(!sk)) { 1844 pr_err("can't find conn. for hwtid %u.\n", hwtid); 1845 return -EINVAL; 1846 } 1847 skb_dst_set(skb, NULL); 1848 process_cpl_msg(chtls_rx_hdr, sk, skb); 1849 1850 return 0; 1851 } 1852 1853 static void chtls_timewait(struct sock *sk) 1854 { 1855 struct tcp_sock *tp = tcp_sk(sk); 1856 1857 tp->rcv_nxt++; 1858 tp->rx_opt.ts_recent_stamp = ktime_get_seconds(); 1859 tp->srtt_us = 0; 1860 tcp_time_wait(sk, TCP_TIME_WAIT, 0); 1861 } 1862 1863 static void chtls_peer_close(struct sock *sk, struct sk_buff *skb) 1864 { 1865 struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); 1866 1867 if (csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) 1868 goto out; 1869 1870 sk->sk_shutdown |= RCV_SHUTDOWN; 1871 sock_set_flag(sk, SOCK_DONE); 1872 1873 switch (sk->sk_state) { 1874 case TCP_SYN_RECV: 1875 case TCP_ESTABLISHED: 1876 tcp_set_state(sk, TCP_CLOSE_WAIT); 1877 break; 1878 case TCP_FIN_WAIT1: 1879 tcp_set_state(sk, TCP_CLOSING); 1880 break; 1881 case TCP_FIN_WAIT2: 1882 chtls_release_resources(sk); 1883 if (csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) 1884 chtls_conn_done(sk); 1885 else 1886 chtls_timewait(sk); 1887 break; 1888 default: 1889 pr_info("cpl_peer_close in bad state %d\n", sk->sk_state); 1890 } 1891 1892 if (!sock_flag(sk, SOCK_DEAD)) { 1893 sk->sk_state_change(sk); 1894 /* Do not send POLL_HUP for half duplex close. */ 1895 1896 if ((sk->sk_shutdown & SEND_SHUTDOWN) || 1897 sk->sk_state == TCP_CLOSE) 1898 sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_HUP); 1899 else 1900 sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN); 1901 } 1902 out: 1903 kfree_skb(skb); 1904 } 1905 1906 static void chtls_close_con_rpl(struct sock *sk, struct sk_buff *skb) 1907 { 1908 struct cpl_close_con_rpl *rpl = cplhdr(skb) + RSS_HDR; 1909 struct chtls_sock *csk; 1910 struct tcp_sock *tp; 1911 1912 csk = rcu_dereference_sk_user_data(sk); 1913 1914 if (csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) 1915 goto out; 1916 1917 tp = tcp_sk(sk); 1918 1919 tp->snd_una = ntohl(rpl->snd_nxt) - 1; /* exclude FIN */ 1920 1921 switch (sk->sk_state) { 1922 case TCP_CLOSING: 1923 chtls_release_resources(sk); 1924 if (csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) 1925 chtls_conn_done(sk); 1926 else 1927 chtls_timewait(sk); 1928 break; 1929 case TCP_LAST_ACK: 1930 chtls_release_resources(sk); 1931 chtls_conn_done(sk); 1932 break; 1933 case TCP_FIN_WAIT1: 1934 tcp_set_state(sk, TCP_FIN_WAIT2); 1935 sk->sk_shutdown |= SEND_SHUTDOWN; 1936 1937 if (!sock_flag(sk, SOCK_DEAD)) 1938 sk->sk_state_change(sk); 1939 else if (tcp_sk(sk)->linger2 < 0 && 1940 !csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN)) 1941 chtls_abort_conn(sk, skb); 1942 break; 1943 default: 1944 pr_info("close_con_rpl in bad state %d\n", sk->sk_state); 1945 } 1946 out: 1947 kfree_skb(skb); 1948 } 1949 1950 static struct sk_buff *get_cpl_skb(struct sk_buff *skb, 1951 size_t len, gfp_t gfp) 1952 { 1953 if (likely(!skb_is_nonlinear(skb) && !skb_cloned(skb))) { 1954 WARN_ONCE(skb->len < len, "skb alloc error"); 1955 __skb_trim(skb, len); 1956 skb_get(skb); 1957 } else { 1958 skb = alloc_skb(len, gfp); 1959 if (skb) 1960 __skb_put(skb, len); 1961 } 1962 return skb; 1963 } 1964 1965 static void set_abort_rpl_wr(struct sk_buff *skb, unsigned int tid, 1966 int cmd) 1967 { 1968 struct cpl_abort_rpl *rpl = cplhdr(skb); 1969 1970 INIT_TP_WR_CPL(rpl, CPL_ABORT_RPL, tid); 1971 rpl->cmd = cmd; 1972 } 1973 1974 static void send_defer_abort_rpl(struct chtls_dev *cdev, struct sk_buff *skb) 1975 { 1976 struct cpl_abort_req_rss *req = cplhdr(skb); 1977 struct sk_buff *reply_skb; 1978 1979 reply_skb = alloc_skb(sizeof(struct cpl_abort_rpl), 1980 GFP_KERNEL | __GFP_NOFAIL); 1981 __skb_put(reply_skb, sizeof(struct cpl_abort_rpl)); 1982 set_abort_rpl_wr(reply_skb, GET_TID(req), 1983 (req->status & CPL_ABORT_NO_RST)); 1984 set_wr_txq(reply_skb, CPL_PRIORITY_DATA, req->status >> 1); 1985 cxgb4_ofld_send(cdev->lldi->ports[0], reply_skb); 1986 kfree_skb(skb); 1987 } 1988 1989 /* 1990 * Add an skb to the deferred skb queue for processing from process context. 1991 */ 1992 static void t4_defer_reply(struct sk_buff *skb, struct chtls_dev *cdev, 1993 defer_handler_t handler) 1994 { 1995 DEFERRED_SKB_CB(skb)->handler = handler; 1996 spin_lock_bh(&cdev->deferq.lock); 1997 __skb_queue_tail(&cdev->deferq, skb); 1998 if (skb_queue_len(&cdev->deferq) == 1) 1999 schedule_work(&cdev->deferq_task); 2000 spin_unlock_bh(&cdev->deferq.lock); 2001 } 2002 2003 static void send_abort_rpl(struct sock *sk, struct sk_buff *skb, 2004 struct chtls_dev *cdev, int status, int queue) 2005 { 2006 struct cpl_abort_req_rss *req = cplhdr(skb); 2007 struct sk_buff *reply_skb; 2008 struct chtls_sock *csk; 2009 2010 csk = rcu_dereference_sk_user_data(sk); 2011 2012 reply_skb = alloc_skb(sizeof(struct cpl_abort_rpl), 2013 GFP_KERNEL); 2014 2015 if (!reply_skb) { 2016 req->status = (queue << 1); 2017 t4_defer_reply(skb, cdev, send_defer_abort_rpl); 2018 return; 2019 } 2020 2021 set_abort_rpl_wr(reply_skb, GET_TID(req), status); 2022 kfree_skb(skb); 2023 2024 set_wr_txq(reply_skb, CPL_PRIORITY_DATA, queue); 2025 if (csk_conn_inline(csk)) { 2026 struct l2t_entry *e = csk->l2t_entry; 2027 2028 if (e && sk->sk_state != TCP_SYN_RECV) { 2029 cxgb4_l2t_send(csk->egress_dev, reply_skb, e); 2030 return; 2031 } 2032 } 2033 cxgb4_ofld_send(cdev->lldi->ports[0], reply_skb); 2034 } 2035 2036 static void chtls_send_abort_rpl(struct sock *sk, struct sk_buff *skb, 2037 struct chtls_dev *cdev, 2038 int status, int queue) 2039 { 2040 struct cpl_abort_req_rss *req = cplhdr(skb) + RSS_HDR; 2041 struct sk_buff *reply_skb; 2042 struct chtls_sock *csk; 2043 unsigned int tid; 2044 2045 csk = rcu_dereference_sk_user_data(sk); 2046 tid = GET_TID(req); 2047 2048 reply_skb = get_cpl_skb(skb, sizeof(struct cpl_abort_rpl), gfp_any()); 2049 if (!reply_skb) { 2050 req->status = (queue << 1) | status; 2051 t4_defer_reply(skb, cdev, send_defer_abort_rpl); 2052 return; 2053 } 2054 2055 set_abort_rpl_wr(reply_skb, tid, status); 2056 kfree_skb(skb); 2057 set_wr_txq(reply_skb, CPL_PRIORITY_DATA, queue); 2058 if (csk_conn_inline(csk)) { 2059 struct l2t_entry *e = csk->l2t_entry; 2060 2061 if (e && sk->sk_state != TCP_SYN_RECV) { 2062 cxgb4_l2t_send(csk->egress_dev, reply_skb, e); 2063 return; 2064 } 2065 } 2066 cxgb4_ofld_send(cdev->lldi->ports[0], reply_skb); 2067 } 2068 2069 /* 2070 * This is run from a listener's backlog to abort a child connection in 2071 * SYN_RCV state (i.e., one on the listener's SYN queue). 2072 */ 2073 static void bl_abort_syn_rcv(struct sock *lsk, struct sk_buff *skb) 2074 { 2075 struct chtls_sock *csk; 2076 struct sock *child; 2077 int queue; 2078 2079 child = skb->sk; 2080 csk = rcu_dereference_sk_user_data(child); 2081 queue = csk->txq_idx; 2082 2083 skb->sk = NULL; 2084 do_abort_syn_rcv(child, lsk); 2085 send_abort_rpl(child, skb, BLOG_SKB_CB(skb)->cdev, 2086 CPL_ABORT_NO_RST, queue); 2087 } 2088 2089 static int abort_syn_rcv(struct sock *sk, struct sk_buff *skb) 2090 { 2091 const struct request_sock *oreq; 2092 struct listen_ctx *listen_ctx; 2093 struct chtls_sock *csk; 2094 struct chtls_dev *cdev; 2095 struct sock *psk; 2096 void *ctx; 2097 2098 csk = sk->sk_user_data; 2099 oreq = csk->passive_reap_next; 2100 cdev = csk->cdev; 2101 2102 if (!oreq) 2103 return -1; 2104 2105 ctx = lookup_stid(cdev->tids, oreq->ts_recent); 2106 if (!ctx) 2107 return -1; 2108 2109 listen_ctx = (struct listen_ctx *)ctx; 2110 psk = listen_ctx->lsk; 2111 2112 bh_lock_sock(psk); 2113 if (!sock_owned_by_user(psk)) { 2114 int queue = csk->txq_idx; 2115 2116 do_abort_syn_rcv(sk, psk); 2117 send_abort_rpl(sk, skb, cdev, CPL_ABORT_NO_RST, queue); 2118 } else { 2119 skb->sk = sk; 2120 BLOG_SKB_CB(skb)->backlog_rcv = bl_abort_syn_rcv; 2121 __sk_add_backlog(psk, skb); 2122 } 2123 bh_unlock_sock(psk); 2124 return 0; 2125 } 2126 2127 static void chtls_abort_req_rss(struct sock *sk, struct sk_buff *skb) 2128 { 2129 const struct cpl_abort_req_rss *req = cplhdr(skb) + RSS_HDR; 2130 struct chtls_sock *csk = sk->sk_user_data; 2131 int rst_status = CPL_ABORT_NO_RST; 2132 int queue = csk->txq_idx; 2133 2134 if (is_neg_adv(req->status)) { 2135 if (sk->sk_state == TCP_SYN_RECV) 2136 chtls_set_tcb_tflag(sk, 0, 0); 2137 2138 kfree_skb(skb); 2139 return; 2140 } 2141 2142 csk_reset_flag(csk, CSK_ABORT_REQ_RCVD); 2143 2144 if (!csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN) && 2145 !csk_flag_nochk(csk, CSK_TX_DATA_SENT)) { 2146 struct tcp_sock *tp = tcp_sk(sk); 2147 2148 if (send_tx_flowc_wr(sk, 0, tp->snd_nxt, tp->rcv_nxt) < 0) 2149 WARN_ONCE(1, "send_tx_flowc error"); 2150 csk_set_flag(csk, CSK_TX_DATA_SENT); 2151 } 2152 2153 csk_set_flag(csk, CSK_ABORT_SHUTDOWN); 2154 2155 if (!csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) { 2156 sk->sk_err = ETIMEDOUT; 2157 2158 if (!sock_flag(sk, SOCK_DEAD)) 2159 sk->sk_error_report(sk); 2160 2161 if (sk->sk_state == TCP_SYN_RECV && !abort_syn_rcv(sk, skb)) 2162 return; 2163 2164 chtls_release_resources(sk); 2165 chtls_conn_done(sk); 2166 } 2167 2168 chtls_send_abort_rpl(sk, skb, BLOG_SKB_CB(skb)->cdev, 2169 rst_status, queue); 2170 } 2171 2172 static void chtls_abort_rpl_rss(struct sock *sk, struct sk_buff *skb) 2173 { 2174 struct cpl_abort_rpl_rss *rpl = cplhdr(skb) + RSS_HDR; 2175 struct chtls_sock *csk; 2176 struct chtls_dev *cdev; 2177 2178 csk = rcu_dereference_sk_user_data(sk); 2179 cdev = csk->cdev; 2180 2181 if (csk_flag_nochk(csk, CSK_ABORT_RPL_PENDING)) { 2182 csk_reset_flag(csk, CSK_ABORT_RPL_PENDING); 2183 if (!csk_flag_nochk(csk, CSK_ABORT_REQ_RCVD)) { 2184 if (sk->sk_state == TCP_SYN_SENT) { 2185 cxgb4_remove_tid(cdev->tids, 2186 csk->port_id, 2187 GET_TID(rpl), 2188 sk->sk_family); 2189 sock_put(sk); 2190 } 2191 chtls_release_resources(sk); 2192 chtls_conn_done(sk); 2193 } 2194 } 2195 kfree_skb(skb); 2196 } 2197 2198 static int chtls_conn_cpl(struct chtls_dev *cdev, struct sk_buff *skb) 2199 { 2200 struct cpl_peer_close *req = cplhdr(skb) + RSS_HDR; 2201 void (*fn)(struct sock *sk, struct sk_buff *skb); 2202 unsigned int hwtid = GET_TID(req); 2203 struct chtls_sock *csk; 2204 struct sock *sk; 2205 u8 opcode; 2206 2207 opcode = ((const struct rss_header *)cplhdr(skb))->opcode; 2208 2209 sk = lookup_tid(cdev->tids, hwtid); 2210 if (!sk) 2211 goto rel_skb; 2212 2213 csk = sk->sk_user_data; 2214 2215 switch (opcode) { 2216 case CPL_PEER_CLOSE: 2217 fn = chtls_peer_close; 2218 break; 2219 case CPL_CLOSE_CON_RPL: 2220 fn = chtls_close_con_rpl; 2221 break; 2222 case CPL_ABORT_REQ_RSS: 2223 /* 2224 * Save the offload device in the skb, we may process this 2225 * message after the socket has closed. 2226 */ 2227 BLOG_SKB_CB(skb)->cdev = csk->cdev; 2228 fn = chtls_abort_req_rss; 2229 break; 2230 case CPL_ABORT_RPL_RSS: 2231 fn = chtls_abort_rpl_rss; 2232 break; 2233 default: 2234 goto rel_skb; 2235 } 2236 2237 process_cpl_msg(fn, sk, skb); 2238 return 0; 2239 2240 rel_skb: 2241 kfree_skb(skb); 2242 return 0; 2243 } 2244 2245 static void chtls_rx_ack(struct sock *sk, struct sk_buff *skb) 2246 { 2247 struct cpl_fw4_ack *hdr = cplhdr(skb) + RSS_HDR; 2248 struct chtls_sock *csk = sk->sk_user_data; 2249 struct tcp_sock *tp = tcp_sk(sk); 2250 u32 credits = hdr->credits; 2251 u32 snd_una; 2252 2253 snd_una = ntohl(hdr->snd_una); 2254 csk->wr_credits += credits; 2255 2256 if (csk->wr_unacked > csk->wr_max_credits - csk->wr_credits) 2257 csk->wr_unacked = csk->wr_max_credits - csk->wr_credits; 2258 2259 while (credits) { 2260 struct sk_buff *pskb = csk->wr_skb_head; 2261 u32 csum; 2262 2263 if (unlikely(!pskb)) { 2264 if (csk->wr_nondata) 2265 csk->wr_nondata -= credits; 2266 break; 2267 } 2268 csum = (__force u32)pskb->csum; 2269 if (unlikely(credits < csum)) { 2270 pskb->csum = (__force __wsum)(csum - credits); 2271 break; 2272 } 2273 dequeue_wr(sk); 2274 credits -= csum; 2275 kfree_skb(pskb); 2276 } 2277 if (hdr->seq_vld & CPL_FW4_ACK_FLAGS_SEQVAL) { 2278 if (unlikely(before(snd_una, tp->snd_una))) { 2279 kfree_skb(skb); 2280 return; 2281 } 2282 2283 if (tp->snd_una != snd_una) { 2284 tp->snd_una = snd_una; 2285 tp->rcv_tstamp = tcp_time_stamp(tp); 2286 if (tp->snd_una == tp->snd_nxt && 2287 !csk_flag_nochk(csk, CSK_TX_FAILOVER)) 2288 csk_reset_flag(csk, CSK_TX_WAIT_IDLE); 2289 } 2290 } 2291 2292 if (hdr->seq_vld & CPL_FW4_ACK_FLAGS_CH) { 2293 unsigned int fclen16 = roundup(failover_flowc_wr_len, 16); 2294 2295 csk->wr_credits -= fclen16; 2296 csk_reset_flag(csk, CSK_TX_WAIT_IDLE); 2297 csk_reset_flag(csk, CSK_TX_FAILOVER); 2298 } 2299 if (skb_queue_len(&csk->txq) && chtls_push_frames(csk, 0)) 2300 sk->sk_write_space(sk); 2301 2302 kfree_skb(skb); 2303 } 2304 2305 static int chtls_wr_ack(struct chtls_dev *cdev, struct sk_buff *skb) 2306 { 2307 struct cpl_fw4_ack *rpl = cplhdr(skb) + RSS_HDR; 2308 unsigned int hwtid = GET_TID(rpl); 2309 struct sock *sk; 2310 2311 sk = lookup_tid(cdev->tids, hwtid); 2312 if (unlikely(!sk)) { 2313 pr_err("can't find conn. for hwtid %u.\n", hwtid); 2314 return -EINVAL; 2315 } 2316 process_cpl_msg(chtls_rx_ack, sk, skb); 2317 2318 return 0; 2319 } 2320 2321 chtls_handler_func chtls_handlers[NUM_CPL_CMDS] = { 2322 [CPL_PASS_OPEN_RPL] = chtls_pass_open_rpl, 2323 [CPL_CLOSE_LISTSRV_RPL] = chtls_close_listsrv_rpl, 2324 [CPL_PASS_ACCEPT_REQ] = chtls_pass_accept_req, 2325 [CPL_PASS_ESTABLISH] = chtls_pass_establish, 2326 [CPL_RX_DATA] = chtls_rx_data, 2327 [CPL_TLS_DATA] = chtls_rx_pdu, 2328 [CPL_RX_TLS_CMP] = chtls_rx_cmp, 2329 [CPL_PEER_CLOSE] = chtls_conn_cpl, 2330 [CPL_CLOSE_CON_RPL] = chtls_conn_cpl, 2331 [CPL_ABORT_REQ_RSS] = chtls_conn_cpl, 2332 [CPL_ABORT_RPL_RSS] = chtls_conn_cpl, 2333 [CPL_FW4_ACK] = chtls_wr_ack, 2334 }; 2335