1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* AF_RXRPC sendmsg() implementation. 3 * 4 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9 10 #include <linux/net.h> 11 #include <linux/gfp.h> 12 #include <linux/skbuff.h> 13 #include <linux/export.h> 14 #include <linux/sched/signal.h> 15 16 #include <net/sock.h> 17 #include <net/af_rxrpc.h> 18 #include "ar-internal.h" 19 20 /* 21 * Wait for space to appear in the Tx queue or a signal to occur. 22 */ 23 static int rxrpc_wait_for_tx_window_intr(struct rxrpc_sock *rx, 24 struct rxrpc_call *call, 25 long *timeo) 26 { 27 for (;;) { 28 set_current_state(TASK_INTERRUPTIBLE); 29 if (call->tx_top - call->tx_hard_ack < 30 min_t(unsigned int, call->tx_winsize, 31 call->cong_cwnd + call->cong_extra)) 32 return 0; 33 34 if (call->state >= RXRPC_CALL_COMPLETE) 35 return call->error; 36 37 if (signal_pending(current)) 38 return sock_intr_errno(*timeo); 39 40 trace_rxrpc_transmit(call, rxrpc_transmit_wait); 41 mutex_unlock(&call->user_mutex); 42 *timeo = schedule_timeout(*timeo); 43 if (mutex_lock_interruptible(&call->user_mutex) < 0) 44 return sock_intr_errno(*timeo); 45 } 46 } 47 48 /* 49 * Wait for space to appear in the Tx queue uninterruptibly, but with 50 * a timeout of 2*RTT if no progress was made and a signal occurred. 51 */ 52 static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, 53 struct rxrpc_call *call) 54 { 55 rxrpc_seq_t tx_start, tx_win; 56 signed long rtt2, timeout; 57 u64 rtt; 58 59 rtt = READ_ONCE(call->peer->rtt); 60 rtt2 = nsecs_to_jiffies64(rtt) * 2; 61 if (rtt2 < 1) 62 rtt2 = 1; 63 64 timeout = rtt2; 65 tx_start = READ_ONCE(call->tx_hard_ack); 66 67 for (;;) { 68 set_current_state(TASK_UNINTERRUPTIBLE); 69 70 tx_win = READ_ONCE(call->tx_hard_ack); 71 if (call->tx_top - tx_win < 72 min_t(unsigned int, call->tx_winsize, 73 call->cong_cwnd + call->cong_extra)) 74 return 0; 75 76 if (call->state >= RXRPC_CALL_COMPLETE) 77 return call->error; 78 79 if (test_bit(RXRPC_CALL_IS_INTR, &call->flags) && 80 timeout == 0 && 81 tx_win == tx_start && signal_pending(current)) 82 return -EINTR; 83 84 if (tx_win != tx_start) { 85 timeout = rtt2; 86 tx_start = tx_win; 87 } 88 89 trace_rxrpc_transmit(call, rxrpc_transmit_wait); 90 timeout = schedule_timeout(timeout); 91 } 92 } 93 94 /* 95 * wait for space to appear in the transmit/ACK window 96 * - caller holds the socket locked 97 */ 98 static int rxrpc_wait_for_tx_window(struct rxrpc_sock *rx, 99 struct rxrpc_call *call, 100 long *timeo, 101 bool waitall) 102 { 103 DECLARE_WAITQUEUE(myself, current); 104 int ret; 105 106 _enter(",{%u,%u,%u}", 107 call->tx_hard_ack, call->tx_top, call->tx_winsize); 108 109 add_wait_queue(&call->waitq, &myself); 110 111 if (waitall) 112 ret = rxrpc_wait_for_tx_window_nonintr(rx, call); 113 else 114 ret = rxrpc_wait_for_tx_window_intr(rx, call, timeo); 115 116 remove_wait_queue(&call->waitq, &myself); 117 set_current_state(TASK_RUNNING); 118 _leave(" = %d", ret); 119 return ret; 120 } 121 122 /* 123 * Schedule an instant Tx resend. 124 */ 125 static inline void rxrpc_instant_resend(struct rxrpc_call *call, int ix) 126 { 127 spin_lock_bh(&call->lock); 128 129 if (call->state < RXRPC_CALL_COMPLETE) { 130 call->rxtx_annotations[ix] = 131 (call->rxtx_annotations[ix] & RXRPC_TX_ANNO_LAST) | 132 RXRPC_TX_ANNO_RETRANS; 133 if (!test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events)) 134 rxrpc_queue_call(call); 135 } 136 137 spin_unlock_bh(&call->lock); 138 } 139 140 /* 141 * Notify the owner of the call that the transmit phase is ended and the last 142 * packet has been queued. 143 */ 144 static void rxrpc_notify_end_tx(struct rxrpc_sock *rx, struct rxrpc_call *call, 145 rxrpc_notify_end_tx_t notify_end_tx) 146 { 147 if (notify_end_tx) 148 notify_end_tx(&rx->sk, call, call->user_call_ID); 149 } 150 151 /* 152 * Queue a DATA packet for transmission, set the resend timeout and send 153 * the packet immediately. Returns the error from rxrpc_send_data_packet() 154 * in case the caller wants to do something with it. 155 */ 156 static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call, 157 struct sk_buff *skb, bool last, 158 rxrpc_notify_end_tx_t notify_end_tx) 159 { 160 struct rxrpc_skb_priv *sp = rxrpc_skb(skb); 161 unsigned long now; 162 rxrpc_seq_t seq = sp->hdr.seq; 163 int ret, ix; 164 u8 annotation = RXRPC_TX_ANNO_UNACK; 165 166 _net("queue skb %p [%d]", skb, seq); 167 168 ASSERTCMP(seq, ==, call->tx_top + 1); 169 170 if (last) 171 annotation |= RXRPC_TX_ANNO_LAST; 172 173 /* We have to set the timestamp before queueing as the retransmit 174 * algorithm can see the packet as soon as we queue it. 175 */ 176 skb->tstamp = ktime_get_real(); 177 178 ix = seq & RXRPC_RXTX_BUFF_MASK; 179 rxrpc_get_skb(skb, rxrpc_skb_got); 180 call->rxtx_annotations[ix] = annotation; 181 smp_wmb(); 182 call->rxtx_buffer[ix] = skb; 183 call->tx_top = seq; 184 if (last) 185 trace_rxrpc_transmit(call, rxrpc_transmit_queue_last); 186 else 187 trace_rxrpc_transmit(call, rxrpc_transmit_queue); 188 189 if (last || call->state == RXRPC_CALL_SERVER_ACK_REQUEST) { 190 _debug("________awaiting reply/ACK__________"); 191 write_lock_bh(&call->state_lock); 192 switch (call->state) { 193 case RXRPC_CALL_CLIENT_SEND_REQUEST: 194 call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY; 195 rxrpc_notify_end_tx(rx, call, notify_end_tx); 196 break; 197 case RXRPC_CALL_SERVER_ACK_REQUEST: 198 call->state = RXRPC_CALL_SERVER_SEND_REPLY; 199 now = jiffies; 200 WRITE_ONCE(call->ack_at, now + MAX_JIFFY_OFFSET); 201 if (call->ackr_reason == RXRPC_ACK_DELAY) 202 call->ackr_reason = 0; 203 trace_rxrpc_timer(call, rxrpc_timer_init_for_send_reply, now); 204 if (!last) 205 break; 206 /* Fall through */ 207 case RXRPC_CALL_SERVER_SEND_REPLY: 208 call->state = RXRPC_CALL_SERVER_AWAIT_ACK; 209 rxrpc_notify_end_tx(rx, call, notify_end_tx); 210 break; 211 default: 212 break; 213 } 214 write_unlock_bh(&call->state_lock); 215 } 216 217 if (seq == 1 && rxrpc_is_client_call(call)) 218 rxrpc_expose_client_call(call); 219 220 ret = rxrpc_send_data_packet(call, skb, false); 221 if (ret < 0) { 222 switch (ret) { 223 case -ENETUNREACH: 224 case -EHOSTUNREACH: 225 case -ECONNREFUSED: 226 rxrpc_set_call_completion(call, 227 RXRPC_CALL_LOCAL_ERROR, 228 0, ret); 229 rxrpc_notify_socket(call); 230 goto out; 231 } 232 _debug("need instant resend %d", ret); 233 rxrpc_instant_resend(call, ix); 234 } else { 235 unsigned long now = jiffies, resend_at; 236 237 if (call->peer->rtt_usage > 1) 238 resend_at = nsecs_to_jiffies(call->peer->rtt * 3 / 2); 239 else 240 resend_at = rxrpc_resend_timeout; 241 if (resend_at < 1) 242 resend_at = 1; 243 244 resend_at += now; 245 WRITE_ONCE(call->resend_at, resend_at); 246 rxrpc_reduce_call_timer(call, resend_at, now, 247 rxrpc_timer_set_for_send); 248 } 249 250 out: 251 rxrpc_free_skb(skb, rxrpc_skb_freed); 252 _leave(" = %d", ret); 253 return ret; 254 } 255 256 /* 257 * send data through a socket 258 * - must be called in process context 259 * - The caller holds the call user access mutex, but not the socket lock. 260 */ 261 static int rxrpc_send_data(struct rxrpc_sock *rx, 262 struct rxrpc_call *call, 263 struct msghdr *msg, size_t len, 264 rxrpc_notify_end_tx_t notify_end_tx) 265 { 266 struct rxrpc_skb_priv *sp; 267 struct sk_buff *skb; 268 struct sock *sk = &rx->sk; 269 long timeo; 270 bool more; 271 int ret, copied; 272 273 timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); 274 275 /* this should be in poll */ 276 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk); 277 278 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN)) 279 return -EPIPE; 280 281 more = msg->msg_flags & MSG_MORE; 282 283 if (call->tx_total_len != -1) { 284 if (len > call->tx_total_len) 285 return -EMSGSIZE; 286 if (!more && len != call->tx_total_len) 287 return -EMSGSIZE; 288 } 289 290 skb = call->tx_pending; 291 call->tx_pending = NULL; 292 rxrpc_see_skb(skb, rxrpc_skb_seen); 293 294 copied = 0; 295 do { 296 /* Check to see if there's a ping ACK to reply to. */ 297 if (call->ackr_reason == RXRPC_ACK_PING_RESPONSE) 298 rxrpc_send_ack_packet(call, false, NULL); 299 300 if (!skb) { 301 size_t size, chunk, max, space; 302 303 _debug("alloc"); 304 305 if (call->tx_top - call->tx_hard_ack >= 306 min_t(unsigned int, call->tx_winsize, 307 call->cong_cwnd + call->cong_extra)) { 308 ret = -EAGAIN; 309 if (msg->msg_flags & MSG_DONTWAIT) 310 goto maybe_error; 311 ret = rxrpc_wait_for_tx_window(rx, call, 312 &timeo, 313 msg->msg_flags & MSG_WAITALL); 314 if (ret < 0) 315 goto maybe_error; 316 } 317 318 max = RXRPC_JUMBO_DATALEN; 319 max -= call->conn->security_size; 320 max &= ~(call->conn->size_align - 1UL); 321 322 chunk = max; 323 if (chunk > msg_data_left(msg) && !more) 324 chunk = msg_data_left(msg); 325 326 space = chunk + call->conn->size_align; 327 space &= ~(call->conn->size_align - 1UL); 328 329 size = space + call->conn->security_size; 330 331 _debug("SIZE: %zu/%zu/%zu", chunk, space, size); 332 333 /* create a buffer that we can retain until it's ACK'd */ 334 skb = sock_alloc_send_skb( 335 sk, size, msg->msg_flags & MSG_DONTWAIT, &ret); 336 if (!skb) 337 goto maybe_error; 338 339 sp = rxrpc_skb(skb); 340 sp->rx_flags |= RXRPC_SKB_TX_BUFFER; 341 rxrpc_new_skb(skb, rxrpc_skb_new); 342 343 _debug("ALLOC SEND %p", skb); 344 345 ASSERTCMP(skb->mark, ==, 0); 346 347 _debug("HS: %u", call->conn->security_size); 348 skb_reserve(skb, call->conn->security_size); 349 skb->len += call->conn->security_size; 350 351 sp->remain = chunk; 352 if (sp->remain > skb_tailroom(skb)) 353 sp->remain = skb_tailroom(skb); 354 355 _net("skb: hr %d, tr %d, hl %d, rm %d", 356 skb_headroom(skb), 357 skb_tailroom(skb), 358 skb_headlen(skb), 359 sp->remain); 360 361 skb->ip_summed = CHECKSUM_UNNECESSARY; 362 } 363 364 _debug("append"); 365 sp = rxrpc_skb(skb); 366 367 /* append next segment of data to the current buffer */ 368 if (msg_data_left(msg) > 0) { 369 int copy = skb_tailroom(skb); 370 ASSERTCMP(copy, >, 0); 371 if (copy > msg_data_left(msg)) 372 copy = msg_data_left(msg); 373 if (copy > sp->remain) 374 copy = sp->remain; 375 376 _debug("add"); 377 ret = skb_add_data(skb, &msg->msg_iter, copy); 378 _debug("added"); 379 if (ret < 0) 380 goto efault; 381 sp->remain -= copy; 382 skb->mark += copy; 383 copied += copy; 384 if (call->tx_total_len != -1) 385 call->tx_total_len -= copy; 386 } 387 388 /* check for the far side aborting the call or a network error 389 * occurring */ 390 if (call->state == RXRPC_CALL_COMPLETE) 391 goto call_terminated; 392 393 /* add the packet to the send queue if it's now full */ 394 if (sp->remain <= 0 || 395 (msg_data_left(msg) == 0 && !more)) { 396 struct rxrpc_connection *conn = call->conn; 397 uint32_t seq; 398 size_t pad; 399 400 /* pad out if we're using security */ 401 if (conn->security_ix) { 402 pad = conn->security_size + skb->mark; 403 pad = conn->size_align - pad; 404 pad &= conn->size_align - 1; 405 _debug("pad %zu", pad); 406 if (pad) 407 skb_put_zero(skb, pad); 408 } 409 410 seq = call->tx_top + 1; 411 412 sp->hdr.seq = seq; 413 sp->hdr._rsvd = 0; 414 sp->hdr.flags = conn->out_clientflag; 415 416 if (msg_data_left(msg) == 0 && !more) 417 sp->hdr.flags |= RXRPC_LAST_PACKET; 418 else if (call->tx_top - call->tx_hard_ack < 419 call->tx_winsize) 420 sp->hdr.flags |= RXRPC_MORE_PACKETS; 421 422 ret = call->security->secure_packet( 423 call, skb, skb->mark, skb->head); 424 if (ret < 0) 425 goto out; 426 427 ret = rxrpc_queue_packet(rx, call, skb, 428 !msg_data_left(msg) && !more, 429 notify_end_tx); 430 /* Should check for failure here */ 431 skb = NULL; 432 } 433 } while (msg_data_left(msg) > 0); 434 435 success: 436 ret = copied; 437 out: 438 call->tx_pending = skb; 439 _leave(" = %d", ret); 440 return ret; 441 442 call_terminated: 443 rxrpc_free_skb(skb, rxrpc_skb_freed); 444 _leave(" = %d", call->error); 445 return call->error; 446 447 maybe_error: 448 if (copied) 449 goto success; 450 goto out; 451 452 efault: 453 ret = -EFAULT; 454 goto out; 455 } 456 457 /* 458 * extract control messages from the sendmsg() control buffer 459 */ 460 static int rxrpc_sendmsg_cmsg(struct msghdr *msg, struct rxrpc_send_params *p) 461 { 462 struct cmsghdr *cmsg; 463 bool got_user_ID = false; 464 int len; 465 466 if (msg->msg_controllen == 0) 467 return -EINVAL; 468 469 for_each_cmsghdr(cmsg, msg) { 470 if (!CMSG_OK(msg, cmsg)) 471 return -EINVAL; 472 473 len = cmsg->cmsg_len - sizeof(struct cmsghdr); 474 _debug("CMSG %d, %d, %d", 475 cmsg->cmsg_level, cmsg->cmsg_type, len); 476 477 if (cmsg->cmsg_level != SOL_RXRPC) 478 continue; 479 480 switch (cmsg->cmsg_type) { 481 case RXRPC_USER_CALL_ID: 482 if (msg->msg_flags & MSG_CMSG_COMPAT) { 483 if (len != sizeof(u32)) 484 return -EINVAL; 485 p->call.user_call_ID = *(u32 *)CMSG_DATA(cmsg); 486 } else { 487 if (len != sizeof(unsigned long)) 488 return -EINVAL; 489 p->call.user_call_ID = *(unsigned long *) 490 CMSG_DATA(cmsg); 491 } 492 got_user_ID = true; 493 break; 494 495 case RXRPC_ABORT: 496 if (p->command != RXRPC_CMD_SEND_DATA) 497 return -EINVAL; 498 p->command = RXRPC_CMD_SEND_ABORT; 499 if (len != sizeof(p->abort_code)) 500 return -EINVAL; 501 p->abort_code = *(unsigned int *)CMSG_DATA(cmsg); 502 if (p->abort_code == 0) 503 return -EINVAL; 504 break; 505 506 case RXRPC_ACCEPT: 507 if (p->command != RXRPC_CMD_SEND_DATA) 508 return -EINVAL; 509 p->command = RXRPC_CMD_ACCEPT; 510 if (len != 0) 511 return -EINVAL; 512 break; 513 514 case RXRPC_EXCLUSIVE_CALL: 515 p->exclusive = true; 516 if (len != 0) 517 return -EINVAL; 518 break; 519 520 case RXRPC_UPGRADE_SERVICE: 521 p->upgrade = true; 522 if (len != 0) 523 return -EINVAL; 524 break; 525 526 case RXRPC_TX_LENGTH: 527 if (p->call.tx_total_len != -1 || len != sizeof(__s64)) 528 return -EINVAL; 529 p->call.tx_total_len = *(__s64 *)CMSG_DATA(cmsg); 530 if (p->call.tx_total_len < 0) 531 return -EINVAL; 532 break; 533 534 case RXRPC_SET_CALL_TIMEOUT: 535 if (len & 3 || len < 4 || len > 12) 536 return -EINVAL; 537 memcpy(&p->call.timeouts, CMSG_DATA(cmsg), len); 538 p->call.nr_timeouts = len / 4; 539 if (p->call.timeouts.hard > INT_MAX / HZ) 540 return -ERANGE; 541 if (p->call.nr_timeouts >= 2 && p->call.timeouts.idle > 60 * 60 * 1000) 542 return -ERANGE; 543 if (p->call.nr_timeouts >= 3 && p->call.timeouts.normal > 60 * 60 * 1000) 544 return -ERANGE; 545 break; 546 547 default: 548 return -EINVAL; 549 } 550 } 551 552 if (!got_user_ID) 553 return -EINVAL; 554 if (p->call.tx_total_len != -1 && p->command != RXRPC_CMD_SEND_DATA) 555 return -EINVAL; 556 _leave(" = 0"); 557 return 0; 558 } 559 560 /* 561 * Create a new client call for sendmsg(). 562 * - Called with the socket lock held, which it must release. 563 * - If it returns a call, the call's lock will need releasing by the caller. 564 */ 565 static struct rxrpc_call * 566 rxrpc_new_client_call_for_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, 567 struct rxrpc_send_params *p) 568 __releases(&rx->sk.sk_lock.slock) 569 __acquires(&call->user_mutex) 570 { 571 struct rxrpc_conn_parameters cp; 572 struct rxrpc_call *call; 573 struct key *key; 574 575 DECLARE_SOCKADDR(struct sockaddr_rxrpc *, srx, msg->msg_name); 576 577 _enter(""); 578 579 if (!msg->msg_name) { 580 release_sock(&rx->sk); 581 return ERR_PTR(-EDESTADDRREQ); 582 } 583 584 key = rx->key; 585 if (key && !rx->key->payload.data[0]) 586 key = NULL; 587 588 memset(&cp, 0, sizeof(cp)); 589 cp.local = rx->local; 590 cp.key = rx->key; 591 cp.security_level = rx->min_sec_level; 592 cp.exclusive = rx->exclusive | p->exclusive; 593 cp.upgrade = p->upgrade; 594 cp.service_id = srx->srx_service; 595 call = rxrpc_new_client_call(rx, &cp, srx, &p->call, GFP_KERNEL, 596 atomic_inc_return(&rxrpc_debug_id)); 597 /* The socket is now unlocked */ 598 599 rxrpc_put_peer(cp.peer); 600 _leave(" = %p\n", call); 601 return call; 602 } 603 604 /* 605 * send a message forming part of a client call through an RxRPC socket 606 * - caller holds the socket locked 607 * - the socket may be either a client socket or a server socket 608 */ 609 int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len) 610 __releases(&rx->sk.sk_lock.slock) 611 __releases(&call->user_mutex) 612 { 613 enum rxrpc_call_state state; 614 struct rxrpc_call *call; 615 unsigned long now, j; 616 int ret; 617 618 struct rxrpc_send_params p = { 619 .call.tx_total_len = -1, 620 .call.user_call_ID = 0, 621 .call.nr_timeouts = 0, 622 .call.intr = true, 623 .abort_code = 0, 624 .command = RXRPC_CMD_SEND_DATA, 625 .exclusive = false, 626 .upgrade = false, 627 }; 628 629 _enter(""); 630 631 ret = rxrpc_sendmsg_cmsg(msg, &p); 632 if (ret < 0) 633 goto error_release_sock; 634 635 if (p.command == RXRPC_CMD_ACCEPT) { 636 ret = -EINVAL; 637 if (rx->sk.sk_state != RXRPC_SERVER_LISTENING) 638 goto error_release_sock; 639 call = rxrpc_accept_call(rx, p.call.user_call_ID, NULL); 640 /* The socket is now unlocked. */ 641 if (IS_ERR(call)) 642 return PTR_ERR(call); 643 ret = 0; 644 goto out_put_unlock; 645 } 646 647 call = rxrpc_find_call_by_user_ID(rx, p.call.user_call_ID); 648 if (!call) { 649 ret = -EBADSLT; 650 if (p.command != RXRPC_CMD_SEND_DATA) 651 goto error_release_sock; 652 call = rxrpc_new_client_call_for_sendmsg(rx, msg, &p); 653 /* The socket is now unlocked... */ 654 if (IS_ERR(call)) 655 return PTR_ERR(call); 656 /* ... and we have the call lock. */ 657 } else { 658 switch (READ_ONCE(call->state)) { 659 case RXRPC_CALL_UNINITIALISED: 660 case RXRPC_CALL_CLIENT_AWAIT_CONN: 661 case RXRPC_CALL_SERVER_PREALLOC: 662 case RXRPC_CALL_SERVER_SECURING: 663 case RXRPC_CALL_SERVER_ACCEPTING: 664 rxrpc_put_call(call, rxrpc_call_put); 665 ret = -EBUSY; 666 goto error_release_sock; 667 default: 668 break; 669 } 670 671 ret = mutex_lock_interruptible(&call->user_mutex); 672 release_sock(&rx->sk); 673 if (ret < 0) { 674 ret = -ERESTARTSYS; 675 goto error_put; 676 } 677 678 if (p.call.tx_total_len != -1) { 679 ret = -EINVAL; 680 if (call->tx_total_len != -1 || 681 call->tx_pending || 682 call->tx_top != 0) 683 goto error_put; 684 call->tx_total_len = p.call.tx_total_len; 685 } 686 } 687 688 switch (p.call.nr_timeouts) { 689 case 3: 690 j = msecs_to_jiffies(p.call.timeouts.normal); 691 if (p.call.timeouts.normal > 0 && j == 0) 692 j = 1; 693 WRITE_ONCE(call->next_rx_timo, j); 694 /* Fall through */ 695 case 2: 696 j = msecs_to_jiffies(p.call.timeouts.idle); 697 if (p.call.timeouts.idle > 0 && j == 0) 698 j = 1; 699 WRITE_ONCE(call->next_req_timo, j); 700 /* Fall through */ 701 case 1: 702 if (p.call.timeouts.hard > 0) { 703 j = msecs_to_jiffies(p.call.timeouts.hard); 704 now = jiffies; 705 j += now; 706 WRITE_ONCE(call->expect_term_by, j); 707 rxrpc_reduce_call_timer(call, j, now, 708 rxrpc_timer_set_for_hard); 709 } 710 break; 711 } 712 713 state = READ_ONCE(call->state); 714 _debug("CALL %d USR %lx ST %d on CONN %p", 715 call->debug_id, call->user_call_ID, state, call->conn); 716 717 if (state >= RXRPC_CALL_COMPLETE) { 718 /* it's too late for this call */ 719 ret = -ESHUTDOWN; 720 } else if (p.command == RXRPC_CMD_SEND_ABORT) { 721 ret = 0; 722 if (rxrpc_abort_call("CMD", call, 0, p.abort_code, -ECONNABORTED)) 723 ret = rxrpc_send_abort_packet(call); 724 } else if (p.command != RXRPC_CMD_SEND_DATA) { 725 ret = -EINVAL; 726 } else if (rxrpc_is_client_call(call) && 727 state != RXRPC_CALL_CLIENT_SEND_REQUEST) { 728 /* request phase complete for this client call */ 729 ret = -EPROTO; 730 } else if (rxrpc_is_service_call(call) && 731 state != RXRPC_CALL_SERVER_ACK_REQUEST && 732 state != RXRPC_CALL_SERVER_SEND_REPLY) { 733 /* Reply phase not begun or not complete for service call. */ 734 ret = -EPROTO; 735 } else { 736 ret = rxrpc_send_data(rx, call, msg, len, NULL); 737 } 738 739 out_put_unlock: 740 mutex_unlock(&call->user_mutex); 741 error_put: 742 rxrpc_put_call(call, rxrpc_call_put); 743 _leave(" = %d", ret); 744 return ret; 745 746 error_release_sock: 747 release_sock(&rx->sk); 748 return ret; 749 } 750 751 /** 752 * rxrpc_kernel_send_data - Allow a kernel service to send data on a call 753 * @sock: The socket the call is on 754 * @call: The call to send data through 755 * @msg: The data to send 756 * @len: The amount of data to send 757 * @notify_end_tx: Notification that the last packet is queued. 758 * 759 * Allow a kernel service to send data on a call. The call must be in an state 760 * appropriate to sending data. No control data should be supplied in @msg, 761 * nor should an address be supplied. MSG_MORE should be flagged if there's 762 * more data to come, otherwise this data will end the transmission phase. 763 */ 764 int rxrpc_kernel_send_data(struct socket *sock, struct rxrpc_call *call, 765 struct msghdr *msg, size_t len, 766 rxrpc_notify_end_tx_t notify_end_tx) 767 { 768 int ret; 769 770 _enter("{%d,%s},", call->debug_id, rxrpc_call_states[call->state]); 771 772 ASSERTCMP(msg->msg_name, ==, NULL); 773 ASSERTCMP(msg->msg_control, ==, NULL); 774 775 mutex_lock(&call->user_mutex); 776 777 _debug("CALL %d USR %lx ST %d on CONN %p", 778 call->debug_id, call->user_call_ID, call->state, call->conn); 779 780 switch (READ_ONCE(call->state)) { 781 case RXRPC_CALL_CLIENT_SEND_REQUEST: 782 case RXRPC_CALL_SERVER_ACK_REQUEST: 783 case RXRPC_CALL_SERVER_SEND_REPLY: 784 ret = rxrpc_send_data(rxrpc_sk(sock->sk), call, msg, len, 785 notify_end_tx); 786 break; 787 case RXRPC_CALL_COMPLETE: 788 read_lock_bh(&call->state_lock); 789 ret = call->error; 790 read_unlock_bh(&call->state_lock); 791 break; 792 default: 793 /* Request phase complete for this client call */ 794 trace_rxrpc_rx_eproto(call, 0, tracepoint_string("late_send")); 795 ret = -EPROTO; 796 break; 797 } 798 799 mutex_unlock(&call->user_mutex); 800 _leave(" = %d", ret); 801 return ret; 802 } 803 EXPORT_SYMBOL(rxrpc_kernel_send_data); 804 805 /** 806 * rxrpc_kernel_abort_call - Allow a kernel service to abort a call 807 * @sock: The socket the call is on 808 * @call: The call to be aborted 809 * @abort_code: The abort code to stick into the ABORT packet 810 * @error: Local error value 811 * @why: 3-char string indicating why. 812 * 813 * Allow a kernel service to abort a call, if it's still in an abortable state 814 * and return true if the call was aborted, false if it was already complete. 815 */ 816 bool rxrpc_kernel_abort_call(struct socket *sock, struct rxrpc_call *call, 817 u32 abort_code, int error, const char *why) 818 { 819 bool aborted; 820 821 _enter("{%d},%d,%d,%s", call->debug_id, abort_code, error, why); 822 823 mutex_lock(&call->user_mutex); 824 825 aborted = rxrpc_abort_call(why, call, 0, abort_code, error); 826 if (aborted) 827 rxrpc_send_abort_packet(call); 828 829 mutex_unlock(&call->user_mutex); 830 return aborted; 831 } 832 EXPORT_SYMBOL(rxrpc_kernel_abort_call); 833 834 /** 835 * rxrpc_kernel_set_tx_length - Set the total Tx length on a call 836 * @sock: The socket the call is on 837 * @call: The call to be informed 838 * @tx_total_len: The amount of data to be transmitted for this call 839 * 840 * Allow a kernel service to set the total transmit length on a call. This 841 * allows buffer-to-packet encrypt-and-copy to be performed. 842 * 843 * This function is primarily for use for setting the reply length since the 844 * request length can be set when beginning the call. 845 */ 846 void rxrpc_kernel_set_tx_length(struct socket *sock, struct rxrpc_call *call, 847 s64 tx_total_len) 848 { 849 WARN_ON(call->tx_total_len != -1); 850 call->tx_total_len = tx_total_len; 851 } 852 EXPORT_SYMBOL(rxrpc_kernel_set_tx_length); 853