1 /* 2 * net/tipc/socket.c: TIPC socket API 3 * 4 * Copyright (c) 2001-2007, Ericsson AB 5 * Copyright (c) 2004-2008, 2010-2011, Wind River Systems 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the names of the copyright holders nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * Alternatively, this software may be distributed under the terms of the 21 * GNU General Public License ("GPL") version 2 as published by the Free 22 * Software Foundation. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 */ 36 37 #include <net/sock.h> 38 39 #include "core.h" 40 #include "port.h" 41 42 #define SS_LISTENING -1 /* socket is listening */ 43 #define SS_READY -2 /* socket is connectionless */ 44 45 #define OVERLOAD_LIMIT_BASE 5000 46 #define CONN_TIMEOUT_DEFAULT 8000 /* default connect timeout = 8s */ 47 48 struct tipc_sock { 49 struct sock sk; 50 struct tipc_port *p; 51 struct tipc_portid peer_name; 52 unsigned int conn_timeout; 53 }; 54 55 #define tipc_sk(sk) ((struct tipc_sock *)(sk)) 56 #define tipc_sk_port(sk) ((struct tipc_port *)(tipc_sk(sk)->p)) 57 58 #define tipc_rx_ready(sock) (!skb_queue_empty(&sock->sk->sk_receive_queue) || \ 59 (sock->state == SS_DISCONNECTING)) 60 61 static int backlog_rcv(struct sock *sk, struct sk_buff *skb); 62 static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf); 63 static void wakeupdispatch(struct tipc_port *tport); 64 65 static const struct proto_ops packet_ops; 66 static const struct proto_ops stream_ops; 67 static const struct proto_ops msg_ops; 68 69 static struct proto tipc_proto; 70 71 static int sockets_enabled; 72 73 static atomic_t tipc_queue_size = ATOMIC_INIT(0); 74 75 /* 76 * Revised TIPC socket locking policy: 77 * 78 * Most socket operations take the standard socket lock when they start 79 * and hold it until they finish (or until they need to sleep). Acquiring 80 * this lock grants the owner exclusive access to the fields of the socket 81 * data structures, with the exception of the backlog queue. A few socket 82 * operations can be done without taking the socket lock because they only 83 * read socket information that never changes during the life of the socket. 84 * 85 * Socket operations may acquire the lock for the associated TIPC port if they 86 * need to perform an operation on the port. If any routine needs to acquire 87 * both the socket lock and the port lock it must take the socket lock first 88 * to avoid the risk of deadlock. 89 * 90 * The dispatcher handling incoming messages cannot grab the socket lock in 91 * the standard fashion, since invoked it runs at the BH level and cannot block. 92 * Instead, it checks to see if the socket lock is currently owned by someone, 93 * and either handles the message itself or adds it to the socket's backlog 94 * queue; in the latter case the queued message is processed once the process 95 * owning the socket lock releases it. 96 * 97 * NOTE: Releasing the socket lock while an operation is sleeping overcomes 98 * the problem of a blocked socket operation preventing any other operations 99 * from occurring. However, applications must be careful if they have 100 * multiple threads trying to send (or receive) on the same socket, as these 101 * operations might interfere with each other. For example, doing a connect 102 * and a receive at the same time might allow the receive to consume the 103 * ACK message meant for the connect. While additional work could be done 104 * to try and overcome this, it doesn't seem to be worthwhile at the present. 105 * 106 * NOTE: Releasing the socket lock while an operation is sleeping also ensures 107 * that another operation that must be performed in a non-blocking manner is 108 * not delayed for very long because the lock has already been taken. 109 * 110 * NOTE: This code assumes that certain fields of a port/socket pair are 111 * constant over its lifetime; such fields can be examined without taking 112 * the socket lock and/or port lock, and do not need to be re-read even 113 * after resuming processing after waiting. These fields include: 114 * - socket type 115 * - pointer to socket sk structure (aka tipc_sock structure) 116 * - pointer to port structure 117 * - port reference 118 */ 119 120 /** 121 * advance_rx_queue - discard first buffer in socket receive queue 122 * 123 * Caller must hold socket lock 124 */ 125 126 static void advance_rx_queue(struct sock *sk) 127 { 128 buf_discard(__skb_dequeue(&sk->sk_receive_queue)); 129 atomic_dec(&tipc_queue_size); 130 } 131 132 /** 133 * discard_rx_queue - discard all buffers in socket receive queue 134 * 135 * Caller must hold socket lock 136 */ 137 138 static void discard_rx_queue(struct sock *sk) 139 { 140 struct sk_buff *buf; 141 142 while ((buf = __skb_dequeue(&sk->sk_receive_queue))) { 143 atomic_dec(&tipc_queue_size); 144 buf_discard(buf); 145 } 146 } 147 148 /** 149 * reject_rx_queue - reject all buffers in socket receive queue 150 * 151 * Caller must hold socket lock 152 */ 153 154 static void reject_rx_queue(struct sock *sk) 155 { 156 struct sk_buff *buf; 157 158 while ((buf = __skb_dequeue(&sk->sk_receive_queue))) { 159 tipc_reject_msg(buf, TIPC_ERR_NO_PORT); 160 atomic_dec(&tipc_queue_size); 161 } 162 } 163 164 /** 165 * tipc_create - create a TIPC socket 166 * @net: network namespace (must be default network) 167 * @sock: pre-allocated socket structure 168 * @protocol: protocol indicator (must be 0) 169 * @kern: caused by kernel or by userspace? 170 * 171 * This routine creates additional data structures used by the TIPC socket, 172 * initializes them, and links them together. 173 * 174 * Returns 0 on success, errno otherwise 175 */ 176 177 static int tipc_create(struct net *net, struct socket *sock, int protocol, 178 int kern) 179 { 180 const struct proto_ops *ops; 181 socket_state state; 182 struct sock *sk; 183 struct tipc_port *tp_ptr; 184 185 /* Validate arguments */ 186 187 if (!net_eq(net, &init_net)) 188 return -EAFNOSUPPORT; 189 190 if (unlikely(protocol != 0)) 191 return -EPROTONOSUPPORT; 192 193 switch (sock->type) { 194 case SOCK_STREAM: 195 ops = &stream_ops; 196 state = SS_UNCONNECTED; 197 break; 198 case SOCK_SEQPACKET: 199 ops = &packet_ops; 200 state = SS_UNCONNECTED; 201 break; 202 case SOCK_DGRAM: 203 case SOCK_RDM: 204 ops = &msg_ops; 205 state = SS_READY; 206 break; 207 default: 208 return -EPROTOTYPE; 209 } 210 211 /* Allocate socket's protocol area */ 212 213 sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto); 214 if (sk == NULL) 215 return -ENOMEM; 216 217 /* Allocate TIPC port for socket to use */ 218 219 tp_ptr = tipc_createport_raw(sk, &dispatch, &wakeupdispatch, 220 TIPC_LOW_IMPORTANCE); 221 if (unlikely(!tp_ptr)) { 222 sk_free(sk); 223 return -ENOMEM; 224 } 225 226 /* Finish initializing socket data structures */ 227 228 sock->ops = ops; 229 sock->state = state; 230 231 sock_init_data(sock, sk); 232 sk->sk_backlog_rcv = backlog_rcv; 233 tipc_sk(sk)->p = tp_ptr; 234 tipc_sk(sk)->conn_timeout = CONN_TIMEOUT_DEFAULT; 235 236 spin_unlock_bh(tp_ptr->lock); 237 238 if (sock->state == SS_READY) { 239 tipc_set_portunreturnable(tp_ptr->ref, 1); 240 if (sock->type == SOCK_DGRAM) 241 tipc_set_portunreliable(tp_ptr->ref, 1); 242 } 243 244 return 0; 245 } 246 247 /** 248 * release - destroy a TIPC socket 249 * @sock: socket to destroy 250 * 251 * This routine cleans up any messages that are still queued on the socket. 252 * For DGRAM and RDM socket types, all queued messages are rejected. 253 * For SEQPACKET and STREAM socket types, the first message is rejected 254 * and any others are discarded. (If the first message on a STREAM socket 255 * is partially-read, it is discarded and the next one is rejected instead.) 256 * 257 * NOTE: Rejected messages are not necessarily returned to the sender! They 258 * are returned or discarded according to the "destination droppable" setting 259 * specified for the message by the sender. 260 * 261 * Returns 0 on success, errno otherwise 262 */ 263 264 static int release(struct socket *sock) 265 { 266 struct sock *sk = sock->sk; 267 struct tipc_port *tport; 268 struct sk_buff *buf; 269 int res; 270 271 /* 272 * Exit if socket isn't fully initialized (occurs when a failed accept() 273 * releases a pre-allocated child socket that was never used) 274 */ 275 276 if (sk == NULL) 277 return 0; 278 279 tport = tipc_sk_port(sk); 280 lock_sock(sk); 281 282 /* 283 * Reject all unreceived messages, except on an active connection 284 * (which disconnects locally & sends a 'FIN+' to peer) 285 */ 286 287 while (sock->state != SS_DISCONNECTING) { 288 buf = __skb_dequeue(&sk->sk_receive_queue); 289 if (buf == NULL) 290 break; 291 atomic_dec(&tipc_queue_size); 292 if (TIPC_SKB_CB(buf)->handle != 0) 293 buf_discard(buf); 294 else { 295 if ((sock->state == SS_CONNECTING) || 296 (sock->state == SS_CONNECTED)) { 297 sock->state = SS_DISCONNECTING; 298 tipc_disconnect(tport->ref); 299 } 300 tipc_reject_msg(buf, TIPC_ERR_NO_PORT); 301 } 302 } 303 304 /* 305 * Delete TIPC port; this ensures no more messages are queued 306 * (also disconnects an active connection & sends a 'FIN-' to peer) 307 */ 308 309 res = tipc_deleteport(tport->ref); 310 311 /* Discard any remaining (connection-based) messages in receive queue */ 312 313 discard_rx_queue(sk); 314 315 /* Reject any messages that accumulated in backlog queue */ 316 317 sock->state = SS_DISCONNECTING; 318 release_sock(sk); 319 320 sock_put(sk); 321 sock->sk = NULL; 322 323 return res; 324 } 325 326 /** 327 * bind - associate or disassocate TIPC name(s) with a socket 328 * @sock: socket structure 329 * @uaddr: socket address describing name(s) and desired operation 330 * @uaddr_len: size of socket address data structure 331 * 332 * Name and name sequence binding is indicated using a positive scope value; 333 * a negative scope value unbinds the specified name. Specifying no name 334 * (i.e. a socket address length of 0) unbinds all names from the socket. 335 * 336 * Returns 0 on success, errno otherwise 337 * 338 * NOTE: This routine doesn't need to take the socket lock since it doesn't 339 * access any non-constant socket information. 340 */ 341 342 static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len) 343 { 344 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 345 u32 portref = tipc_sk_port(sock->sk)->ref; 346 347 if (unlikely(!uaddr_len)) 348 return tipc_withdraw(portref, 0, NULL); 349 350 if (uaddr_len < sizeof(struct sockaddr_tipc)) 351 return -EINVAL; 352 if (addr->family != AF_TIPC) 353 return -EAFNOSUPPORT; 354 355 if (addr->addrtype == TIPC_ADDR_NAME) 356 addr->addr.nameseq.upper = addr->addr.nameseq.lower; 357 else if (addr->addrtype != TIPC_ADDR_NAMESEQ) 358 return -EAFNOSUPPORT; 359 360 return (addr->scope > 0) ? 361 tipc_publish(portref, addr->scope, &addr->addr.nameseq) : 362 tipc_withdraw(portref, -addr->scope, &addr->addr.nameseq); 363 } 364 365 /** 366 * get_name - get port ID of socket or peer socket 367 * @sock: socket structure 368 * @uaddr: area for returned socket address 369 * @uaddr_len: area for returned length of socket address 370 * @peer: 0 = own ID, 1 = current peer ID, 2 = current/former peer ID 371 * 372 * Returns 0 on success, errno otherwise 373 * 374 * NOTE: This routine doesn't need to take the socket lock since it only 375 * accesses socket information that is unchanging (or which changes in 376 * a completely predictable manner). 377 */ 378 379 static int get_name(struct socket *sock, struct sockaddr *uaddr, 380 int *uaddr_len, int peer) 381 { 382 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 383 struct tipc_sock *tsock = tipc_sk(sock->sk); 384 385 memset(addr, 0, sizeof(*addr)); 386 if (peer) { 387 if ((sock->state != SS_CONNECTED) && 388 ((peer != 2) || (sock->state != SS_DISCONNECTING))) 389 return -ENOTCONN; 390 addr->addr.id.ref = tsock->peer_name.ref; 391 addr->addr.id.node = tsock->peer_name.node; 392 } else { 393 addr->addr.id.ref = tsock->p->ref; 394 addr->addr.id.node = tipc_own_addr; 395 } 396 397 *uaddr_len = sizeof(*addr); 398 addr->addrtype = TIPC_ADDR_ID; 399 addr->family = AF_TIPC; 400 addr->scope = 0; 401 addr->addr.name.domain = 0; 402 403 return 0; 404 } 405 406 /** 407 * poll - read and possibly block on pollmask 408 * @file: file structure associated with the socket 409 * @sock: socket for which to calculate the poll bits 410 * @wait: ??? 411 * 412 * Returns pollmask value 413 * 414 * COMMENTARY: 415 * It appears that the usual socket locking mechanisms are not useful here 416 * since the pollmask info is potentially out-of-date the moment this routine 417 * exits. TCP and other protocols seem to rely on higher level poll routines 418 * to handle any preventable race conditions, so TIPC will do the same ... 419 * 420 * TIPC sets the returned events as follows: 421 * 422 * socket state flags set 423 * ------------ --------- 424 * unconnected no read flags 425 * no write flags 426 * 427 * connecting POLLIN/POLLRDNORM if ACK/NACK in rx queue 428 * no write flags 429 * 430 * connected POLLIN/POLLRDNORM if data in rx queue 431 * POLLOUT if port is not congested 432 * 433 * disconnecting POLLIN/POLLRDNORM/POLLHUP 434 * no write flags 435 * 436 * listening POLLIN if SYN in rx queue 437 * no write flags 438 * 439 * ready POLLIN/POLLRDNORM if data in rx queue 440 * [connectionless] POLLOUT (since port cannot be congested) 441 * 442 * IMPORTANT: The fact that a read or write operation is indicated does NOT 443 * imply that the operation will succeed, merely that it should be performed 444 * and will not block. 445 */ 446 447 static unsigned int poll(struct file *file, struct socket *sock, 448 poll_table *wait) 449 { 450 struct sock *sk = sock->sk; 451 u32 mask = 0; 452 453 poll_wait(file, sk_sleep(sk), wait); 454 455 switch ((int)sock->state) { 456 case SS_READY: 457 case SS_CONNECTED: 458 if (!tipc_sk_port(sk)->congested) 459 mask |= POLLOUT; 460 /* fall thru' */ 461 case SS_CONNECTING: 462 case SS_LISTENING: 463 if (!skb_queue_empty(&sk->sk_receive_queue)) 464 mask |= (POLLIN | POLLRDNORM); 465 break; 466 case SS_DISCONNECTING: 467 mask = (POLLIN | POLLRDNORM | POLLHUP); 468 break; 469 } 470 471 return mask; 472 } 473 474 /** 475 * dest_name_check - verify user is permitted to send to specified port name 476 * @dest: destination address 477 * @m: descriptor for message to be sent 478 * 479 * Prevents restricted configuration commands from being issued by 480 * unauthorized users. 481 * 482 * Returns 0 if permission is granted, otherwise errno 483 */ 484 485 static int dest_name_check(struct sockaddr_tipc *dest, struct msghdr *m) 486 { 487 struct tipc_cfg_msg_hdr hdr; 488 489 if (likely(dest->addr.name.name.type >= TIPC_RESERVED_TYPES)) 490 return 0; 491 if (likely(dest->addr.name.name.type == TIPC_TOP_SRV)) 492 return 0; 493 if (likely(dest->addr.name.name.type != TIPC_CFG_SRV)) 494 return -EACCES; 495 496 if (!m->msg_iovlen || (m->msg_iov[0].iov_len < sizeof(hdr))) 497 return -EMSGSIZE; 498 if (copy_from_user(&hdr, m->msg_iov[0].iov_base, sizeof(hdr))) 499 return -EFAULT; 500 if ((ntohs(hdr.tcm_type) & 0xC000) && (!capable(CAP_NET_ADMIN))) 501 return -EACCES; 502 503 return 0; 504 } 505 506 /** 507 * send_msg - send message in connectionless manner 508 * @iocb: if NULL, indicates that socket lock is already held 509 * @sock: socket structure 510 * @m: message to send 511 * @total_len: length of message 512 * 513 * Message must have an destination specified explicitly. 514 * Used for SOCK_RDM and SOCK_DGRAM messages, 515 * and for 'SYN' messages on SOCK_SEQPACKET and SOCK_STREAM connections. 516 * (Note: 'SYN+' is prohibited on SOCK_STREAM.) 517 * 518 * Returns the number of bytes sent on success, or errno otherwise 519 */ 520 521 static int send_msg(struct kiocb *iocb, struct socket *sock, 522 struct msghdr *m, size_t total_len) 523 { 524 struct sock *sk = sock->sk; 525 struct tipc_port *tport = tipc_sk_port(sk); 526 struct sockaddr_tipc *dest = (struct sockaddr_tipc *)m->msg_name; 527 int needs_conn; 528 long timeout_val; 529 int res = -EINVAL; 530 531 if (unlikely(!dest)) 532 return -EDESTADDRREQ; 533 if (unlikely((m->msg_namelen < sizeof(*dest)) || 534 (dest->family != AF_TIPC))) 535 return -EINVAL; 536 if ((total_len > TIPC_MAX_USER_MSG_SIZE) || 537 (m->msg_iovlen > (unsigned)INT_MAX)) 538 return -EMSGSIZE; 539 540 if (iocb) 541 lock_sock(sk); 542 543 needs_conn = (sock->state != SS_READY); 544 if (unlikely(needs_conn)) { 545 if (sock->state == SS_LISTENING) { 546 res = -EPIPE; 547 goto exit; 548 } 549 if (sock->state != SS_UNCONNECTED) { 550 res = -EISCONN; 551 goto exit; 552 } 553 if ((tport->published) || 554 ((sock->type == SOCK_STREAM) && (total_len != 0))) { 555 res = -EOPNOTSUPP; 556 goto exit; 557 } 558 if (dest->addrtype == TIPC_ADDR_NAME) { 559 tport->conn_type = dest->addr.name.name.type; 560 tport->conn_instance = dest->addr.name.name.instance; 561 } 562 563 /* Abort any pending connection attempts (very unlikely) */ 564 565 reject_rx_queue(sk); 566 } 567 568 timeout_val = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT); 569 570 do { 571 if (dest->addrtype == TIPC_ADDR_NAME) { 572 res = dest_name_check(dest, m); 573 if (res) 574 break; 575 res = tipc_send2name(tport->ref, 576 &dest->addr.name.name, 577 dest->addr.name.domain, 578 m->msg_iovlen, 579 m->msg_iov, 580 total_len); 581 } else if (dest->addrtype == TIPC_ADDR_ID) { 582 res = tipc_send2port(tport->ref, 583 &dest->addr.id, 584 m->msg_iovlen, 585 m->msg_iov, 586 total_len); 587 } else if (dest->addrtype == TIPC_ADDR_MCAST) { 588 if (needs_conn) { 589 res = -EOPNOTSUPP; 590 break; 591 } 592 res = dest_name_check(dest, m); 593 if (res) 594 break; 595 res = tipc_multicast(tport->ref, 596 &dest->addr.nameseq, 597 m->msg_iovlen, 598 m->msg_iov, 599 total_len); 600 } 601 if (likely(res != -ELINKCONG)) { 602 if (needs_conn && (res >= 0)) 603 sock->state = SS_CONNECTING; 604 break; 605 } 606 if (timeout_val <= 0L) { 607 res = timeout_val ? timeout_val : -EWOULDBLOCK; 608 break; 609 } 610 release_sock(sk); 611 timeout_val = wait_event_interruptible_timeout(*sk_sleep(sk), 612 !tport->congested, timeout_val); 613 lock_sock(sk); 614 } while (1); 615 616 exit: 617 if (iocb) 618 release_sock(sk); 619 return res; 620 } 621 622 /** 623 * send_packet - send a connection-oriented message 624 * @iocb: if NULL, indicates that socket lock is already held 625 * @sock: socket structure 626 * @m: message to send 627 * @total_len: length of message 628 * 629 * Used for SOCK_SEQPACKET messages and SOCK_STREAM data. 630 * 631 * Returns the number of bytes sent on success, or errno otherwise 632 */ 633 634 static int send_packet(struct kiocb *iocb, struct socket *sock, 635 struct msghdr *m, size_t total_len) 636 { 637 struct sock *sk = sock->sk; 638 struct tipc_port *tport = tipc_sk_port(sk); 639 struct sockaddr_tipc *dest = (struct sockaddr_tipc *)m->msg_name; 640 long timeout_val; 641 int res; 642 643 /* Handle implied connection establishment */ 644 645 if (unlikely(dest)) 646 return send_msg(iocb, sock, m, total_len); 647 648 if ((total_len > TIPC_MAX_USER_MSG_SIZE) || 649 (m->msg_iovlen > (unsigned)INT_MAX)) 650 return -EMSGSIZE; 651 652 if (iocb) 653 lock_sock(sk); 654 655 timeout_val = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT); 656 657 do { 658 if (unlikely(sock->state != SS_CONNECTED)) { 659 if (sock->state == SS_DISCONNECTING) 660 res = -EPIPE; 661 else 662 res = -ENOTCONN; 663 break; 664 } 665 666 res = tipc_send(tport->ref, m->msg_iovlen, m->msg_iov, 667 total_len); 668 if (likely(res != -ELINKCONG)) 669 break; 670 if (timeout_val <= 0L) { 671 res = timeout_val ? timeout_val : -EWOULDBLOCK; 672 break; 673 } 674 release_sock(sk); 675 timeout_val = wait_event_interruptible_timeout(*sk_sleep(sk), 676 (!tport->congested || !tport->connected), timeout_val); 677 lock_sock(sk); 678 } while (1); 679 680 if (iocb) 681 release_sock(sk); 682 return res; 683 } 684 685 /** 686 * send_stream - send stream-oriented data 687 * @iocb: (unused) 688 * @sock: socket structure 689 * @m: data to send 690 * @total_len: total length of data to be sent 691 * 692 * Used for SOCK_STREAM data. 693 * 694 * Returns the number of bytes sent on success (or partial success), 695 * or errno if no data sent 696 */ 697 698 static int send_stream(struct kiocb *iocb, struct socket *sock, 699 struct msghdr *m, size_t total_len) 700 { 701 struct sock *sk = sock->sk; 702 struct tipc_port *tport = tipc_sk_port(sk); 703 struct msghdr my_msg; 704 struct iovec my_iov; 705 struct iovec *curr_iov; 706 int curr_iovlen; 707 char __user *curr_start; 708 u32 hdr_size; 709 int curr_left; 710 int bytes_to_send; 711 int bytes_sent; 712 int res; 713 714 lock_sock(sk); 715 716 /* Handle special cases where there is no connection */ 717 718 if (unlikely(sock->state != SS_CONNECTED)) { 719 if (sock->state == SS_UNCONNECTED) { 720 res = send_packet(NULL, sock, m, total_len); 721 goto exit; 722 } else if (sock->state == SS_DISCONNECTING) { 723 res = -EPIPE; 724 goto exit; 725 } else { 726 res = -ENOTCONN; 727 goto exit; 728 } 729 } 730 731 if (unlikely(m->msg_name)) { 732 res = -EISCONN; 733 goto exit; 734 } 735 736 if ((total_len > (unsigned)INT_MAX) || 737 (m->msg_iovlen > (unsigned)INT_MAX)) { 738 res = -EMSGSIZE; 739 goto exit; 740 } 741 742 /* 743 * Send each iovec entry using one or more messages 744 * 745 * Note: This algorithm is good for the most likely case 746 * (i.e. one large iovec entry), but could be improved to pass sets 747 * of small iovec entries into send_packet(). 748 */ 749 750 curr_iov = m->msg_iov; 751 curr_iovlen = m->msg_iovlen; 752 my_msg.msg_iov = &my_iov; 753 my_msg.msg_iovlen = 1; 754 my_msg.msg_flags = m->msg_flags; 755 my_msg.msg_name = NULL; 756 bytes_sent = 0; 757 758 hdr_size = msg_hdr_sz(&tport->phdr); 759 760 while (curr_iovlen--) { 761 curr_start = curr_iov->iov_base; 762 curr_left = curr_iov->iov_len; 763 764 while (curr_left) { 765 bytes_to_send = tport->max_pkt - hdr_size; 766 if (bytes_to_send > TIPC_MAX_USER_MSG_SIZE) 767 bytes_to_send = TIPC_MAX_USER_MSG_SIZE; 768 if (curr_left < bytes_to_send) 769 bytes_to_send = curr_left; 770 my_iov.iov_base = curr_start; 771 my_iov.iov_len = bytes_to_send; 772 res = send_packet(NULL, sock, &my_msg, bytes_to_send); 773 if (res < 0) { 774 if (bytes_sent) 775 res = bytes_sent; 776 goto exit; 777 } 778 curr_left -= bytes_to_send; 779 curr_start += bytes_to_send; 780 bytes_sent += bytes_to_send; 781 } 782 783 curr_iov++; 784 } 785 res = bytes_sent; 786 exit: 787 release_sock(sk); 788 return res; 789 } 790 791 /** 792 * auto_connect - complete connection setup to a remote port 793 * @sock: socket structure 794 * @msg: peer's response message 795 * 796 * Returns 0 on success, errno otherwise 797 */ 798 799 static int auto_connect(struct socket *sock, struct tipc_msg *msg) 800 { 801 struct tipc_sock *tsock = tipc_sk(sock->sk); 802 803 if (msg_errcode(msg)) { 804 sock->state = SS_DISCONNECTING; 805 return -ECONNREFUSED; 806 } 807 808 tsock->peer_name.ref = msg_origport(msg); 809 tsock->peer_name.node = msg_orignode(msg); 810 tipc_connect2port(tsock->p->ref, &tsock->peer_name); 811 tipc_set_portimportance(tsock->p->ref, msg_importance(msg)); 812 sock->state = SS_CONNECTED; 813 return 0; 814 } 815 816 /** 817 * set_orig_addr - capture sender's address for received message 818 * @m: descriptor for message info 819 * @msg: received message header 820 * 821 * Note: Address is not captured if not requested by receiver. 822 */ 823 824 static void set_orig_addr(struct msghdr *m, struct tipc_msg *msg) 825 { 826 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)m->msg_name; 827 828 if (addr) { 829 addr->family = AF_TIPC; 830 addr->addrtype = TIPC_ADDR_ID; 831 addr->addr.id.ref = msg_origport(msg); 832 addr->addr.id.node = msg_orignode(msg); 833 addr->addr.name.domain = 0; /* could leave uninitialized */ 834 addr->scope = 0; /* could leave uninitialized */ 835 m->msg_namelen = sizeof(struct sockaddr_tipc); 836 } 837 } 838 839 /** 840 * anc_data_recv - optionally capture ancillary data for received message 841 * @m: descriptor for message info 842 * @msg: received message header 843 * @tport: TIPC port associated with message 844 * 845 * Note: Ancillary data is not captured if not requested by receiver. 846 * 847 * Returns 0 if successful, otherwise errno 848 */ 849 850 static int anc_data_recv(struct msghdr *m, struct tipc_msg *msg, 851 struct tipc_port *tport) 852 { 853 u32 anc_data[3]; 854 u32 err; 855 u32 dest_type; 856 int has_name; 857 int res; 858 859 if (likely(m->msg_controllen == 0)) 860 return 0; 861 862 /* Optionally capture errored message object(s) */ 863 864 err = msg ? msg_errcode(msg) : 0; 865 if (unlikely(err)) { 866 anc_data[0] = err; 867 anc_data[1] = msg_data_sz(msg); 868 res = put_cmsg(m, SOL_TIPC, TIPC_ERRINFO, 8, anc_data); 869 if (res) 870 return res; 871 if (anc_data[1]) { 872 res = put_cmsg(m, SOL_TIPC, TIPC_RETDATA, anc_data[1], 873 msg_data(msg)); 874 if (res) 875 return res; 876 } 877 } 878 879 /* Optionally capture message destination object */ 880 881 dest_type = msg ? msg_type(msg) : TIPC_DIRECT_MSG; 882 switch (dest_type) { 883 case TIPC_NAMED_MSG: 884 has_name = 1; 885 anc_data[0] = msg_nametype(msg); 886 anc_data[1] = msg_namelower(msg); 887 anc_data[2] = msg_namelower(msg); 888 break; 889 case TIPC_MCAST_MSG: 890 has_name = 1; 891 anc_data[0] = msg_nametype(msg); 892 anc_data[1] = msg_namelower(msg); 893 anc_data[2] = msg_nameupper(msg); 894 break; 895 case TIPC_CONN_MSG: 896 has_name = (tport->conn_type != 0); 897 anc_data[0] = tport->conn_type; 898 anc_data[1] = tport->conn_instance; 899 anc_data[2] = tport->conn_instance; 900 break; 901 default: 902 has_name = 0; 903 } 904 if (has_name) { 905 res = put_cmsg(m, SOL_TIPC, TIPC_DESTNAME, 12, anc_data); 906 if (res) 907 return res; 908 } 909 910 return 0; 911 } 912 913 /** 914 * recv_msg - receive packet-oriented message 915 * @iocb: (unused) 916 * @m: descriptor for message info 917 * @buf_len: total size of user buffer area 918 * @flags: receive flags 919 * 920 * Used for SOCK_DGRAM, SOCK_RDM, and SOCK_SEQPACKET messages. 921 * If the complete message doesn't fit in user area, truncate it. 922 * 923 * Returns size of returned message data, errno otherwise 924 */ 925 926 static int recv_msg(struct kiocb *iocb, struct socket *sock, 927 struct msghdr *m, size_t buf_len, int flags) 928 { 929 struct sock *sk = sock->sk; 930 struct tipc_port *tport = tipc_sk_port(sk); 931 struct sk_buff *buf; 932 struct tipc_msg *msg; 933 long timeout; 934 unsigned int sz; 935 u32 err; 936 int res; 937 938 /* Catch invalid receive requests */ 939 940 if (unlikely(!buf_len)) 941 return -EINVAL; 942 943 lock_sock(sk); 944 945 if (unlikely(sock->state == SS_UNCONNECTED)) { 946 res = -ENOTCONN; 947 goto exit; 948 } 949 950 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); 951 restart: 952 953 /* Look for a message in receive queue; wait if necessary */ 954 955 while (skb_queue_empty(&sk->sk_receive_queue)) { 956 if (sock->state == SS_DISCONNECTING) { 957 res = -ENOTCONN; 958 goto exit; 959 } 960 if (timeout <= 0L) { 961 res = timeout ? timeout : -EWOULDBLOCK; 962 goto exit; 963 } 964 release_sock(sk); 965 timeout = wait_event_interruptible_timeout(*sk_sleep(sk), 966 tipc_rx_ready(sock), 967 timeout); 968 lock_sock(sk); 969 } 970 971 /* Look at first message in receive queue */ 972 973 buf = skb_peek(&sk->sk_receive_queue); 974 msg = buf_msg(buf); 975 sz = msg_data_sz(msg); 976 err = msg_errcode(msg); 977 978 /* Complete connection setup for an implied connect */ 979 980 if (unlikely(sock->state == SS_CONNECTING)) { 981 res = auto_connect(sock, msg); 982 if (res) 983 goto exit; 984 } 985 986 /* Discard an empty non-errored message & try again */ 987 988 if ((!sz) && (!err)) { 989 advance_rx_queue(sk); 990 goto restart; 991 } 992 993 /* Capture sender's address (optional) */ 994 995 set_orig_addr(m, msg); 996 997 /* Capture ancillary data (optional) */ 998 999 res = anc_data_recv(m, msg, tport); 1000 if (res) 1001 goto exit; 1002 1003 /* Capture message data (if valid) & compute return value (always) */ 1004 1005 if (!err) { 1006 if (unlikely(buf_len < sz)) { 1007 sz = buf_len; 1008 m->msg_flags |= MSG_TRUNC; 1009 } 1010 res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg), 1011 m->msg_iov, sz); 1012 if (res) 1013 goto exit; 1014 res = sz; 1015 } else { 1016 if ((sock->state == SS_READY) || 1017 ((err == TIPC_CONN_SHUTDOWN) || m->msg_control)) 1018 res = 0; 1019 else 1020 res = -ECONNRESET; 1021 } 1022 1023 /* Consume received message (optional) */ 1024 1025 if (likely(!(flags & MSG_PEEK))) { 1026 if ((sock->state != SS_READY) && 1027 (++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN)) 1028 tipc_acknowledge(tport->ref, tport->conn_unacked); 1029 advance_rx_queue(sk); 1030 } 1031 exit: 1032 release_sock(sk); 1033 return res; 1034 } 1035 1036 /** 1037 * recv_stream - receive stream-oriented data 1038 * @iocb: (unused) 1039 * @m: descriptor for message info 1040 * @buf_len: total size of user buffer area 1041 * @flags: receive flags 1042 * 1043 * Used for SOCK_STREAM messages only. If not enough data is available 1044 * will optionally wait for more; never truncates data. 1045 * 1046 * Returns size of returned message data, errno otherwise 1047 */ 1048 1049 static int recv_stream(struct kiocb *iocb, struct socket *sock, 1050 struct msghdr *m, size_t buf_len, int flags) 1051 { 1052 struct sock *sk = sock->sk; 1053 struct tipc_port *tport = tipc_sk_port(sk); 1054 struct sk_buff *buf; 1055 struct tipc_msg *msg; 1056 long timeout; 1057 unsigned int sz; 1058 int sz_to_copy, target, needed; 1059 int sz_copied = 0; 1060 u32 err; 1061 int res = 0; 1062 1063 /* Catch invalid receive attempts */ 1064 1065 if (unlikely(!buf_len)) 1066 return -EINVAL; 1067 1068 lock_sock(sk); 1069 1070 if (unlikely((sock->state == SS_UNCONNECTED) || 1071 (sock->state == SS_CONNECTING))) { 1072 res = -ENOTCONN; 1073 goto exit; 1074 } 1075 1076 target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len); 1077 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); 1078 restart: 1079 1080 /* Look for a message in receive queue; wait if necessary */ 1081 1082 while (skb_queue_empty(&sk->sk_receive_queue)) { 1083 if (sock->state == SS_DISCONNECTING) { 1084 res = -ENOTCONN; 1085 goto exit; 1086 } 1087 if (timeout <= 0L) { 1088 res = timeout ? timeout : -EWOULDBLOCK; 1089 goto exit; 1090 } 1091 release_sock(sk); 1092 timeout = wait_event_interruptible_timeout(*sk_sleep(sk), 1093 tipc_rx_ready(sock), 1094 timeout); 1095 lock_sock(sk); 1096 } 1097 1098 /* Look at first message in receive queue */ 1099 1100 buf = skb_peek(&sk->sk_receive_queue); 1101 msg = buf_msg(buf); 1102 sz = msg_data_sz(msg); 1103 err = msg_errcode(msg); 1104 1105 /* Discard an empty non-errored message & try again */ 1106 1107 if ((!sz) && (!err)) { 1108 advance_rx_queue(sk); 1109 goto restart; 1110 } 1111 1112 /* Optionally capture sender's address & ancillary data of first msg */ 1113 1114 if (sz_copied == 0) { 1115 set_orig_addr(m, msg); 1116 res = anc_data_recv(m, msg, tport); 1117 if (res) 1118 goto exit; 1119 } 1120 1121 /* Capture message data (if valid) & compute return value (always) */ 1122 1123 if (!err) { 1124 u32 offset = (u32)(unsigned long)(TIPC_SKB_CB(buf)->handle); 1125 1126 sz -= offset; 1127 needed = (buf_len - sz_copied); 1128 sz_to_copy = (sz <= needed) ? sz : needed; 1129 1130 res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg) + offset, 1131 m->msg_iov, sz_to_copy); 1132 if (res) 1133 goto exit; 1134 1135 sz_copied += sz_to_copy; 1136 1137 if (sz_to_copy < sz) { 1138 if (!(flags & MSG_PEEK)) 1139 TIPC_SKB_CB(buf)->handle = 1140 (void *)(unsigned long)(offset + sz_to_copy); 1141 goto exit; 1142 } 1143 } else { 1144 if (sz_copied != 0) 1145 goto exit; /* can't add error msg to valid data */ 1146 1147 if ((err == TIPC_CONN_SHUTDOWN) || m->msg_control) 1148 res = 0; 1149 else 1150 res = -ECONNRESET; 1151 } 1152 1153 /* Consume received message (optional) */ 1154 1155 if (likely(!(flags & MSG_PEEK))) { 1156 if (unlikely(++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN)) 1157 tipc_acknowledge(tport->ref, tport->conn_unacked); 1158 advance_rx_queue(sk); 1159 } 1160 1161 /* Loop around if more data is required */ 1162 1163 if ((sz_copied < buf_len) && /* didn't get all requested data */ 1164 (!skb_queue_empty(&sk->sk_receive_queue) || 1165 (sz_copied < target)) && /* and more is ready or required */ 1166 (!(flags & MSG_PEEK)) && /* and aren't just peeking at data */ 1167 (!err)) /* and haven't reached a FIN */ 1168 goto restart; 1169 1170 exit: 1171 release_sock(sk); 1172 return sz_copied ? sz_copied : res; 1173 } 1174 1175 /** 1176 * rx_queue_full - determine if receive queue can accept another message 1177 * @msg: message to be added to queue 1178 * @queue_size: current size of queue 1179 * @base: nominal maximum size of queue 1180 * 1181 * Returns 1 if queue is unable to accept message, 0 otherwise 1182 */ 1183 1184 static int rx_queue_full(struct tipc_msg *msg, u32 queue_size, u32 base) 1185 { 1186 u32 threshold; 1187 u32 imp = msg_importance(msg); 1188 1189 if (imp == TIPC_LOW_IMPORTANCE) 1190 threshold = base; 1191 else if (imp == TIPC_MEDIUM_IMPORTANCE) 1192 threshold = base * 2; 1193 else if (imp == TIPC_HIGH_IMPORTANCE) 1194 threshold = base * 100; 1195 else 1196 return 0; 1197 1198 if (msg_connected(msg)) 1199 threshold *= 4; 1200 1201 return queue_size >= threshold; 1202 } 1203 1204 /** 1205 * filter_rcv - validate incoming message 1206 * @sk: socket 1207 * @buf: message 1208 * 1209 * Enqueues message on receive queue if acceptable; optionally handles 1210 * disconnect indication for a connected socket. 1211 * 1212 * Called with socket lock already taken; port lock may also be taken. 1213 * 1214 * Returns TIPC error status code (TIPC_OK if message is not to be rejected) 1215 */ 1216 1217 static u32 filter_rcv(struct sock *sk, struct sk_buff *buf) 1218 { 1219 struct socket *sock = sk->sk_socket; 1220 struct tipc_msg *msg = buf_msg(buf); 1221 u32 recv_q_len; 1222 1223 /* Reject message if it is wrong sort of message for socket */ 1224 1225 /* 1226 * WOULD IT BE BETTER TO JUST DISCARD THESE MESSAGES INSTEAD? 1227 * "NO PORT" ISN'T REALLY THE RIGHT ERROR CODE, AND THERE MAY 1228 * BE SECURITY IMPLICATIONS INHERENT IN REJECTING INVALID TRAFFIC 1229 */ 1230 1231 if (sock->state == SS_READY) { 1232 if (msg_connected(msg)) 1233 return TIPC_ERR_NO_PORT; 1234 } else { 1235 if (msg_mcast(msg)) 1236 return TIPC_ERR_NO_PORT; 1237 if (sock->state == SS_CONNECTED) { 1238 if (!msg_connected(msg)) 1239 return TIPC_ERR_NO_PORT; 1240 } else if (sock->state == SS_CONNECTING) { 1241 if (!msg_connected(msg) && (msg_errcode(msg) == 0)) 1242 return TIPC_ERR_NO_PORT; 1243 } else if (sock->state == SS_LISTENING) { 1244 if (msg_connected(msg) || msg_errcode(msg)) 1245 return TIPC_ERR_NO_PORT; 1246 } else if (sock->state == SS_DISCONNECTING) { 1247 return TIPC_ERR_NO_PORT; 1248 } else /* (sock->state == SS_UNCONNECTED) */ { 1249 if (msg_connected(msg) || msg_errcode(msg)) 1250 return TIPC_ERR_NO_PORT; 1251 } 1252 } 1253 1254 /* Reject message if there isn't room to queue it */ 1255 1256 recv_q_len = (u32)atomic_read(&tipc_queue_size); 1257 if (unlikely(recv_q_len >= OVERLOAD_LIMIT_BASE)) { 1258 if (rx_queue_full(msg, recv_q_len, OVERLOAD_LIMIT_BASE)) 1259 return TIPC_ERR_OVERLOAD; 1260 } 1261 recv_q_len = skb_queue_len(&sk->sk_receive_queue); 1262 if (unlikely(recv_q_len >= (OVERLOAD_LIMIT_BASE / 2))) { 1263 if (rx_queue_full(msg, recv_q_len, OVERLOAD_LIMIT_BASE / 2)) 1264 return TIPC_ERR_OVERLOAD; 1265 } 1266 1267 /* Enqueue message (finally!) */ 1268 1269 TIPC_SKB_CB(buf)->handle = 0; 1270 atomic_inc(&tipc_queue_size); 1271 __skb_queue_tail(&sk->sk_receive_queue, buf); 1272 1273 /* Initiate connection termination for an incoming 'FIN' */ 1274 1275 if (unlikely(msg_errcode(msg) && (sock->state == SS_CONNECTED))) { 1276 sock->state = SS_DISCONNECTING; 1277 tipc_disconnect_port(tipc_sk_port(sk)); 1278 } 1279 1280 if (waitqueue_active(sk_sleep(sk))) 1281 wake_up_interruptible(sk_sleep(sk)); 1282 return TIPC_OK; 1283 } 1284 1285 /** 1286 * backlog_rcv - handle incoming message from backlog queue 1287 * @sk: socket 1288 * @buf: message 1289 * 1290 * Caller must hold socket lock, but not port lock. 1291 * 1292 * Returns 0 1293 */ 1294 1295 static int backlog_rcv(struct sock *sk, struct sk_buff *buf) 1296 { 1297 u32 res; 1298 1299 res = filter_rcv(sk, buf); 1300 if (res) 1301 tipc_reject_msg(buf, res); 1302 return 0; 1303 } 1304 1305 /** 1306 * dispatch - handle incoming message 1307 * @tport: TIPC port that received message 1308 * @buf: message 1309 * 1310 * Called with port lock already taken. 1311 * 1312 * Returns TIPC error status code (TIPC_OK if message is not to be rejected) 1313 */ 1314 1315 static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf) 1316 { 1317 struct sock *sk = (struct sock *)tport->usr_handle; 1318 u32 res; 1319 1320 /* 1321 * Process message if socket is unlocked; otherwise add to backlog queue 1322 * 1323 * This code is based on sk_receive_skb(), but must be distinct from it 1324 * since a TIPC-specific filter/reject mechanism is utilized 1325 */ 1326 1327 bh_lock_sock(sk); 1328 if (!sock_owned_by_user(sk)) { 1329 res = filter_rcv(sk, buf); 1330 } else { 1331 if (sk_add_backlog(sk, buf)) 1332 res = TIPC_ERR_OVERLOAD; 1333 else 1334 res = TIPC_OK; 1335 } 1336 bh_unlock_sock(sk); 1337 1338 return res; 1339 } 1340 1341 /** 1342 * wakeupdispatch - wake up port after congestion 1343 * @tport: port to wakeup 1344 * 1345 * Called with port lock already taken. 1346 */ 1347 1348 static void wakeupdispatch(struct tipc_port *tport) 1349 { 1350 struct sock *sk = (struct sock *)tport->usr_handle; 1351 1352 if (waitqueue_active(sk_sleep(sk))) 1353 wake_up_interruptible(sk_sleep(sk)); 1354 } 1355 1356 /** 1357 * connect - establish a connection to another TIPC port 1358 * @sock: socket structure 1359 * @dest: socket address for destination port 1360 * @destlen: size of socket address data structure 1361 * @flags: file-related flags associated with socket 1362 * 1363 * Returns 0 on success, errno otherwise 1364 */ 1365 1366 static int connect(struct socket *sock, struct sockaddr *dest, int destlen, 1367 int flags) 1368 { 1369 struct sock *sk = sock->sk; 1370 struct sockaddr_tipc *dst = (struct sockaddr_tipc *)dest; 1371 struct msghdr m = {NULL,}; 1372 struct sk_buff *buf; 1373 struct tipc_msg *msg; 1374 unsigned int timeout; 1375 int res; 1376 1377 lock_sock(sk); 1378 1379 /* For now, TIPC does not allow use of connect() with DGRAM/RDM types */ 1380 1381 if (sock->state == SS_READY) { 1382 res = -EOPNOTSUPP; 1383 goto exit; 1384 } 1385 1386 /* For now, TIPC does not support the non-blocking form of connect() */ 1387 1388 if (flags & O_NONBLOCK) { 1389 res = -EOPNOTSUPP; 1390 goto exit; 1391 } 1392 1393 /* Issue Posix-compliant error code if socket is in the wrong state */ 1394 1395 if (sock->state == SS_LISTENING) { 1396 res = -EOPNOTSUPP; 1397 goto exit; 1398 } 1399 if (sock->state == SS_CONNECTING) { 1400 res = -EALREADY; 1401 goto exit; 1402 } 1403 if (sock->state != SS_UNCONNECTED) { 1404 res = -EISCONN; 1405 goto exit; 1406 } 1407 1408 /* 1409 * Reject connection attempt using multicast address 1410 * 1411 * Note: send_msg() validates the rest of the address fields, 1412 * so there's no need to do it here 1413 */ 1414 1415 if (dst->addrtype == TIPC_ADDR_MCAST) { 1416 res = -EINVAL; 1417 goto exit; 1418 } 1419 1420 /* Reject any messages already in receive queue (very unlikely) */ 1421 1422 reject_rx_queue(sk); 1423 1424 /* Send a 'SYN-' to destination */ 1425 1426 m.msg_name = dest; 1427 m.msg_namelen = destlen; 1428 res = send_msg(NULL, sock, &m, 0); 1429 if (res < 0) 1430 goto exit; 1431 1432 /* Wait until an 'ACK' or 'RST' arrives, or a timeout occurs */ 1433 1434 timeout = tipc_sk(sk)->conn_timeout; 1435 release_sock(sk); 1436 res = wait_event_interruptible_timeout(*sk_sleep(sk), 1437 (!skb_queue_empty(&sk->sk_receive_queue) || 1438 (sock->state != SS_CONNECTING)), 1439 timeout ? (long)msecs_to_jiffies(timeout) 1440 : MAX_SCHEDULE_TIMEOUT); 1441 lock_sock(sk); 1442 1443 if (res > 0) { 1444 buf = skb_peek(&sk->sk_receive_queue); 1445 if (buf != NULL) { 1446 msg = buf_msg(buf); 1447 res = auto_connect(sock, msg); 1448 if (!res) { 1449 if (!msg_data_sz(msg)) 1450 advance_rx_queue(sk); 1451 } 1452 } else { 1453 if (sock->state == SS_CONNECTED) 1454 res = -EISCONN; 1455 else 1456 res = -ECONNREFUSED; 1457 } 1458 } else { 1459 if (res == 0) 1460 res = -ETIMEDOUT; 1461 else 1462 ; /* leave "res" unchanged */ 1463 sock->state = SS_DISCONNECTING; 1464 } 1465 1466 exit: 1467 release_sock(sk); 1468 return res; 1469 } 1470 1471 /** 1472 * listen - allow socket to listen for incoming connections 1473 * @sock: socket structure 1474 * @len: (unused) 1475 * 1476 * Returns 0 on success, errno otherwise 1477 */ 1478 1479 static int listen(struct socket *sock, int len) 1480 { 1481 struct sock *sk = sock->sk; 1482 int res; 1483 1484 lock_sock(sk); 1485 1486 if (sock->state != SS_UNCONNECTED) 1487 res = -EINVAL; 1488 else { 1489 sock->state = SS_LISTENING; 1490 res = 0; 1491 } 1492 1493 release_sock(sk); 1494 return res; 1495 } 1496 1497 /** 1498 * accept - wait for connection request 1499 * @sock: listening socket 1500 * @newsock: new socket that is to be connected 1501 * @flags: file-related flags associated with socket 1502 * 1503 * Returns 0 on success, errno otherwise 1504 */ 1505 1506 static int accept(struct socket *sock, struct socket *new_sock, int flags) 1507 { 1508 struct sock *sk = sock->sk; 1509 struct sk_buff *buf; 1510 int res; 1511 1512 lock_sock(sk); 1513 1514 if (sock->state != SS_LISTENING) { 1515 res = -EINVAL; 1516 goto exit; 1517 } 1518 1519 while (skb_queue_empty(&sk->sk_receive_queue)) { 1520 if (flags & O_NONBLOCK) { 1521 res = -EWOULDBLOCK; 1522 goto exit; 1523 } 1524 release_sock(sk); 1525 res = wait_event_interruptible(*sk_sleep(sk), 1526 (!skb_queue_empty(&sk->sk_receive_queue))); 1527 lock_sock(sk); 1528 if (res) 1529 goto exit; 1530 } 1531 1532 buf = skb_peek(&sk->sk_receive_queue); 1533 1534 res = tipc_create(sock_net(sock->sk), new_sock, 0, 0); 1535 if (!res) { 1536 struct sock *new_sk = new_sock->sk; 1537 struct tipc_sock *new_tsock = tipc_sk(new_sk); 1538 struct tipc_port *new_tport = new_tsock->p; 1539 u32 new_ref = new_tport->ref; 1540 struct tipc_msg *msg = buf_msg(buf); 1541 1542 lock_sock(new_sk); 1543 1544 /* 1545 * Reject any stray messages received by new socket 1546 * before the socket lock was taken (very, very unlikely) 1547 */ 1548 1549 reject_rx_queue(new_sk); 1550 1551 /* Connect new socket to it's peer */ 1552 1553 new_tsock->peer_name.ref = msg_origport(msg); 1554 new_tsock->peer_name.node = msg_orignode(msg); 1555 tipc_connect2port(new_ref, &new_tsock->peer_name); 1556 new_sock->state = SS_CONNECTED; 1557 1558 tipc_set_portimportance(new_ref, msg_importance(msg)); 1559 if (msg_named(msg)) { 1560 new_tport->conn_type = msg_nametype(msg); 1561 new_tport->conn_instance = msg_nameinst(msg); 1562 } 1563 1564 /* 1565 * Respond to 'SYN-' by discarding it & returning 'ACK'-. 1566 * Respond to 'SYN+' by queuing it on new socket. 1567 */ 1568 1569 if (!msg_data_sz(msg)) { 1570 struct msghdr m = {NULL,}; 1571 1572 advance_rx_queue(sk); 1573 send_packet(NULL, new_sock, &m, 0); 1574 } else { 1575 __skb_dequeue(&sk->sk_receive_queue); 1576 __skb_queue_head(&new_sk->sk_receive_queue, buf); 1577 } 1578 release_sock(new_sk); 1579 } 1580 exit: 1581 release_sock(sk); 1582 return res; 1583 } 1584 1585 /** 1586 * shutdown - shutdown socket connection 1587 * @sock: socket structure 1588 * @how: direction to close (must be SHUT_RDWR) 1589 * 1590 * Terminates connection (if necessary), then purges socket's receive queue. 1591 * 1592 * Returns 0 on success, errno otherwise 1593 */ 1594 1595 static int shutdown(struct socket *sock, int how) 1596 { 1597 struct sock *sk = sock->sk; 1598 struct tipc_port *tport = tipc_sk_port(sk); 1599 struct sk_buff *buf; 1600 int res; 1601 1602 if (how != SHUT_RDWR) 1603 return -EINVAL; 1604 1605 lock_sock(sk); 1606 1607 switch (sock->state) { 1608 case SS_CONNECTING: 1609 case SS_CONNECTED: 1610 1611 /* Disconnect and send a 'FIN+' or 'FIN-' message to peer */ 1612 restart: 1613 buf = __skb_dequeue(&sk->sk_receive_queue); 1614 if (buf) { 1615 atomic_dec(&tipc_queue_size); 1616 if (TIPC_SKB_CB(buf)->handle != 0) { 1617 buf_discard(buf); 1618 goto restart; 1619 } 1620 tipc_disconnect(tport->ref); 1621 tipc_reject_msg(buf, TIPC_CONN_SHUTDOWN); 1622 } else { 1623 tipc_shutdown(tport->ref); 1624 } 1625 1626 sock->state = SS_DISCONNECTING; 1627 1628 /* fall through */ 1629 1630 case SS_DISCONNECTING: 1631 1632 /* Discard any unreceived messages; wake up sleeping tasks */ 1633 1634 discard_rx_queue(sk); 1635 if (waitqueue_active(sk_sleep(sk))) 1636 wake_up_interruptible(sk_sleep(sk)); 1637 res = 0; 1638 break; 1639 1640 default: 1641 res = -ENOTCONN; 1642 } 1643 1644 release_sock(sk); 1645 return res; 1646 } 1647 1648 /** 1649 * setsockopt - set socket option 1650 * @sock: socket structure 1651 * @lvl: option level 1652 * @opt: option identifier 1653 * @ov: pointer to new option value 1654 * @ol: length of option value 1655 * 1656 * For stream sockets only, accepts and ignores all IPPROTO_TCP options 1657 * (to ease compatibility). 1658 * 1659 * Returns 0 on success, errno otherwise 1660 */ 1661 1662 static int setsockopt(struct socket *sock, 1663 int lvl, int opt, char __user *ov, unsigned int ol) 1664 { 1665 struct sock *sk = sock->sk; 1666 struct tipc_port *tport = tipc_sk_port(sk); 1667 u32 value; 1668 int res; 1669 1670 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM)) 1671 return 0; 1672 if (lvl != SOL_TIPC) 1673 return -ENOPROTOOPT; 1674 if (ol < sizeof(value)) 1675 return -EINVAL; 1676 res = get_user(value, (u32 __user *)ov); 1677 if (res) 1678 return res; 1679 1680 lock_sock(sk); 1681 1682 switch (opt) { 1683 case TIPC_IMPORTANCE: 1684 res = tipc_set_portimportance(tport->ref, value); 1685 break; 1686 case TIPC_SRC_DROPPABLE: 1687 if (sock->type != SOCK_STREAM) 1688 res = tipc_set_portunreliable(tport->ref, value); 1689 else 1690 res = -ENOPROTOOPT; 1691 break; 1692 case TIPC_DEST_DROPPABLE: 1693 res = tipc_set_portunreturnable(tport->ref, value); 1694 break; 1695 case TIPC_CONN_TIMEOUT: 1696 tipc_sk(sk)->conn_timeout = value; 1697 /* no need to set "res", since already 0 at this point */ 1698 break; 1699 default: 1700 res = -EINVAL; 1701 } 1702 1703 release_sock(sk); 1704 1705 return res; 1706 } 1707 1708 /** 1709 * getsockopt - get socket option 1710 * @sock: socket structure 1711 * @lvl: option level 1712 * @opt: option identifier 1713 * @ov: receptacle for option value 1714 * @ol: receptacle for length of option value 1715 * 1716 * For stream sockets only, returns 0 length result for all IPPROTO_TCP options 1717 * (to ease compatibility). 1718 * 1719 * Returns 0 on success, errno otherwise 1720 */ 1721 1722 static int getsockopt(struct socket *sock, 1723 int lvl, int opt, char __user *ov, int __user *ol) 1724 { 1725 struct sock *sk = sock->sk; 1726 struct tipc_port *tport = tipc_sk_port(sk); 1727 int len; 1728 u32 value; 1729 int res; 1730 1731 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM)) 1732 return put_user(0, ol); 1733 if (lvl != SOL_TIPC) 1734 return -ENOPROTOOPT; 1735 res = get_user(len, ol); 1736 if (res) 1737 return res; 1738 1739 lock_sock(sk); 1740 1741 switch (opt) { 1742 case TIPC_IMPORTANCE: 1743 res = tipc_portimportance(tport->ref, &value); 1744 break; 1745 case TIPC_SRC_DROPPABLE: 1746 res = tipc_portunreliable(tport->ref, &value); 1747 break; 1748 case TIPC_DEST_DROPPABLE: 1749 res = tipc_portunreturnable(tport->ref, &value); 1750 break; 1751 case TIPC_CONN_TIMEOUT: 1752 value = tipc_sk(sk)->conn_timeout; 1753 /* no need to set "res", since already 0 at this point */ 1754 break; 1755 case TIPC_NODE_RECVQ_DEPTH: 1756 value = (u32)atomic_read(&tipc_queue_size); 1757 break; 1758 case TIPC_SOCK_RECVQ_DEPTH: 1759 value = skb_queue_len(&sk->sk_receive_queue); 1760 break; 1761 default: 1762 res = -EINVAL; 1763 } 1764 1765 release_sock(sk); 1766 1767 if (res) 1768 return res; /* "get" failed */ 1769 1770 if (len < sizeof(value)) 1771 return -EINVAL; 1772 1773 if (copy_to_user(ov, &value, sizeof(value))) 1774 return -EFAULT; 1775 1776 return put_user(sizeof(value), ol); 1777 } 1778 1779 /** 1780 * Protocol switches for the various types of TIPC sockets 1781 */ 1782 1783 static const struct proto_ops msg_ops = { 1784 .owner = THIS_MODULE, 1785 .family = AF_TIPC, 1786 .release = release, 1787 .bind = bind, 1788 .connect = connect, 1789 .socketpair = sock_no_socketpair, 1790 .accept = sock_no_accept, 1791 .getname = get_name, 1792 .poll = poll, 1793 .ioctl = sock_no_ioctl, 1794 .listen = sock_no_listen, 1795 .shutdown = shutdown, 1796 .setsockopt = setsockopt, 1797 .getsockopt = getsockopt, 1798 .sendmsg = send_msg, 1799 .recvmsg = recv_msg, 1800 .mmap = sock_no_mmap, 1801 .sendpage = sock_no_sendpage 1802 }; 1803 1804 static const struct proto_ops packet_ops = { 1805 .owner = THIS_MODULE, 1806 .family = AF_TIPC, 1807 .release = release, 1808 .bind = bind, 1809 .connect = connect, 1810 .socketpair = sock_no_socketpair, 1811 .accept = accept, 1812 .getname = get_name, 1813 .poll = poll, 1814 .ioctl = sock_no_ioctl, 1815 .listen = listen, 1816 .shutdown = shutdown, 1817 .setsockopt = setsockopt, 1818 .getsockopt = getsockopt, 1819 .sendmsg = send_packet, 1820 .recvmsg = recv_msg, 1821 .mmap = sock_no_mmap, 1822 .sendpage = sock_no_sendpage 1823 }; 1824 1825 static const struct proto_ops stream_ops = { 1826 .owner = THIS_MODULE, 1827 .family = AF_TIPC, 1828 .release = release, 1829 .bind = bind, 1830 .connect = connect, 1831 .socketpair = sock_no_socketpair, 1832 .accept = accept, 1833 .getname = get_name, 1834 .poll = poll, 1835 .ioctl = sock_no_ioctl, 1836 .listen = listen, 1837 .shutdown = shutdown, 1838 .setsockopt = setsockopt, 1839 .getsockopt = getsockopt, 1840 .sendmsg = send_stream, 1841 .recvmsg = recv_stream, 1842 .mmap = sock_no_mmap, 1843 .sendpage = sock_no_sendpage 1844 }; 1845 1846 static const struct net_proto_family tipc_family_ops = { 1847 .owner = THIS_MODULE, 1848 .family = AF_TIPC, 1849 .create = tipc_create 1850 }; 1851 1852 static struct proto tipc_proto = { 1853 .name = "TIPC", 1854 .owner = THIS_MODULE, 1855 .obj_size = sizeof(struct tipc_sock) 1856 }; 1857 1858 /** 1859 * tipc_socket_init - initialize TIPC socket interface 1860 * 1861 * Returns 0 on success, errno otherwise 1862 */ 1863 int tipc_socket_init(void) 1864 { 1865 int res; 1866 1867 res = proto_register(&tipc_proto, 1); 1868 if (res) { 1869 err("Failed to register TIPC protocol type\n"); 1870 goto out; 1871 } 1872 1873 res = sock_register(&tipc_family_ops); 1874 if (res) { 1875 err("Failed to register TIPC socket type\n"); 1876 proto_unregister(&tipc_proto); 1877 goto out; 1878 } 1879 1880 sockets_enabled = 1; 1881 out: 1882 return res; 1883 } 1884 1885 /** 1886 * tipc_socket_stop - stop TIPC socket interface 1887 */ 1888 1889 void tipc_socket_stop(void) 1890 { 1891 if (!sockets_enabled) 1892 return; 1893 1894 sockets_enabled = 0; 1895 sock_unregister(tipc_family_ops.family); 1896 proto_unregister(&tipc_proto); 1897 } 1898 1899