1 /* 2 * net/tipc/socket.c: TIPC socket API 3 * 4 * Copyright (c) 2001-2007, 2012-2015, Ericsson AB 5 * Copyright (c) 2004-2008, 2010-2013, 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 <linux/rhashtable.h> 38 #include "core.h" 39 #include "name_table.h" 40 #include "node.h" 41 #include "link.h" 42 #include "name_distr.h" 43 #include "socket.h" 44 #include "bcast.h" 45 46 #define SS_LISTENING -1 /* socket is listening */ 47 #define SS_READY -2 /* socket is connectionless */ 48 49 #define CONN_TIMEOUT_DEFAULT 8000 /* default connect timeout = 8s */ 50 #define CONN_PROBING_INTERVAL msecs_to_jiffies(3600000) /* [ms] => 1 h */ 51 #define TIPC_FWD_MSG 1 52 #define TIPC_CONN_OK 0 53 #define TIPC_CONN_PROBING 1 54 #define TIPC_MAX_PORT 0xffffffff 55 #define TIPC_MIN_PORT 1 56 57 /** 58 * struct tipc_sock - TIPC socket structure 59 * @sk: socket - interacts with 'port' and with user via the socket API 60 * @connected: non-zero if port is currently connected to a peer port 61 * @conn_type: TIPC type used when connection was established 62 * @conn_instance: TIPC instance used when connection was established 63 * @published: non-zero if port has one or more associated names 64 * @max_pkt: maximum packet size "hint" used when building messages sent by port 65 * @portid: unique port identity in TIPC socket hash table 66 * @phdr: preformatted message header used when sending messages 67 * @port_list: adjacent ports in TIPC's global list of ports 68 * @publications: list of publications for port 69 * @pub_count: total # of publications port has made during its lifetime 70 * @probing_state: 71 * @probing_intv: 72 * @conn_timeout: the time we can wait for an unresponded setup request 73 * @dupl_rcvcnt: number of bytes counted twice, in both backlog and rcv queue 74 * @link_cong: non-zero if owner must sleep because of link congestion 75 * @sent_unacked: # messages sent by socket, and not yet acked by peer 76 * @rcv_unacked: # messages read by user, but not yet acked back to peer 77 * @remote: 'connected' peer for dgram/rdm 78 * @node: hash table node 79 * @rcu: rcu struct for tipc_sock 80 */ 81 struct tipc_sock { 82 struct sock sk; 83 int connected; 84 u32 conn_type; 85 u32 conn_instance; 86 int published; 87 u32 max_pkt; 88 u32 portid; 89 struct tipc_msg phdr; 90 struct list_head sock_list; 91 struct list_head publications; 92 u32 pub_count; 93 u32 probing_state; 94 unsigned long probing_intv; 95 uint conn_timeout; 96 atomic_t dupl_rcvcnt; 97 bool link_cong; 98 uint sent_unacked; 99 uint rcv_unacked; 100 struct sockaddr_tipc remote; 101 struct rhash_head node; 102 struct rcu_head rcu; 103 }; 104 105 static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb); 106 static void tipc_data_ready(struct sock *sk); 107 static void tipc_write_space(struct sock *sk); 108 static void tipc_sock_destruct(struct sock *sk); 109 static int tipc_release(struct socket *sock); 110 static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags); 111 static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p); 112 static void tipc_sk_timeout(unsigned long data); 113 static int tipc_sk_publish(struct tipc_sock *tsk, uint scope, 114 struct tipc_name_seq const *seq); 115 static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope, 116 struct tipc_name_seq const *seq); 117 static struct tipc_sock *tipc_sk_lookup(struct net *net, u32 portid); 118 static int tipc_sk_insert(struct tipc_sock *tsk); 119 static void tipc_sk_remove(struct tipc_sock *tsk); 120 static int __tipc_send_stream(struct socket *sock, struct msghdr *m, 121 size_t dsz); 122 static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dsz); 123 124 static const struct proto_ops packet_ops; 125 static const struct proto_ops stream_ops; 126 static const struct proto_ops msg_ops; 127 static struct proto tipc_proto; 128 129 static const struct nla_policy tipc_nl_sock_policy[TIPC_NLA_SOCK_MAX + 1] = { 130 [TIPC_NLA_SOCK_UNSPEC] = { .type = NLA_UNSPEC }, 131 [TIPC_NLA_SOCK_ADDR] = { .type = NLA_U32 }, 132 [TIPC_NLA_SOCK_REF] = { .type = NLA_U32 }, 133 [TIPC_NLA_SOCK_CON] = { .type = NLA_NESTED }, 134 [TIPC_NLA_SOCK_HAS_PUBL] = { .type = NLA_FLAG } 135 }; 136 137 static const struct rhashtable_params tsk_rht_params; 138 139 /* 140 * Revised TIPC socket locking policy: 141 * 142 * Most socket operations take the standard socket lock when they start 143 * and hold it until they finish (or until they need to sleep). Acquiring 144 * this lock grants the owner exclusive access to the fields of the socket 145 * data structures, with the exception of the backlog queue. A few socket 146 * operations can be done without taking the socket lock because they only 147 * read socket information that never changes during the life of the socket. 148 * 149 * Socket operations may acquire the lock for the associated TIPC port if they 150 * need to perform an operation on the port. If any routine needs to acquire 151 * both the socket lock and the port lock it must take the socket lock first 152 * to avoid the risk of deadlock. 153 * 154 * The dispatcher handling incoming messages cannot grab the socket lock in 155 * the standard fashion, since invoked it runs at the BH level and cannot block. 156 * Instead, it checks to see if the socket lock is currently owned by someone, 157 * and either handles the message itself or adds it to the socket's backlog 158 * queue; in the latter case the queued message is processed once the process 159 * owning the socket lock releases it. 160 * 161 * NOTE: Releasing the socket lock while an operation is sleeping overcomes 162 * the problem of a blocked socket operation preventing any other operations 163 * from occurring. However, applications must be careful if they have 164 * multiple threads trying to send (or receive) on the same socket, as these 165 * operations might interfere with each other. For example, doing a connect 166 * and a receive at the same time might allow the receive to consume the 167 * ACK message meant for the connect. While additional work could be done 168 * to try and overcome this, it doesn't seem to be worthwhile at the present. 169 * 170 * NOTE: Releasing the socket lock while an operation is sleeping also ensures 171 * that another operation that must be performed in a non-blocking manner is 172 * not delayed for very long because the lock has already been taken. 173 * 174 * NOTE: This code assumes that certain fields of a port/socket pair are 175 * constant over its lifetime; such fields can be examined without taking 176 * the socket lock and/or port lock, and do not need to be re-read even 177 * after resuming processing after waiting. These fields include: 178 * - socket type 179 * - pointer to socket sk structure (aka tipc_sock structure) 180 * - pointer to port structure 181 * - port reference 182 */ 183 184 static u32 tsk_own_node(struct tipc_sock *tsk) 185 { 186 return msg_prevnode(&tsk->phdr); 187 } 188 189 static u32 tsk_peer_node(struct tipc_sock *tsk) 190 { 191 return msg_destnode(&tsk->phdr); 192 } 193 194 static u32 tsk_peer_port(struct tipc_sock *tsk) 195 { 196 return msg_destport(&tsk->phdr); 197 } 198 199 static bool tsk_unreliable(struct tipc_sock *tsk) 200 { 201 return msg_src_droppable(&tsk->phdr) != 0; 202 } 203 204 static void tsk_set_unreliable(struct tipc_sock *tsk, bool unreliable) 205 { 206 msg_set_src_droppable(&tsk->phdr, unreliable ? 1 : 0); 207 } 208 209 static bool tsk_unreturnable(struct tipc_sock *tsk) 210 { 211 return msg_dest_droppable(&tsk->phdr) != 0; 212 } 213 214 static void tsk_set_unreturnable(struct tipc_sock *tsk, bool unreturnable) 215 { 216 msg_set_dest_droppable(&tsk->phdr, unreturnable ? 1 : 0); 217 } 218 219 static int tsk_importance(struct tipc_sock *tsk) 220 { 221 return msg_importance(&tsk->phdr); 222 } 223 224 static int tsk_set_importance(struct tipc_sock *tsk, int imp) 225 { 226 if (imp > TIPC_CRITICAL_IMPORTANCE) 227 return -EINVAL; 228 msg_set_importance(&tsk->phdr, (u32)imp); 229 return 0; 230 } 231 232 static struct tipc_sock *tipc_sk(const struct sock *sk) 233 { 234 return container_of(sk, struct tipc_sock, sk); 235 } 236 237 static int tsk_conn_cong(struct tipc_sock *tsk) 238 { 239 return tsk->sent_unacked >= TIPC_FLOWCTRL_WIN; 240 } 241 242 /** 243 * tsk_advance_rx_queue - discard first buffer in socket receive queue 244 * 245 * Caller must hold socket lock 246 */ 247 static void tsk_advance_rx_queue(struct sock *sk) 248 { 249 kfree_skb(__skb_dequeue(&sk->sk_receive_queue)); 250 } 251 252 /* tipc_sk_respond() : send response message back to sender 253 */ 254 static void tipc_sk_respond(struct sock *sk, struct sk_buff *skb, int err) 255 { 256 u32 selector; 257 u32 dnode; 258 u32 onode = tipc_own_addr(sock_net(sk)); 259 260 if (!tipc_msg_reverse(onode, &skb, err)) 261 return; 262 263 dnode = msg_destnode(buf_msg(skb)); 264 selector = msg_origport(buf_msg(skb)); 265 tipc_node_xmit_skb(sock_net(sk), skb, dnode, selector); 266 } 267 268 /** 269 * tsk_rej_rx_queue - reject all buffers in socket receive queue 270 * 271 * Caller must hold socket lock 272 */ 273 static void tsk_rej_rx_queue(struct sock *sk) 274 { 275 struct sk_buff *skb; 276 277 while ((skb = __skb_dequeue(&sk->sk_receive_queue))) 278 tipc_sk_respond(sk, skb, TIPC_ERR_NO_PORT); 279 } 280 281 /* tsk_peer_msg - verify if message was sent by connected port's peer 282 * 283 * Handles cases where the node's network address has changed from 284 * the default of <0.0.0> to its configured setting. 285 */ 286 static bool tsk_peer_msg(struct tipc_sock *tsk, struct tipc_msg *msg) 287 { 288 struct tipc_net *tn = net_generic(sock_net(&tsk->sk), tipc_net_id); 289 u32 peer_port = tsk_peer_port(tsk); 290 u32 orig_node; 291 u32 peer_node; 292 293 if (unlikely(!tsk->connected)) 294 return false; 295 296 if (unlikely(msg_origport(msg) != peer_port)) 297 return false; 298 299 orig_node = msg_orignode(msg); 300 peer_node = tsk_peer_node(tsk); 301 302 if (likely(orig_node == peer_node)) 303 return true; 304 305 if (!orig_node && (peer_node == tn->own_addr)) 306 return true; 307 308 if (!peer_node && (orig_node == tn->own_addr)) 309 return true; 310 311 return false; 312 } 313 314 /** 315 * tipc_sk_create - create a TIPC socket 316 * @net: network namespace (must be default network) 317 * @sock: pre-allocated socket structure 318 * @protocol: protocol indicator (must be 0) 319 * @kern: caused by kernel or by userspace? 320 * 321 * This routine creates additional data structures used by the TIPC socket, 322 * initializes them, and links them together. 323 * 324 * Returns 0 on success, errno otherwise 325 */ 326 static int tipc_sk_create(struct net *net, struct socket *sock, 327 int protocol, int kern) 328 { 329 struct tipc_net *tn; 330 const struct proto_ops *ops; 331 socket_state state; 332 struct sock *sk; 333 struct tipc_sock *tsk; 334 struct tipc_msg *msg; 335 336 /* Validate arguments */ 337 if (unlikely(protocol != 0)) 338 return -EPROTONOSUPPORT; 339 340 switch (sock->type) { 341 case SOCK_STREAM: 342 ops = &stream_ops; 343 state = SS_UNCONNECTED; 344 break; 345 case SOCK_SEQPACKET: 346 ops = &packet_ops; 347 state = SS_UNCONNECTED; 348 break; 349 case SOCK_DGRAM: 350 case SOCK_RDM: 351 ops = &msg_ops; 352 state = SS_READY; 353 break; 354 default: 355 return -EPROTOTYPE; 356 } 357 358 /* Allocate socket's protocol area */ 359 sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto, kern); 360 if (sk == NULL) 361 return -ENOMEM; 362 363 tsk = tipc_sk(sk); 364 tsk->max_pkt = MAX_PKT_DEFAULT; 365 INIT_LIST_HEAD(&tsk->publications); 366 msg = &tsk->phdr; 367 tn = net_generic(sock_net(sk), tipc_net_id); 368 tipc_msg_init(tn->own_addr, msg, TIPC_LOW_IMPORTANCE, TIPC_NAMED_MSG, 369 NAMED_H_SIZE, 0); 370 371 /* Finish initializing socket data structures */ 372 sock->ops = ops; 373 sock->state = state; 374 sock_init_data(sock, sk); 375 if (tipc_sk_insert(tsk)) { 376 pr_warn("Socket create failed; port numbrer exhausted\n"); 377 return -EINVAL; 378 } 379 msg_set_origport(msg, tsk->portid); 380 setup_timer(&sk->sk_timer, tipc_sk_timeout, (unsigned long)tsk); 381 sk->sk_backlog_rcv = tipc_backlog_rcv; 382 sk->sk_rcvbuf = sysctl_tipc_rmem[1]; 383 sk->sk_data_ready = tipc_data_ready; 384 sk->sk_write_space = tipc_write_space; 385 sk->sk_destruct = tipc_sock_destruct; 386 tsk->conn_timeout = CONN_TIMEOUT_DEFAULT; 387 tsk->sent_unacked = 0; 388 atomic_set(&tsk->dupl_rcvcnt, 0); 389 390 if (sock->state == SS_READY) { 391 tsk_set_unreturnable(tsk, true); 392 if (sock->type == SOCK_DGRAM) 393 tsk_set_unreliable(tsk, true); 394 } 395 return 0; 396 } 397 398 static void tipc_sk_callback(struct rcu_head *head) 399 { 400 struct tipc_sock *tsk = container_of(head, struct tipc_sock, rcu); 401 402 sock_put(&tsk->sk); 403 } 404 405 /** 406 * tipc_release - destroy a TIPC socket 407 * @sock: socket to destroy 408 * 409 * This routine cleans up any messages that are still queued on the socket. 410 * For DGRAM and RDM socket types, all queued messages are rejected. 411 * For SEQPACKET and STREAM socket types, the first message is rejected 412 * and any others are discarded. (If the first message on a STREAM socket 413 * is partially-read, it is discarded and the next one is rejected instead.) 414 * 415 * NOTE: Rejected messages are not necessarily returned to the sender! They 416 * are returned or discarded according to the "destination droppable" setting 417 * specified for the message by the sender. 418 * 419 * Returns 0 on success, errno otherwise 420 */ 421 static int tipc_release(struct socket *sock) 422 { 423 struct sock *sk = sock->sk; 424 struct net *net; 425 struct tipc_sock *tsk; 426 struct sk_buff *skb; 427 u32 dnode; 428 429 /* 430 * Exit if socket isn't fully initialized (occurs when a failed accept() 431 * releases a pre-allocated child socket that was never used) 432 */ 433 if (sk == NULL) 434 return 0; 435 436 net = sock_net(sk); 437 tsk = tipc_sk(sk); 438 lock_sock(sk); 439 440 /* 441 * Reject all unreceived messages, except on an active connection 442 * (which disconnects locally & sends a 'FIN+' to peer) 443 */ 444 dnode = tsk_peer_node(tsk); 445 while (sock->state != SS_DISCONNECTING) { 446 skb = __skb_dequeue(&sk->sk_receive_queue); 447 if (skb == NULL) 448 break; 449 if (TIPC_SKB_CB(skb)->handle != NULL) 450 kfree_skb(skb); 451 else { 452 if ((sock->state == SS_CONNECTING) || 453 (sock->state == SS_CONNECTED)) { 454 sock->state = SS_DISCONNECTING; 455 tsk->connected = 0; 456 tipc_node_remove_conn(net, dnode, tsk->portid); 457 } 458 tipc_sk_respond(sk, skb, TIPC_ERR_NO_PORT); 459 } 460 } 461 462 tipc_sk_withdraw(tsk, 0, NULL); 463 sk_stop_timer(sk, &sk->sk_timer); 464 tipc_sk_remove(tsk); 465 if (tsk->connected) { 466 skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE, 467 TIPC_CONN_MSG, SHORT_H_SIZE, 0, dnode, 468 tsk_own_node(tsk), tsk_peer_port(tsk), 469 tsk->portid, TIPC_ERR_NO_PORT); 470 if (skb) 471 tipc_node_xmit_skb(net, skb, dnode, tsk->portid); 472 tipc_node_remove_conn(net, dnode, tsk->portid); 473 } 474 475 /* Reject any messages that accumulated in backlog queue */ 476 sock->state = SS_DISCONNECTING; 477 release_sock(sk); 478 479 call_rcu(&tsk->rcu, tipc_sk_callback); 480 sock->sk = NULL; 481 482 return 0; 483 } 484 485 /** 486 * tipc_bind - associate or disassocate TIPC name(s) with a socket 487 * @sock: socket structure 488 * @uaddr: socket address describing name(s) and desired operation 489 * @uaddr_len: size of socket address data structure 490 * 491 * Name and name sequence binding is indicated using a positive scope value; 492 * a negative scope value unbinds the specified name. Specifying no name 493 * (i.e. a socket address length of 0) unbinds all names from the socket. 494 * 495 * Returns 0 on success, errno otherwise 496 * 497 * NOTE: This routine doesn't need to take the socket lock since it doesn't 498 * access any non-constant socket information. 499 */ 500 static int tipc_bind(struct socket *sock, struct sockaddr *uaddr, 501 int uaddr_len) 502 { 503 struct sock *sk = sock->sk; 504 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 505 struct tipc_sock *tsk = tipc_sk(sk); 506 int res = -EINVAL; 507 508 lock_sock(sk); 509 if (unlikely(!uaddr_len)) { 510 res = tipc_sk_withdraw(tsk, 0, NULL); 511 goto exit; 512 } 513 514 if (uaddr_len < sizeof(struct sockaddr_tipc)) { 515 res = -EINVAL; 516 goto exit; 517 } 518 if (addr->family != AF_TIPC) { 519 res = -EAFNOSUPPORT; 520 goto exit; 521 } 522 523 if (addr->addrtype == TIPC_ADDR_NAME) 524 addr->addr.nameseq.upper = addr->addr.nameseq.lower; 525 else if (addr->addrtype != TIPC_ADDR_NAMESEQ) { 526 res = -EAFNOSUPPORT; 527 goto exit; 528 } 529 530 if ((addr->addr.nameseq.type < TIPC_RESERVED_TYPES) && 531 (addr->addr.nameseq.type != TIPC_TOP_SRV) && 532 (addr->addr.nameseq.type != TIPC_CFG_SRV)) { 533 res = -EACCES; 534 goto exit; 535 } 536 537 res = (addr->scope > 0) ? 538 tipc_sk_publish(tsk, addr->scope, &addr->addr.nameseq) : 539 tipc_sk_withdraw(tsk, -addr->scope, &addr->addr.nameseq); 540 exit: 541 release_sock(sk); 542 return res; 543 } 544 545 /** 546 * tipc_getname - get port ID of socket or peer socket 547 * @sock: socket structure 548 * @uaddr: area for returned socket address 549 * @uaddr_len: area for returned length of socket address 550 * @peer: 0 = own ID, 1 = current peer ID, 2 = current/former peer ID 551 * 552 * Returns 0 on success, errno otherwise 553 * 554 * NOTE: This routine doesn't need to take the socket lock since it only 555 * accesses socket information that is unchanging (or which changes in 556 * a completely predictable manner). 557 */ 558 static int tipc_getname(struct socket *sock, struct sockaddr *uaddr, 559 int *uaddr_len, int peer) 560 { 561 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 562 struct tipc_sock *tsk = tipc_sk(sock->sk); 563 struct tipc_net *tn = net_generic(sock_net(sock->sk), tipc_net_id); 564 565 memset(addr, 0, sizeof(*addr)); 566 if (peer) { 567 if ((sock->state != SS_CONNECTED) && 568 ((peer != 2) || (sock->state != SS_DISCONNECTING))) 569 return -ENOTCONN; 570 addr->addr.id.ref = tsk_peer_port(tsk); 571 addr->addr.id.node = tsk_peer_node(tsk); 572 } else { 573 addr->addr.id.ref = tsk->portid; 574 addr->addr.id.node = tn->own_addr; 575 } 576 577 *uaddr_len = sizeof(*addr); 578 addr->addrtype = TIPC_ADDR_ID; 579 addr->family = AF_TIPC; 580 addr->scope = 0; 581 addr->addr.name.domain = 0; 582 583 return 0; 584 } 585 586 /** 587 * tipc_poll - read and possibly block on pollmask 588 * @file: file structure associated with the socket 589 * @sock: socket for which to calculate the poll bits 590 * @wait: ??? 591 * 592 * Returns pollmask value 593 * 594 * COMMENTARY: 595 * It appears that the usual socket locking mechanisms are not useful here 596 * since the pollmask info is potentially out-of-date the moment this routine 597 * exits. TCP and other protocols seem to rely on higher level poll routines 598 * to handle any preventable race conditions, so TIPC will do the same ... 599 * 600 * TIPC sets the returned events as follows: 601 * 602 * socket state flags set 603 * ------------ --------- 604 * unconnected no read flags 605 * POLLOUT if port is not congested 606 * 607 * connecting POLLIN/POLLRDNORM if ACK/NACK in rx queue 608 * no write flags 609 * 610 * connected POLLIN/POLLRDNORM if data in rx queue 611 * POLLOUT if port is not congested 612 * 613 * disconnecting POLLIN/POLLRDNORM/POLLHUP 614 * no write flags 615 * 616 * listening POLLIN if SYN in rx queue 617 * no write flags 618 * 619 * ready POLLIN/POLLRDNORM if data in rx queue 620 * [connectionless] POLLOUT (since port cannot be congested) 621 * 622 * IMPORTANT: The fact that a read or write operation is indicated does NOT 623 * imply that the operation will succeed, merely that it should be performed 624 * and will not block. 625 */ 626 static unsigned int tipc_poll(struct file *file, struct socket *sock, 627 poll_table *wait) 628 { 629 struct sock *sk = sock->sk; 630 struct tipc_sock *tsk = tipc_sk(sk); 631 u32 mask = 0; 632 633 sock_poll_wait(file, sk_sleep(sk), wait); 634 635 switch ((int)sock->state) { 636 case SS_UNCONNECTED: 637 if (!tsk->link_cong) 638 mask |= POLLOUT; 639 break; 640 case SS_READY: 641 case SS_CONNECTED: 642 if (!tsk->link_cong && !tsk_conn_cong(tsk)) 643 mask |= POLLOUT; 644 /* fall thru' */ 645 case SS_CONNECTING: 646 case SS_LISTENING: 647 if (!skb_queue_empty(&sk->sk_receive_queue)) 648 mask |= (POLLIN | POLLRDNORM); 649 break; 650 case SS_DISCONNECTING: 651 mask = (POLLIN | POLLRDNORM | POLLHUP); 652 break; 653 } 654 655 return mask; 656 } 657 658 /** 659 * tipc_sendmcast - send multicast message 660 * @sock: socket structure 661 * @seq: destination address 662 * @msg: message to send 663 * @dsz: total length of message data 664 * @timeo: timeout to wait for wakeup 665 * 666 * Called from function tipc_sendmsg(), which has done all sanity checks 667 * Returns the number of bytes sent on success, or errno 668 */ 669 static int tipc_sendmcast(struct socket *sock, struct tipc_name_seq *seq, 670 struct msghdr *msg, size_t dsz, long timeo) 671 { 672 struct sock *sk = sock->sk; 673 struct tipc_sock *tsk = tipc_sk(sk); 674 struct net *net = sock_net(sk); 675 struct tipc_msg *mhdr = &tsk->phdr; 676 struct sk_buff_head pktchain; 677 struct iov_iter save = msg->msg_iter; 678 uint mtu; 679 int rc; 680 681 msg_set_type(mhdr, TIPC_MCAST_MSG); 682 msg_set_lookup_scope(mhdr, TIPC_CLUSTER_SCOPE); 683 msg_set_destport(mhdr, 0); 684 msg_set_destnode(mhdr, 0); 685 msg_set_nametype(mhdr, seq->type); 686 msg_set_namelower(mhdr, seq->lower); 687 msg_set_nameupper(mhdr, seq->upper); 688 msg_set_hdr_sz(mhdr, MCAST_H_SIZE); 689 690 skb_queue_head_init(&pktchain); 691 692 new_mtu: 693 mtu = tipc_bcast_get_mtu(net); 694 rc = tipc_msg_build(mhdr, msg, 0, dsz, mtu, &pktchain); 695 if (unlikely(rc < 0)) 696 return rc; 697 698 do { 699 rc = tipc_bcast_xmit(net, &pktchain); 700 if (likely(!rc)) 701 return dsz; 702 703 if (rc == -ELINKCONG) { 704 tsk->link_cong = 1; 705 rc = tipc_wait_for_sndmsg(sock, &timeo); 706 if (!rc) 707 continue; 708 } 709 __skb_queue_purge(&pktchain); 710 if (rc == -EMSGSIZE) { 711 msg->msg_iter = save; 712 goto new_mtu; 713 } 714 break; 715 } while (1); 716 return rc; 717 } 718 719 /** 720 * tipc_sk_mcast_rcv - Deliver multicast messages to all destination sockets 721 * @arrvq: queue with arriving messages, to be cloned after destination lookup 722 * @inputq: queue with cloned messages, delivered to socket after dest lookup 723 * 724 * Multi-threaded: parallel calls with reference to same queues may occur 725 */ 726 void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq, 727 struct sk_buff_head *inputq) 728 { 729 struct tipc_msg *msg; 730 struct tipc_plist dports; 731 u32 portid; 732 u32 scope = TIPC_CLUSTER_SCOPE; 733 struct sk_buff_head tmpq; 734 uint hsz; 735 struct sk_buff *skb, *_skb; 736 737 __skb_queue_head_init(&tmpq); 738 tipc_plist_init(&dports); 739 740 skb = tipc_skb_peek(arrvq, &inputq->lock); 741 for (; skb; skb = tipc_skb_peek(arrvq, &inputq->lock)) { 742 msg = buf_msg(skb); 743 hsz = skb_headroom(skb) + msg_hdr_sz(msg); 744 745 if (in_own_node(net, msg_orignode(msg))) 746 scope = TIPC_NODE_SCOPE; 747 748 /* Create destination port list and message clones: */ 749 tipc_nametbl_mc_translate(net, 750 msg_nametype(msg), msg_namelower(msg), 751 msg_nameupper(msg), scope, &dports); 752 portid = tipc_plist_pop(&dports); 753 for (; portid; portid = tipc_plist_pop(&dports)) { 754 _skb = __pskb_copy(skb, hsz, GFP_ATOMIC); 755 if (_skb) { 756 msg_set_destport(buf_msg(_skb), portid); 757 __skb_queue_tail(&tmpq, _skb); 758 continue; 759 } 760 pr_warn("Failed to clone mcast rcv buffer\n"); 761 } 762 /* Append to inputq if not already done by other thread */ 763 spin_lock_bh(&inputq->lock); 764 if (skb_peek(arrvq) == skb) { 765 skb_queue_splice_tail_init(&tmpq, inputq); 766 kfree_skb(__skb_dequeue(arrvq)); 767 } 768 spin_unlock_bh(&inputq->lock); 769 __skb_queue_purge(&tmpq); 770 kfree_skb(skb); 771 } 772 tipc_sk_rcv(net, inputq); 773 } 774 775 /** 776 * tipc_sk_proto_rcv - receive a connection mng protocol message 777 * @tsk: receiving socket 778 * @skb: pointer to message buffer. 779 */ 780 static void tipc_sk_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb) 781 { 782 struct sock *sk = &tsk->sk; 783 struct tipc_msg *hdr = buf_msg(skb); 784 int mtyp = msg_type(hdr); 785 int conn_cong; 786 787 /* Ignore if connection cannot be validated: */ 788 if (!tsk_peer_msg(tsk, hdr)) 789 goto exit; 790 791 tsk->probing_state = TIPC_CONN_OK; 792 793 if (mtyp == CONN_PROBE) { 794 msg_set_type(hdr, CONN_PROBE_REPLY); 795 tipc_sk_respond(sk, skb, TIPC_OK); 796 return; 797 } else if (mtyp == CONN_ACK) { 798 conn_cong = tsk_conn_cong(tsk); 799 tsk->sent_unacked -= msg_msgcnt(hdr); 800 if (conn_cong) 801 sk->sk_write_space(sk); 802 } else if (mtyp != CONN_PROBE_REPLY) { 803 pr_warn("Received unknown CONN_PROTO msg\n"); 804 } 805 exit: 806 kfree_skb(skb); 807 } 808 809 static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p) 810 { 811 struct sock *sk = sock->sk; 812 struct tipc_sock *tsk = tipc_sk(sk); 813 DEFINE_WAIT(wait); 814 int done; 815 816 do { 817 int err = sock_error(sk); 818 if (err) 819 return err; 820 if (sock->state == SS_DISCONNECTING) 821 return -EPIPE; 822 if (!*timeo_p) 823 return -EAGAIN; 824 if (signal_pending(current)) 825 return sock_intr_errno(*timeo_p); 826 827 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 828 done = sk_wait_event(sk, timeo_p, !tsk->link_cong); 829 finish_wait(sk_sleep(sk), &wait); 830 } while (!done); 831 return 0; 832 } 833 834 /** 835 * tipc_sendmsg - send message in connectionless manner 836 * @sock: socket structure 837 * @m: message to send 838 * @dsz: amount of user data to be sent 839 * 840 * Message must have an destination specified explicitly. 841 * Used for SOCK_RDM and SOCK_DGRAM messages, 842 * and for 'SYN' messages on SOCK_SEQPACKET and SOCK_STREAM connections. 843 * (Note: 'SYN+' is prohibited on SOCK_STREAM.) 844 * 845 * Returns the number of bytes sent on success, or errno otherwise 846 */ 847 static int tipc_sendmsg(struct socket *sock, 848 struct msghdr *m, size_t dsz) 849 { 850 struct sock *sk = sock->sk; 851 int ret; 852 853 lock_sock(sk); 854 ret = __tipc_sendmsg(sock, m, dsz); 855 release_sock(sk); 856 857 return ret; 858 } 859 860 static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dsz) 861 { 862 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); 863 struct sock *sk = sock->sk; 864 struct tipc_sock *tsk = tipc_sk(sk); 865 struct net *net = sock_net(sk); 866 struct tipc_msg *mhdr = &tsk->phdr; 867 u32 dnode, dport; 868 struct sk_buff_head pktchain; 869 struct sk_buff *skb; 870 struct tipc_name_seq *seq; 871 struct iov_iter save; 872 u32 mtu; 873 long timeo; 874 int rc; 875 876 if (dsz > TIPC_MAX_USER_MSG_SIZE) 877 return -EMSGSIZE; 878 if (unlikely(!dest)) { 879 if (tsk->connected && sock->state == SS_READY) 880 dest = &tsk->remote; 881 else 882 return -EDESTADDRREQ; 883 } else if (unlikely(m->msg_namelen < sizeof(*dest)) || 884 dest->family != AF_TIPC) { 885 return -EINVAL; 886 } 887 if (unlikely(sock->state != SS_READY)) { 888 if (sock->state == SS_LISTENING) 889 return -EPIPE; 890 if (sock->state != SS_UNCONNECTED) 891 return -EISCONN; 892 if (tsk->published) 893 return -EOPNOTSUPP; 894 if (dest->addrtype == TIPC_ADDR_NAME) { 895 tsk->conn_type = dest->addr.name.name.type; 896 tsk->conn_instance = dest->addr.name.name.instance; 897 } 898 } 899 seq = &dest->addr.nameseq; 900 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT); 901 902 if (dest->addrtype == TIPC_ADDR_MCAST) { 903 return tipc_sendmcast(sock, seq, m, dsz, timeo); 904 } else if (dest->addrtype == TIPC_ADDR_NAME) { 905 u32 type = dest->addr.name.name.type; 906 u32 inst = dest->addr.name.name.instance; 907 u32 domain = dest->addr.name.domain; 908 909 dnode = domain; 910 msg_set_type(mhdr, TIPC_NAMED_MSG); 911 msg_set_hdr_sz(mhdr, NAMED_H_SIZE); 912 msg_set_nametype(mhdr, type); 913 msg_set_nameinst(mhdr, inst); 914 msg_set_lookup_scope(mhdr, tipc_addr_scope(domain)); 915 dport = tipc_nametbl_translate(net, type, inst, &dnode); 916 msg_set_destnode(mhdr, dnode); 917 msg_set_destport(mhdr, dport); 918 if (unlikely(!dport && !dnode)) 919 return -EHOSTUNREACH; 920 } else if (dest->addrtype == TIPC_ADDR_ID) { 921 dnode = dest->addr.id.node; 922 msg_set_type(mhdr, TIPC_DIRECT_MSG); 923 msg_set_lookup_scope(mhdr, 0); 924 msg_set_destnode(mhdr, dnode); 925 msg_set_destport(mhdr, dest->addr.id.ref); 926 msg_set_hdr_sz(mhdr, BASIC_H_SIZE); 927 } 928 929 skb_queue_head_init(&pktchain); 930 save = m->msg_iter; 931 new_mtu: 932 mtu = tipc_node_get_mtu(net, dnode, tsk->portid); 933 rc = tipc_msg_build(mhdr, m, 0, dsz, mtu, &pktchain); 934 if (rc < 0) 935 return rc; 936 937 do { 938 skb = skb_peek(&pktchain); 939 TIPC_SKB_CB(skb)->wakeup_pending = tsk->link_cong; 940 rc = tipc_node_xmit(net, &pktchain, dnode, tsk->portid); 941 if (likely(!rc)) { 942 if (sock->state != SS_READY) 943 sock->state = SS_CONNECTING; 944 return dsz; 945 } 946 if (rc == -ELINKCONG) { 947 tsk->link_cong = 1; 948 rc = tipc_wait_for_sndmsg(sock, &timeo); 949 if (!rc) 950 continue; 951 } 952 __skb_queue_purge(&pktchain); 953 if (rc == -EMSGSIZE) { 954 m->msg_iter = save; 955 goto new_mtu; 956 } 957 break; 958 } while (1); 959 960 return rc; 961 } 962 963 static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p) 964 { 965 struct sock *sk = sock->sk; 966 struct tipc_sock *tsk = tipc_sk(sk); 967 DEFINE_WAIT(wait); 968 int done; 969 970 do { 971 int err = sock_error(sk); 972 if (err) 973 return err; 974 if (sock->state == SS_DISCONNECTING) 975 return -EPIPE; 976 else if (sock->state != SS_CONNECTED) 977 return -ENOTCONN; 978 if (!*timeo_p) 979 return -EAGAIN; 980 if (signal_pending(current)) 981 return sock_intr_errno(*timeo_p); 982 983 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 984 done = sk_wait_event(sk, timeo_p, 985 (!tsk->link_cong && 986 !tsk_conn_cong(tsk)) || 987 !tsk->connected); 988 finish_wait(sk_sleep(sk), &wait); 989 } while (!done); 990 return 0; 991 } 992 993 /** 994 * tipc_send_stream - send stream-oriented data 995 * @sock: socket structure 996 * @m: data to send 997 * @dsz: total length of data to be transmitted 998 * 999 * Used for SOCK_STREAM data. 1000 * 1001 * Returns the number of bytes sent on success (or partial success), 1002 * or errno if no data sent 1003 */ 1004 static int tipc_send_stream(struct socket *sock, struct msghdr *m, size_t dsz) 1005 { 1006 struct sock *sk = sock->sk; 1007 int ret; 1008 1009 lock_sock(sk); 1010 ret = __tipc_send_stream(sock, m, dsz); 1011 release_sock(sk); 1012 1013 return ret; 1014 } 1015 1016 static int __tipc_send_stream(struct socket *sock, struct msghdr *m, size_t dsz) 1017 { 1018 struct sock *sk = sock->sk; 1019 struct net *net = sock_net(sk); 1020 struct tipc_sock *tsk = tipc_sk(sk); 1021 struct tipc_msg *mhdr = &tsk->phdr; 1022 struct sk_buff_head pktchain; 1023 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); 1024 u32 portid = tsk->portid; 1025 int rc = -EINVAL; 1026 long timeo; 1027 u32 dnode; 1028 uint mtu, send, sent = 0; 1029 struct iov_iter save; 1030 1031 /* Handle implied connection establishment */ 1032 if (unlikely(dest)) { 1033 rc = __tipc_sendmsg(sock, m, dsz); 1034 if (dsz && (dsz == rc)) 1035 tsk->sent_unacked = 1; 1036 return rc; 1037 } 1038 if (dsz > (uint)INT_MAX) 1039 return -EMSGSIZE; 1040 1041 if (unlikely(sock->state != SS_CONNECTED)) { 1042 if (sock->state == SS_DISCONNECTING) 1043 return -EPIPE; 1044 else 1045 return -ENOTCONN; 1046 } 1047 1048 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT); 1049 dnode = tsk_peer_node(tsk); 1050 skb_queue_head_init(&pktchain); 1051 1052 next: 1053 save = m->msg_iter; 1054 mtu = tsk->max_pkt; 1055 send = min_t(uint, dsz - sent, TIPC_MAX_USER_MSG_SIZE); 1056 rc = tipc_msg_build(mhdr, m, sent, send, mtu, &pktchain); 1057 if (unlikely(rc < 0)) 1058 return rc; 1059 1060 do { 1061 if (likely(!tsk_conn_cong(tsk))) { 1062 rc = tipc_node_xmit(net, &pktchain, dnode, portid); 1063 if (likely(!rc)) { 1064 tsk->sent_unacked++; 1065 sent += send; 1066 if (sent == dsz) 1067 return dsz; 1068 goto next; 1069 } 1070 if (rc == -EMSGSIZE) { 1071 __skb_queue_purge(&pktchain); 1072 tsk->max_pkt = tipc_node_get_mtu(net, dnode, 1073 portid); 1074 m->msg_iter = save; 1075 goto next; 1076 } 1077 if (rc != -ELINKCONG) 1078 break; 1079 1080 tsk->link_cong = 1; 1081 } 1082 rc = tipc_wait_for_sndpkt(sock, &timeo); 1083 } while (!rc); 1084 1085 __skb_queue_purge(&pktchain); 1086 return sent ? sent : rc; 1087 } 1088 1089 /** 1090 * tipc_send_packet - send a connection-oriented message 1091 * @sock: socket structure 1092 * @m: message to send 1093 * @dsz: length of data to be transmitted 1094 * 1095 * Used for SOCK_SEQPACKET messages. 1096 * 1097 * Returns the number of bytes sent on success, or errno otherwise 1098 */ 1099 static int tipc_send_packet(struct socket *sock, struct msghdr *m, size_t dsz) 1100 { 1101 if (dsz > TIPC_MAX_USER_MSG_SIZE) 1102 return -EMSGSIZE; 1103 1104 return tipc_send_stream(sock, m, dsz); 1105 } 1106 1107 /* tipc_sk_finish_conn - complete the setup of a connection 1108 */ 1109 static void tipc_sk_finish_conn(struct tipc_sock *tsk, u32 peer_port, 1110 u32 peer_node) 1111 { 1112 struct sock *sk = &tsk->sk; 1113 struct net *net = sock_net(sk); 1114 struct tipc_msg *msg = &tsk->phdr; 1115 1116 msg_set_destnode(msg, peer_node); 1117 msg_set_destport(msg, peer_port); 1118 msg_set_type(msg, TIPC_CONN_MSG); 1119 msg_set_lookup_scope(msg, 0); 1120 msg_set_hdr_sz(msg, SHORT_H_SIZE); 1121 1122 tsk->probing_intv = CONN_PROBING_INTERVAL; 1123 tsk->probing_state = TIPC_CONN_OK; 1124 tsk->connected = 1; 1125 sk_reset_timer(sk, &sk->sk_timer, jiffies + tsk->probing_intv); 1126 tipc_node_add_conn(net, peer_node, tsk->portid, peer_port); 1127 tsk->max_pkt = tipc_node_get_mtu(net, peer_node, tsk->portid); 1128 } 1129 1130 /** 1131 * set_orig_addr - capture sender's address for received message 1132 * @m: descriptor for message info 1133 * @msg: received message header 1134 * 1135 * Note: Address is not captured if not requested by receiver. 1136 */ 1137 static void set_orig_addr(struct msghdr *m, struct tipc_msg *msg) 1138 { 1139 DECLARE_SOCKADDR(struct sockaddr_tipc *, addr, m->msg_name); 1140 1141 if (addr) { 1142 addr->family = AF_TIPC; 1143 addr->addrtype = TIPC_ADDR_ID; 1144 memset(&addr->addr, 0, sizeof(addr->addr)); 1145 addr->addr.id.ref = msg_origport(msg); 1146 addr->addr.id.node = msg_orignode(msg); 1147 addr->addr.name.domain = 0; /* could leave uninitialized */ 1148 addr->scope = 0; /* could leave uninitialized */ 1149 m->msg_namelen = sizeof(struct sockaddr_tipc); 1150 } 1151 } 1152 1153 /** 1154 * tipc_sk_anc_data_recv - optionally capture ancillary data for received message 1155 * @m: descriptor for message info 1156 * @msg: received message header 1157 * @tsk: TIPC port associated with message 1158 * 1159 * Note: Ancillary data is not captured if not requested by receiver. 1160 * 1161 * Returns 0 if successful, otherwise errno 1162 */ 1163 static int tipc_sk_anc_data_recv(struct msghdr *m, struct tipc_msg *msg, 1164 struct tipc_sock *tsk) 1165 { 1166 u32 anc_data[3]; 1167 u32 err; 1168 u32 dest_type; 1169 int has_name; 1170 int res; 1171 1172 if (likely(m->msg_controllen == 0)) 1173 return 0; 1174 1175 /* Optionally capture errored message object(s) */ 1176 err = msg ? msg_errcode(msg) : 0; 1177 if (unlikely(err)) { 1178 anc_data[0] = err; 1179 anc_data[1] = msg_data_sz(msg); 1180 res = put_cmsg(m, SOL_TIPC, TIPC_ERRINFO, 8, anc_data); 1181 if (res) 1182 return res; 1183 if (anc_data[1]) { 1184 res = put_cmsg(m, SOL_TIPC, TIPC_RETDATA, anc_data[1], 1185 msg_data(msg)); 1186 if (res) 1187 return res; 1188 } 1189 } 1190 1191 /* Optionally capture message destination object */ 1192 dest_type = msg ? msg_type(msg) : TIPC_DIRECT_MSG; 1193 switch (dest_type) { 1194 case TIPC_NAMED_MSG: 1195 has_name = 1; 1196 anc_data[0] = msg_nametype(msg); 1197 anc_data[1] = msg_namelower(msg); 1198 anc_data[2] = msg_namelower(msg); 1199 break; 1200 case TIPC_MCAST_MSG: 1201 has_name = 1; 1202 anc_data[0] = msg_nametype(msg); 1203 anc_data[1] = msg_namelower(msg); 1204 anc_data[2] = msg_nameupper(msg); 1205 break; 1206 case TIPC_CONN_MSG: 1207 has_name = (tsk->conn_type != 0); 1208 anc_data[0] = tsk->conn_type; 1209 anc_data[1] = tsk->conn_instance; 1210 anc_data[2] = tsk->conn_instance; 1211 break; 1212 default: 1213 has_name = 0; 1214 } 1215 if (has_name) { 1216 res = put_cmsg(m, SOL_TIPC, TIPC_DESTNAME, 12, anc_data); 1217 if (res) 1218 return res; 1219 } 1220 1221 return 0; 1222 } 1223 1224 static void tipc_sk_send_ack(struct tipc_sock *tsk, uint ack) 1225 { 1226 struct net *net = sock_net(&tsk->sk); 1227 struct sk_buff *skb = NULL; 1228 struct tipc_msg *msg; 1229 u32 peer_port = tsk_peer_port(tsk); 1230 u32 dnode = tsk_peer_node(tsk); 1231 1232 if (!tsk->connected) 1233 return; 1234 skb = tipc_msg_create(CONN_MANAGER, CONN_ACK, INT_H_SIZE, 0, 1235 dnode, tsk_own_node(tsk), peer_port, 1236 tsk->portid, TIPC_OK); 1237 if (!skb) 1238 return; 1239 msg = buf_msg(skb); 1240 msg_set_msgcnt(msg, ack); 1241 tipc_node_xmit_skb(net, skb, dnode, msg_link_selector(msg)); 1242 } 1243 1244 static int tipc_wait_for_rcvmsg(struct socket *sock, long *timeop) 1245 { 1246 struct sock *sk = sock->sk; 1247 DEFINE_WAIT(wait); 1248 long timeo = *timeop; 1249 int err; 1250 1251 for (;;) { 1252 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1253 if (timeo && skb_queue_empty(&sk->sk_receive_queue)) { 1254 if (sock->state == SS_DISCONNECTING) { 1255 err = -ENOTCONN; 1256 break; 1257 } 1258 release_sock(sk); 1259 timeo = schedule_timeout(timeo); 1260 lock_sock(sk); 1261 } 1262 err = 0; 1263 if (!skb_queue_empty(&sk->sk_receive_queue)) 1264 break; 1265 err = -EAGAIN; 1266 if (!timeo) 1267 break; 1268 err = sock_intr_errno(timeo); 1269 if (signal_pending(current)) 1270 break; 1271 } 1272 finish_wait(sk_sleep(sk), &wait); 1273 *timeop = timeo; 1274 return err; 1275 } 1276 1277 /** 1278 * tipc_recvmsg - receive packet-oriented message 1279 * @m: descriptor for message info 1280 * @buf_len: total size of user buffer area 1281 * @flags: receive flags 1282 * 1283 * Used for SOCK_DGRAM, SOCK_RDM, and SOCK_SEQPACKET messages. 1284 * If the complete message doesn't fit in user area, truncate it. 1285 * 1286 * Returns size of returned message data, errno otherwise 1287 */ 1288 static int tipc_recvmsg(struct socket *sock, struct msghdr *m, size_t buf_len, 1289 int flags) 1290 { 1291 struct sock *sk = sock->sk; 1292 struct tipc_sock *tsk = tipc_sk(sk); 1293 struct sk_buff *buf; 1294 struct tipc_msg *msg; 1295 long timeo; 1296 unsigned int sz; 1297 u32 err; 1298 int res; 1299 1300 /* Catch invalid receive requests */ 1301 if (unlikely(!buf_len)) 1302 return -EINVAL; 1303 1304 lock_sock(sk); 1305 1306 if (unlikely(sock->state == SS_UNCONNECTED)) { 1307 res = -ENOTCONN; 1308 goto exit; 1309 } 1310 1311 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); 1312 restart: 1313 1314 /* Look for a message in receive queue; wait if necessary */ 1315 res = tipc_wait_for_rcvmsg(sock, &timeo); 1316 if (res) 1317 goto exit; 1318 1319 /* Look at first message in receive queue */ 1320 buf = skb_peek(&sk->sk_receive_queue); 1321 msg = buf_msg(buf); 1322 sz = msg_data_sz(msg); 1323 err = msg_errcode(msg); 1324 1325 /* Discard an empty non-errored message & try again */ 1326 if ((!sz) && (!err)) { 1327 tsk_advance_rx_queue(sk); 1328 goto restart; 1329 } 1330 1331 /* Capture sender's address (optional) */ 1332 set_orig_addr(m, msg); 1333 1334 /* Capture ancillary data (optional) */ 1335 res = tipc_sk_anc_data_recv(m, msg, tsk); 1336 if (res) 1337 goto exit; 1338 1339 /* Capture message data (if valid) & compute return value (always) */ 1340 if (!err) { 1341 if (unlikely(buf_len < sz)) { 1342 sz = buf_len; 1343 m->msg_flags |= MSG_TRUNC; 1344 } 1345 res = skb_copy_datagram_msg(buf, msg_hdr_sz(msg), m, sz); 1346 if (res) 1347 goto exit; 1348 res = sz; 1349 } else { 1350 if ((sock->state == SS_READY) || 1351 ((err == TIPC_CONN_SHUTDOWN) || m->msg_control)) 1352 res = 0; 1353 else 1354 res = -ECONNRESET; 1355 } 1356 1357 /* Consume received message (optional) */ 1358 if (likely(!(flags & MSG_PEEK))) { 1359 if ((sock->state != SS_READY) && 1360 (++tsk->rcv_unacked >= TIPC_CONNACK_INTV)) { 1361 tipc_sk_send_ack(tsk, tsk->rcv_unacked); 1362 tsk->rcv_unacked = 0; 1363 } 1364 tsk_advance_rx_queue(sk); 1365 } 1366 exit: 1367 release_sock(sk); 1368 return res; 1369 } 1370 1371 /** 1372 * tipc_recv_stream - receive stream-oriented data 1373 * @m: descriptor for message info 1374 * @buf_len: total size of user buffer area 1375 * @flags: receive flags 1376 * 1377 * Used for SOCK_STREAM messages only. If not enough data is available 1378 * will optionally wait for more; never truncates data. 1379 * 1380 * Returns size of returned message data, errno otherwise 1381 */ 1382 static int tipc_recv_stream(struct socket *sock, struct msghdr *m, 1383 size_t buf_len, int flags) 1384 { 1385 struct sock *sk = sock->sk; 1386 struct tipc_sock *tsk = tipc_sk(sk); 1387 struct sk_buff *buf; 1388 struct tipc_msg *msg; 1389 long timeo; 1390 unsigned int sz; 1391 int sz_to_copy, target, needed; 1392 int sz_copied = 0; 1393 u32 err; 1394 int res = 0; 1395 1396 /* Catch invalid receive attempts */ 1397 if (unlikely(!buf_len)) 1398 return -EINVAL; 1399 1400 lock_sock(sk); 1401 1402 if (unlikely(sock->state == SS_UNCONNECTED)) { 1403 res = -ENOTCONN; 1404 goto exit; 1405 } 1406 1407 target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len); 1408 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); 1409 1410 restart: 1411 /* Look for a message in receive queue; wait if necessary */ 1412 res = tipc_wait_for_rcvmsg(sock, &timeo); 1413 if (res) 1414 goto exit; 1415 1416 /* Look at first message in receive queue */ 1417 buf = skb_peek(&sk->sk_receive_queue); 1418 msg = buf_msg(buf); 1419 sz = msg_data_sz(msg); 1420 err = msg_errcode(msg); 1421 1422 /* Discard an empty non-errored message & try again */ 1423 if ((!sz) && (!err)) { 1424 tsk_advance_rx_queue(sk); 1425 goto restart; 1426 } 1427 1428 /* Optionally capture sender's address & ancillary data of first msg */ 1429 if (sz_copied == 0) { 1430 set_orig_addr(m, msg); 1431 res = tipc_sk_anc_data_recv(m, msg, tsk); 1432 if (res) 1433 goto exit; 1434 } 1435 1436 /* Capture message data (if valid) & compute return value (always) */ 1437 if (!err) { 1438 u32 offset = (u32)(unsigned long)(TIPC_SKB_CB(buf)->handle); 1439 1440 sz -= offset; 1441 needed = (buf_len - sz_copied); 1442 sz_to_copy = (sz <= needed) ? sz : needed; 1443 1444 res = skb_copy_datagram_msg(buf, msg_hdr_sz(msg) + offset, 1445 m, sz_to_copy); 1446 if (res) 1447 goto exit; 1448 1449 sz_copied += sz_to_copy; 1450 1451 if (sz_to_copy < sz) { 1452 if (!(flags & MSG_PEEK)) 1453 TIPC_SKB_CB(buf)->handle = 1454 (void *)(unsigned long)(offset + sz_to_copy); 1455 goto exit; 1456 } 1457 } else { 1458 if (sz_copied != 0) 1459 goto exit; /* can't add error msg to valid data */ 1460 1461 if ((err == TIPC_CONN_SHUTDOWN) || m->msg_control) 1462 res = 0; 1463 else 1464 res = -ECONNRESET; 1465 } 1466 1467 /* Consume received message (optional) */ 1468 if (likely(!(flags & MSG_PEEK))) { 1469 if (unlikely(++tsk->rcv_unacked >= TIPC_CONNACK_INTV)) { 1470 tipc_sk_send_ack(tsk, tsk->rcv_unacked); 1471 tsk->rcv_unacked = 0; 1472 } 1473 tsk_advance_rx_queue(sk); 1474 } 1475 1476 /* Loop around if more data is required */ 1477 if ((sz_copied < buf_len) && /* didn't get all requested data */ 1478 (!skb_queue_empty(&sk->sk_receive_queue) || 1479 (sz_copied < target)) && /* and more is ready or required */ 1480 (!(flags & MSG_PEEK)) && /* and aren't just peeking at data */ 1481 (!err)) /* and haven't reached a FIN */ 1482 goto restart; 1483 1484 exit: 1485 release_sock(sk); 1486 return sz_copied ? sz_copied : res; 1487 } 1488 1489 /** 1490 * tipc_write_space - wake up thread if port congestion is released 1491 * @sk: socket 1492 */ 1493 static void tipc_write_space(struct sock *sk) 1494 { 1495 struct socket_wq *wq; 1496 1497 rcu_read_lock(); 1498 wq = rcu_dereference(sk->sk_wq); 1499 if (skwq_has_sleeper(wq)) 1500 wake_up_interruptible_sync_poll(&wq->wait, POLLOUT | 1501 POLLWRNORM | POLLWRBAND); 1502 rcu_read_unlock(); 1503 } 1504 1505 /** 1506 * tipc_data_ready - wake up threads to indicate messages have been received 1507 * @sk: socket 1508 * @len: the length of messages 1509 */ 1510 static void tipc_data_ready(struct sock *sk) 1511 { 1512 struct socket_wq *wq; 1513 1514 rcu_read_lock(); 1515 wq = rcu_dereference(sk->sk_wq); 1516 if (skwq_has_sleeper(wq)) 1517 wake_up_interruptible_sync_poll(&wq->wait, POLLIN | 1518 POLLRDNORM | POLLRDBAND); 1519 rcu_read_unlock(); 1520 } 1521 1522 static void tipc_sock_destruct(struct sock *sk) 1523 { 1524 __skb_queue_purge(&sk->sk_receive_queue); 1525 } 1526 1527 /** 1528 * filter_connect - Handle all incoming messages for a connection-based socket 1529 * @tsk: TIPC socket 1530 * @skb: pointer to message buffer. Set to NULL if buffer is consumed 1531 * 1532 * Returns true if everything ok, false otherwise 1533 */ 1534 static bool filter_connect(struct tipc_sock *tsk, struct sk_buff *skb) 1535 { 1536 struct sock *sk = &tsk->sk; 1537 struct net *net = sock_net(sk); 1538 struct socket *sock = sk->sk_socket; 1539 struct tipc_msg *hdr = buf_msg(skb); 1540 1541 if (unlikely(msg_mcast(hdr))) 1542 return false; 1543 1544 switch ((int)sock->state) { 1545 case SS_CONNECTED: 1546 1547 /* Accept only connection-based messages sent by peer */ 1548 if (unlikely(!tsk_peer_msg(tsk, hdr))) 1549 return false; 1550 1551 if (unlikely(msg_errcode(hdr))) { 1552 sock->state = SS_DISCONNECTING; 1553 tsk->connected = 0; 1554 /* Let timer expire on it's own */ 1555 tipc_node_remove_conn(net, tsk_peer_node(tsk), 1556 tsk->portid); 1557 } 1558 return true; 1559 1560 case SS_CONNECTING: 1561 1562 /* Accept only ACK or NACK message */ 1563 if (unlikely(!msg_connected(hdr))) 1564 return false; 1565 1566 if (unlikely(msg_errcode(hdr))) { 1567 sock->state = SS_DISCONNECTING; 1568 sk->sk_err = ECONNREFUSED; 1569 return true; 1570 } 1571 1572 if (unlikely(!msg_isdata(hdr))) { 1573 sock->state = SS_DISCONNECTING; 1574 sk->sk_err = EINVAL; 1575 return true; 1576 } 1577 1578 tipc_sk_finish_conn(tsk, msg_origport(hdr), msg_orignode(hdr)); 1579 msg_set_importance(&tsk->phdr, msg_importance(hdr)); 1580 sock->state = SS_CONNECTED; 1581 1582 /* If 'ACK+' message, add to socket receive queue */ 1583 if (msg_data_sz(hdr)) 1584 return true; 1585 1586 /* If empty 'ACK-' message, wake up sleeping connect() */ 1587 if (waitqueue_active(sk_sleep(sk))) 1588 wake_up_interruptible(sk_sleep(sk)); 1589 1590 /* 'ACK-' message is neither accepted nor rejected: */ 1591 msg_set_dest_droppable(hdr, 1); 1592 return false; 1593 1594 case SS_LISTENING: 1595 case SS_UNCONNECTED: 1596 1597 /* Accept only SYN message */ 1598 if (!msg_connected(hdr) && !(msg_errcode(hdr))) 1599 return true; 1600 break; 1601 case SS_DISCONNECTING: 1602 break; 1603 default: 1604 pr_err("Unknown socket state %u\n", sock->state); 1605 } 1606 return false; 1607 } 1608 1609 /** 1610 * rcvbuf_limit - get proper overload limit of socket receive queue 1611 * @sk: socket 1612 * @buf: message 1613 * 1614 * For all connection oriented messages, irrespective of importance, 1615 * the default overload value (i.e. 67MB) is set as limit. 1616 * 1617 * For all connectionless messages, by default new queue limits are 1618 * as belows: 1619 * 1620 * TIPC_LOW_IMPORTANCE (4 MB) 1621 * TIPC_MEDIUM_IMPORTANCE (8 MB) 1622 * TIPC_HIGH_IMPORTANCE (16 MB) 1623 * TIPC_CRITICAL_IMPORTANCE (32 MB) 1624 * 1625 * Returns overload limit according to corresponding message importance 1626 */ 1627 static unsigned int rcvbuf_limit(struct sock *sk, struct sk_buff *buf) 1628 { 1629 struct tipc_msg *msg = buf_msg(buf); 1630 1631 if (msg_connected(msg)) 1632 return sysctl_tipc_rmem[2]; 1633 1634 return sk->sk_rcvbuf >> TIPC_CRITICAL_IMPORTANCE << 1635 msg_importance(msg); 1636 } 1637 1638 /** 1639 * filter_rcv - validate incoming message 1640 * @sk: socket 1641 * @skb: pointer to message. 1642 * 1643 * Enqueues message on receive queue if acceptable; optionally handles 1644 * disconnect indication for a connected socket. 1645 * 1646 * Called with socket lock already taken 1647 * 1648 * Returns true if message was added to socket receive queue, otherwise false 1649 */ 1650 static bool filter_rcv(struct sock *sk, struct sk_buff *skb) 1651 { 1652 struct socket *sock = sk->sk_socket; 1653 struct tipc_sock *tsk = tipc_sk(sk); 1654 struct tipc_msg *hdr = buf_msg(skb); 1655 unsigned int limit = rcvbuf_limit(sk, skb); 1656 int err = TIPC_OK; 1657 int usr = msg_user(hdr); 1658 1659 if (unlikely(msg_user(hdr) == CONN_MANAGER)) { 1660 tipc_sk_proto_rcv(tsk, skb); 1661 return false; 1662 } 1663 1664 if (unlikely(usr == SOCK_WAKEUP)) { 1665 kfree_skb(skb); 1666 tsk->link_cong = 0; 1667 sk->sk_write_space(sk); 1668 return false; 1669 } 1670 1671 /* Drop if illegal message type */ 1672 if (unlikely(msg_type(hdr) > TIPC_DIRECT_MSG)) { 1673 kfree_skb(skb); 1674 return false; 1675 } 1676 1677 /* Reject if wrong message type for current socket state */ 1678 if (unlikely(sock->state == SS_READY)) { 1679 if (msg_connected(hdr)) { 1680 err = TIPC_ERR_NO_PORT; 1681 goto reject; 1682 } 1683 } else if (unlikely(!filter_connect(tsk, skb))) { 1684 err = TIPC_ERR_NO_PORT; 1685 goto reject; 1686 } 1687 1688 /* Reject message if there isn't room to queue it */ 1689 if (unlikely(sk_rmem_alloc_get(sk) + skb->truesize >= limit)) { 1690 err = TIPC_ERR_OVERLOAD; 1691 goto reject; 1692 } 1693 1694 /* Enqueue message */ 1695 TIPC_SKB_CB(skb)->handle = NULL; 1696 __skb_queue_tail(&sk->sk_receive_queue, skb); 1697 skb_set_owner_r(skb, sk); 1698 1699 sk->sk_data_ready(sk); 1700 return true; 1701 1702 reject: 1703 tipc_sk_respond(sk, skb, err); 1704 return false; 1705 } 1706 1707 /** 1708 * tipc_backlog_rcv - handle incoming message from backlog queue 1709 * @sk: socket 1710 * @skb: message 1711 * 1712 * Caller must hold socket lock 1713 * 1714 * Returns 0 1715 */ 1716 static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb) 1717 { 1718 unsigned int truesize = skb->truesize; 1719 1720 if (likely(filter_rcv(sk, skb))) 1721 atomic_add(truesize, &tipc_sk(sk)->dupl_rcvcnt); 1722 return 0; 1723 } 1724 1725 /** 1726 * tipc_sk_enqueue - extract all buffers with destination 'dport' from 1727 * inputq and try adding them to socket or backlog queue 1728 * @inputq: list of incoming buffers with potentially different destinations 1729 * @sk: socket where the buffers should be enqueued 1730 * @dport: port number for the socket 1731 * 1732 * Caller must hold socket lock 1733 */ 1734 static void tipc_sk_enqueue(struct sk_buff_head *inputq, struct sock *sk, 1735 u32 dport) 1736 { 1737 unsigned int lim; 1738 atomic_t *dcnt; 1739 struct sk_buff *skb; 1740 unsigned long time_limit = jiffies + 2; 1741 1742 while (skb_queue_len(inputq)) { 1743 if (unlikely(time_after_eq(jiffies, time_limit))) 1744 return; 1745 1746 skb = tipc_skb_dequeue(inputq, dport); 1747 if (unlikely(!skb)) 1748 return; 1749 1750 /* Add message directly to receive queue if possible */ 1751 if (!sock_owned_by_user(sk)) { 1752 filter_rcv(sk, skb); 1753 continue; 1754 } 1755 1756 /* Try backlog, compensating for double-counted bytes */ 1757 dcnt = &tipc_sk(sk)->dupl_rcvcnt; 1758 if (sk->sk_backlog.len) 1759 atomic_set(dcnt, 0); 1760 lim = rcvbuf_limit(sk, skb) + atomic_read(dcnt); 1761 if (likely(!sk_add_backlog(sk, skb, lim))) 1762 continue; 1763 1764 /* Overload => reject message back to sender */ 1765 tipc_sk_respond(sk, skb, TIPC_ERR_OVERLOAD); 1766 break; 1767 } 1768 } 1769 1770 /** 1771 * tipc_sk_rcv - handle a chain of incoming buffers 1772 * @inputq: buffer list containing the buffers 1773 * Consumes all buffers in list until inputq is empty 1774 * Note: may be called in multiple threads referring to the same queue 1775 */ 1776 void tipc_sk_rcv(struct net *net, struct sk_buff_head *inputq) 1777 { 1778 u32 dnode, dport = 0; 1779 int err; 1780 struct tipc_sock *tsk; 1781 struct sock *sk; 1782 struct sk_buff *skb; 1783 1784 while (skb_queue_len(inputq)) { 1785 dport = tipc_skb_peek_port(inputq, dport); 1786 tsk = tipc_sk_lookup(net, dport); 1787 1788 if (likely(tsk)) { 1789 sk = &tsk->sk; 1790 if (likely(spin_trylock_bh(&sk->sk_lock.slock))) { 1791 tipc_sk_enqueue(inputq, sk, dport); 1792 spin_unlock_bh(&sk->sk_lock.slock); 1793 } 1794 sock_put(sk); 1795 continue; 1796 } 1797 1798 /* No destination socket => dequeue skb if still there */ 1799 skb = tipc_skb_dequeue(inputq, dport); 1800 if (!skb) 1801 return; 1802 1803 /* Try secondary lookup if unresolved named message */ 1804 err = TIPC_ERR_NO_PORT; 1805 if (tipc_msg_lookup_dest(net, skb, &err)) 1806 goto xmit; 1807 1808 /* Prepare for message rejection */ 1809 if (!tipc_msg_reverse(tipc_own_addr(net), &skb, err)) 1810 continue; 1811 xmit: 1812 dnode = msg_destnode(buf_msg(skb)); 1813 tipc_node_xmit_skb(net, skb, dnode, dport); 1814 } 1815 } 1816 1817 static int tipc_wait_for_connect(struct socket *sock, long *timeo_p) 1818 { 1819 struct sock *sk = sock->sk; 1820 DEFINE_WAIT(wait); 1821 int done; 1822 1823 do { 1824 int err = sock_error(sk); 1825 if (err) 1826 return err; 1827 if (!*timeo_p) 1828 return -ETIMEDOUT; 1829 if (signal_pending(current)) 1830 return sock_intr_errno(*timeo_p); 1831 1832 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1833 done = sk_wait_event(sk, timeo_p, sock->state != SS_CONNECTING); 1834 finish_wait(sk_sleep(sk), &wait); 1835 } while (!done); 1836 return 0; 1837 } 1838 1839 /** 1840 * tipc_connect - establish a connection to another TIPC port 1841 * @sock: socket structure 1842 * @dest: socket address for destination port 1843 * @destlen: size of socket address data structure 1844 * @flags: file-related flags associated with socket 1845 * 1846 * Returns 0 on success, errno otherwise 1847 */ 1848 static int tipc_connect(struct socket *sock, struct sockaddr *dest, 1849 int destlen, int flags) 1850 { 1851 struct sock *sk = sock->sk; 1852 struct tipc_sock *tsk = tipc_sk(sk); 1853 struct sockaddr_tipc *dst = (struct sockaddr_tipc *)dest; 1854 struct msghdr m = {NULL,}; 1855 long timeout = (flags & O_NONBLOCK) ? 0 : tsk->conn_timeout; 1856 socket_state previous; 1857 int res = 0; 1858 1859 lock_sock(sk); 1860 1861 /* DGRAM/RDM connect(), just save the destaddr */ 1862 if (sock->state == SS_READY) { 1863 if (dst->family == AF_UNSPEC) { 1864 memset(&tsk->remote, 0, sizeof(struct sockaddr_tipc)); 1865 tsk->connected = 0; 1866 } else if (destlen != sizeof(struct sockaddr_tipc)) { 1867 res = -EINVAL; 1868 } else { 1869 memcpy(&tsk->remote, dest, destlen); 1870 tsk->connected = 1; 1871 } 1872 goto exit; 1873 } 1874 1875 /* 1876 * Reject connection attempt using multicast address 1877 * 1878 * Note: send_msg() validates the rest of the address fields, 1879 * so there's no need to do it here 1880 */ 1881 if (dst->addrtype == TIPC_ADDR_MCAST) { 1882 res = -EINVAL; 1883 goto exit; 1884 } 1885 1886 previous = sock->state; 1887 switch (sock->state) { 1888 case SS_UNCONNECTED: 1889 /* Send a 'SYN-' to destination */ 1890 m.msg_name = dest; 1891 m.msg_namelen = destlen; 1892 1893 /* If connect is in non-blocking case, set MSG_DONTWAIT to 1894 * indicate send_msg() is never blocked. 1895 */ 1896 if (!timeout) 1897 m.msg_flags = MSG_DONTWAIT; 1898 1899 res = __tipc_sendmsg(sock, &m, 0); 1900 if ((res < 0) && (res != -EWOULDBLOCK)) 1901 goto exit; 1902 1903 /* Just entered SS_CONNECTING state; the only 1904 * difference is that return value in non-blocking 1905 * case is EINPROGRESS, rather than EALREADY. 1906 */ 1907 res = -EINPROGRESS; 1908 case SS_CONNECTING: 1909 if (previous == SS_CONNECTING) 1910 res = -EALREADY; 1911 if (!timeout) 1912 goto exit; 1913 timeout = msecs_to_jiffies(timeout); 1914 /* Wait until an 'ACK' or 'RST' arrives, or a timeout occurs */ 1915 res = tipc_wait_for_connect(sock, &timeout); 1916 break; 1917 case SS_CONNECTED: 1918 res = -EISCONN; 1919 break; 1920 default: 1921 res = -EINVAL; 1922 break; 1923 } 1924 exit: 1925 release_sock(sk); 1926 return res; 1927 } 1928 1929 /** 1930 * tipc_listen - allow socket to listen for incoming connections 1931 * @sock: socket structure 1932 * @len: (unused) 1933 * 1934 * Returns 0 on success, errno otherwise 1935 */ 1936 static int tipc_listen(struct socket *sock, int len) 1937 { 1938 struct sock *sk = sock->sk; 1939 int res; 1940 1941 lock_sock(sk); 1942 1943 if (sock->state != SS_UNCONNECTED) 1944 res = -EINVAL; 1945 else { 1946 sock->state = SS_LISTENING; 1947 res = 0; 1948 } 1949 1950 release_sock(sk); 1951 return res; 1952 } 1953 1954 static int tipc_wait_for_accept(struct socket *sock, long timeo) 1955 { 1956 struct sock *sk = sock->sk; 1957 DEFINE_WAIT(wait); 1958 int err; 1959 1960 /* True wake-one mechanism for incoming connections: only 1961 * one process gets woken up, not the 'whole herd'. 1962 * Since we do not 'race & poll' for established sockets 1963 * anymore, the common case will execute the loop only once. 1964 */ 1965 for (;;) { 1966 prepare_to_wait_exclusive(sk_sleep(sk), &wait, 1967 TASK_INTERRUPTIBLE); 1968 if (timeo && skb_queue_empty(&sk->sk_receive_queue)) { 1969 release_sock(sk); 1970 timeo = schedule_timeout(timeo); 1971 lock_sock(sk); 1972 } 1973 err = 0; 1974 if (!skb_queue_empty(&sk->sk_receive_queue)) 1975 break; 1976 err = -EINVAL; 1977 if (sock->state != SS_LISTENING) 1978 break; 1979 err = -EAGAIN; 1980 if (!timeo) 1981 break; 1982 err = sock_intr_errno(timeo); 1983 if (signal_pending(current)) 1984 break; 1985 } 1986 finish_wait(sk_sleep(sk), &wait); 1987 return err; 1988 } 1989 1990 /** 1991 * tipc_accept - wait for connection request 1992 * @sock: listening socket 1993 * @newsock: new socket that is to be connected 1994 * @flags: file-related flags associated with socket 1995 * 1996 * Returns 0 on success, errno otherwise 1997 */ 1998 static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags) 1999 { 2000 struct sock *new_sk, *sk = sock->sk; 2001 struct sk_buff *buf; 2002 struct tipc_sock *new_tsock; 2003 struct tipc_msg *msg; 2004 long timeo; 2005 int res; 2006 2007 lock_sock(sk); 2008 2009 if (sock->state != SS_LISTENING) { 2010 res = -EINVAL; 2011 goto exit; 2012 } 2013 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 2014 res = tipc_wait_for_accept(sock, timeo); 2015 if (res) 2016 goto exit; 2017 2018 buf = skb_peek(&sk->sk_receive_queue); 2019 2020 res = tipc_sk_create(sock_net(sock->sk), new_sock, 0, 1); 2021 if (res) 2022 goto exit; 2023 security_sk_clone(sock->sk, new_sock->sk); 2024 2025 new_sk = new_sock->sk; 2026 new_tsock = tipc_sk(new_sk); 2027 msg = buf_msg(buf); 2028 2029 /* we lock on new_sk; but lockdep sees the lock on sk */ 2030 lock_sock_nested(new_sk, SINGLE_DEPTH_NESTING); 2031 2032 /* 2033 * Reject any stray messages received by new socket 2034 * before the socket lock was taken (very, very unlikely) 2035 */ 2036 tsk_rej_rx_queue(new_sk); 2037 2038 /* Connect new socket to it's peer */ 2039 tipc_sk_finish_conn(new_tsock, msg_origport(msg), msg_orignode(msg)); 2040 new_sock->state = SS_CONNECTED; 2041 2042 tsk_set_importance(new_tsock, msg_importance(msg)); 2043 if (msg_named(msg)) { 2044 new_tsock->conn_type = msg_nametype(msg); 2045 new_tsock->conn_instance = msg_nameinst(msg); 2046 } 2047 2048 /* 2049 * Respond to 'SYN-' by discarding it & returning 'ACK'-. 2050 * Respond to 'SYN+' by queuing it on new socket. 2051 */ 2052 if (!msg_data_sz(msg)) { 2053 struct msghdr m = {NULL,}; 2054 2055 tsk_advance_rx_queue(sk); 2056 __tipc_send_stream(new_sock, &m, 0); 2057 } else { 2058 __skb_dequeue(&sk->sk_receive_queue); 2059 __skb_queue_head(&new_sk->sk_receive_queue, buf); 2060 skb_set_owner_r(buf, new_sk); 2061 } 2062 release_sock(new_sk); 2063 exit: 2064 release_sock(sk); 2065 return res; 2066 } 2067 2068 /** 2069 * tipc_shutdown - shutdown socket connection 2070 * @sock: socket structure 2071 * @how: direction to close (must be SHUT_RDWR) 2072 * 2073 * Terminates connection (if necessary), then purges socket's receive queue. 2074 * 2075 * Returns 0 on success, errno otherwise 2076 */ 2077 static int tipc_shutdown(struct socket *sock, int how) 2078 { 2079 struct sock *sk = sock->sk; 2080 struct net *net = sock_net(sk); 2081 struct tipc_sock *tsk = tipc_sk(sk); 2082 struct sk_buff *skb; 2083 u32 dnode = tsk_peer_node(tsk); 2084 u32 dport = tsk_peer_port(tsk); 2085 u32 onode = tipc_own_addr(net); 2086 u32 oport = tsk->portid; 2087 int res; 2088 2089 if (how != SHUT_RDWR) 2090 return -EINVAL; 2091 2092 lock_sock(sk); 2093 2094 switch (sock->state) { 2095 case SS_CONNECTING: 2096 case SS_CONNECTED: 2097 2098 restart: 2099 dnode = tsk_peer_node(tsk); 2100 2101 /* Disconnect and send a 'FIN+' or 'FIN-' message to peer */ 2102 skb = __skb_dequeue(&sk->sk_receive_queue); 2103 if (skb) { 2104 if (TIPC_SKB_CB(skb)->handle != NULL) { 2105 kfree_skb(skb); 2106 goto restart; 2107 } 2108 tipc_sk_respond(sk, skb, TIPC_CONN_SHUTDOWN); 2109 } else { 2110 skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE, 2111 TIPC_CONN_MSG, SHORT_H_SIZE, 2112 0, dnode, onode, dport, oport, 2113 TIPC_CONN_SHUTDOWN); 2114 tipc_node_xmit_skb(net, skb, dnode, tsk->portid); 2115 } 2116 tsk->connected = 0; 2117 sock->state = SS_DISCONNECTING; 2118 tipc_node_remove_conn(net, dnode, tsk->portid); 2119 /* fall through */ 2120 2121 case SS_DISCONNECTING: 2122 2123 /* Discard any unreceived messages */ 2124 __skb_queue_purge(&sk->sk_receive_queue); 2125 2126 /* Wake up anyone sleeping in poll */ 2127 sk->sk_state_change(sk); 2128 res = 0; 2129 break; 2130 2131 default: 2132 res = -ENOTCONN; 2133 } 2134 2135 release_sock(sk); 2136 return res; 2137 } 2138 2139 static void tipc_sk_timeout(unsigned long data) 2140 { 2141 struct tipc_sock *tsk = (struct tipc_sock *)data; 2142 struct sock *sk = &tsk->sk; 2143 struct sk_buff *skb = NULL; 2144 u32 peer_port, peer_node; 2145 u32 own_node = tsk_own_node(tsk); 2146 2147 bh_lock_sock(sk); 2148 if (!tsk->connected) { 2149 bh_unlock_sock(sk); 2150 goto exit; 2151 } 2152 peer_port = tsk_peer_port(tsk); 2153 peer_node = tsk_peer_node(tsk); 2154 2155 if (tsk->probing_state == TIPC_CONN_PROBING) { 2156 if (!sock_owned_by_user(sk)) { 2157 sk->sk_socket->state = SS_DISCONNECTING; 2158 tsk->connected = 0; 2159 tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk), 2160 tsk_peer_port(tsk)); 2161 sk->sk_state_change(sk); 2162 } else { 2163 /* Try again later */ 2164 sk_reset_timer(sk, &sk->sk_timer, (HZ / 20)); 2165 } 2166 2167 } else { 2168 skb = tipc_msg_create(CONN_MANAGER, CONN_PROBE, 2169 INT_H_SIZE, 0, peer_node, own_node, 2170 peer_port, tsk->portid, TIPC_OK); 2171 tsk->probing_state = TIPC_CONN_PROBING; 2172 sk_reset_timer(sk, &sk->sk_timer, jiffies + tsk->probing_intv); 2173 } 2174 bh_unlock_sock(sk); 2175 if (skb) 2176 tipc_node_xmit_skb(sock_net(sk), skb, peer_node, tsk->portid); 2177 exit: 2178 sock_put(sk); 2179 } 2180 2181 static int tipc_sk_publish(struct tipc_sock *tsk, uint scope, 2182 struct tipc_name_seq const *seq) 2183 { 2184 struct net *net = sock_net(&tsk->sk); 2185 struct publication *publ; 2186 u32 key; 2187 2188 if (tsk->connected) 2189 return -EINVAL; 2190 key = tsk->portid + tsk->pub_count + 1; 2191 if (key == tsk->portid) 2192 return -EADDRINUSE; 2193 2194 publ = tipc_nametbl_publish(net, seq->type, seq->lower, seq->upper, 2195 scope, tsk->portid, key); 2196 if (unlikely(!publ)) 2197 return -EINVAL; 2198 2199 list_add(&publ->pport_list, &tsk->publications); 2200 tsk->pub_count++; 2201 tsk->published = 1; 2202 return 0; 2203 } 2204 2205 static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope, 2206 struct tipc_name_seq const *seq) 2207 { 2208 struct net *net = sock_net(&tsk->sk); 2209 struct publication *publ; 2210 struct publication *safe; 2211 int rc = -EINVAL; 2212 2213 list_for_each_entry_safe(publ, safe, &tsk->publications, pport_list) { 2214 if (seq) { 2215 if (publ->scope != scope) 2216 continue; 2217 if (publ->type != seq->type) 2218 continue; 2219 if (publ->lower != seq->lower) 2220 continue; 2221 if (publ->upper != seq->upper) 2222 break; 2223 tipc_nametbl_withdraw(net, publ->type, publ->lower, 2224 publ->ref, publ->key); 2225 rc = 0; 2226 break; 2227 } 2228 tipc_nametbl_withdraw(net, publ->type, publ->lower, 2229 publ->ref, publ->key); 2230 rc = 0; 2231 } 2232 if (list_empty(&tsk->publications)) 2233 tsk->published = 0; 2234 return rc; 2235 } 2236 2237 /* tipc_sk_reinit: set non-zero address in all existing sockets 2238 * when we go from standalone to network mode. 2239 */ 2240 void tipc_sk_reinit(struct net *net) 2241 { 2242 struct tipc_net *tn = net_generic(net, tipc_net_id); 2243 const struct bucket_table *tbl; 2244 struct rhash_head *pos; 2245 struct tipc_sock *tsk; 2246 struct tipc_msg *msg; 2247 int i; 2248 2249 rcu_read_lock(); 2250 tbl = rht_dereference_rcu((&tn->sk_rht)->tbl, &tn->sk_rht); 2251 for (i = 0; i < tbl->size; i++) { 2252 rht_for_each_entry_rcu(tsk, pos, tbl, i, node) { 2253 spin_lock_bh(&tsk->sk.sk_lock.slock); 2254 msg = &tsk->phdr; 2255 msg_set_prevnode(msg, tn->own_addr); 2256 msg_set_orignode(msg, tn->own_addr); 2257 spin_unlock_bh(&tsk->sk.sk_lock.slock); 2258 } 2259 } 2260 rcu_read_unlock(); 2261 } 2262 2263 static struct tipc_sock *tipc_sk_lookup(struct net *net, u32 portid) 2264 { 2265 struct tipc_net *tn = net_generic(net, tipc_net_id); 2266 struct tipc_sock *tsk; 2267 2268 rcu_read_lock(); 2269 tsk = rhashtable_lookup_fast(&tn->sk_rht, &portid, tsk_rht_params); 2270 if (tsk) 2271 sock_hold(&tsk->sk); 2272 rcu_read_unlock(); 2273 2274 return tsk; 2275 } 2276 2277 static int tipc_sk_insert(struct tipc_sock *tsk) 2278 { 2279 struct sock *sk = &tsk->sk; 2280 struct net *net = sock_net(sk); 2281 struct tipc_net *tn = net_generic(net, tipc_net_id); 2282 u32 remaining = (TIPC_MAX_PORT - TIPC_MIN_PORT) + 1; 2283 u32 portid = prandom_u32() % remaining + TIPC_MIN_PORT; 2284 2285 while (remaining--) { 2286 portid++; 2287 if ((portid < TIPC_MIN_PORT) || (portid > TIPC_MAX_PORT)) 2288 portid = TIPC_MIN_PORT; 2289 tsk->portid = portid; 2290 sock_hold(&tsk->sk); 2291 if (!rhashtable_lookup_insert_fast(&tn->sk_rht, &tsk->node, 2292 tsk_rht_params)) 2293 return 0; 2294 sock_put(&tsk->sk); 2295 } 2296 2297 return -1; 2298 } 2299 2300 static void tipc_sk_remove(struct tipc_sock *tsk) 2301 { 2302 struct sock *sk = &tsk->sk; 2303 struct tipc_net *tn = net_generic(sock_net(sk), tipc_net_id); 2304 2305 if (!rhashtable_remove_fast(&tn->sk_rht, &tsk->node, tsk_rht_params)) { 2306 WARN_ON(atomic_read(&sk->sk_refcnt) == 1); 2307 __sock_put(sk); 2308 } 2309 } 2310 2311 static const struct rhashtable_params tsk_rht_params = { 2312 .nelem_hint = 192, 2313 .head_offset = offsetof(struct tipc_sock, node), 2314 .key_offset = offsetof(struct tipc_sock, portid), 2315 .key_len = sizeof(u32), /* portid */ 2316 .max_size = 1048576, 2317 .min_size = 256, 2318 .automatic_shrinking = true, 2319 }; 2320 2321 int tipc_sk_rht_init(struct net *net) 2322 { 2323 struct tipc_net *tn = net_generic(net, tipc_net_id); 2324 2325 return rhashtable_init(&tn->sk_rht, &tsk_rht_params); 2326 } 2327 2328 void tipc_sk_rht_destroy(struct net *net) 2329 { 2330 struct tipc_net *tn = net_generic(net, tipc_net_id); 2331 2332 /* Wait for socket readers to complete */ 2333 synchronize_net(); 2334 2335 rhashtable_destroy(&tn->sk_rht); 2336 } 2337 2338 /** 2339 * tipc_setsockopt - set socket option 2340 * @sock: socket structure 2341 * @lvl: option level 2342 * @opt: option identifier 2343 * @ov: pointer to new option value 2344 * @ol: length of option value 2345 * 2346 * For stream sockets only, accepts and ignores all IPPROTO_TCP options 2347 * (to ease compatibility). 2348 * 2349 * Returns 0 on success, errno otherwise 2350 */ 2351 static int tipc_setsockopt(struct socket *sock, int lvl, int opt, 2352 char __user *ov, unsigned int ol) 2353 { 2354 struct sock *sk = sock->sk; 2355 struct tipc_sock *tsk = tipc_sk(sk); 2356 u32 value; 2357 int res; 2358 2359 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM)) 2360 return 0; 2361 if (lvl != SOL_TIPC) 2362 return -ENOPROTOOPT; 2363 if (ol < sizeof(value)) 2364 return -EINVAL; 2365 res = get_user(value, (u32 __user *)ov); 2366 if (res) 2367 return res; 2368 2369 lock_sock(sk); 2370 2371 switch (opt) { 2372 case TIPC_IMPORTANCE: 2373 res = tsk_set_importance(tsk, value); 2374 break; 2375 case TIPC_SRC_DROPPABLE: 2376 if (sock->type != SOCK_STREAM) 2377 tsk_set_unreliable(tsk, value); 2378 else 2379 res = -ENOPROTOOPT; 2380 break; 2381 case TIPC_DEST_DROPPABLE: 2382 tsk_set_unreturnable(tsk, value); 2383 break; 2384 case TIPC_CONN_TIMEOUT: 2385 tipc_sk(sk)->conn_timeout = value; 2386 /* no need to set "res", since already 0 at this point */ 2387 break; 2388 default: 2389 res = -EINVAL; 2390 } 2391 2392 release_sock(sk); 2393 2394 return res; 2395 } 2396 2397 /** 2398 * tipc_getsockopt - get socket option 2399 * @sock: socket structure 2400 * @lvl: option level 2401 * @opt: option identifier 2402 * @ov: receptacle for option value 2403 * @ol: receptacle for length of option value 2404 * 2405 * For stream sockets only, returns 0 length result for all IPPROTO_TCP options 2406 * (to ease compatibility). 2407 * 2408 * Returns 0 on success, errno otherwise 2409 */ 2410 static int tipc_getsockopt(struct socket *sock, int lvl, int opt, 2411 char __user *ov, int __user *ol) 2412 { 2413 struct sock *sk = sock->sk; 2414 struct tipc_sock *tsk = tipc_sk(sk); 2415 int len; 2416 u32 value; 2417 int res; 2418 2419 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM)) 2420 return put_user(0, ol); 2421 if (lvl != SOL_TIPC) 2422 return -ENOPROTOOPT; 2423 res = get_user(len, ol); 2424 if (res) 2425 return res; 2426 2427 lock_sock(sk); 2428 2429 switch (opt) { 2430 case TIPC_IMPORTANCE: 2431 value = tsk_importance(tsk); 2432 break; 2433 case TIPC_SRC_DROPPABLE: 2434 value = tsk_unreliable(tsk); 2435 break; 2436 case TIPC_DEST_DROPPABLE: 2437 value = tsk_unreturnable(tsk); 2438 break; 2439 case TIPC_CONN_TIMEOUT: 2440 value = tsk->conn_timeout; 2441 /* no need to set "res", since already 0 at this point */ 2442 break; 2443 case TIPC_NODE_RECVQ_DEPTH: 2444 value = 0; /* was tipc_queue_size, now obsolete */ 2445 break; 2446 case TIPC_SOCK_RECVQ_DEPTH: 2447 value = skb_queue_len(&sk->sk_receive_queue); 2448 break; 2449 default: 2450 res = -EINVAL; 2451 } 2452 2453 release_sock(sk); 2454 2455 if (res) 2456 return res; /* "get" failed */ 2457 2458 if (len < sizeof(value)) 2459 return -EINVAL; 2460 2461 if (copy_to_user(ov, &value, sizeof(value))) 2462 return -EFAULT; 2463 2464 return put_user(sizeof(value), ol); 2465 } 2466 2467 static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 2468 { 2469 struct sock *sk = sock->sk; 2470 struct tipc_sioc_ln_req lnr; 2471 void __user *argp = (void __user *)arg; 2472 2473 switch (cmd) { 2474 case SIOCGETLINKNAME: 2475 if (copy_from_user(&lnr, argp, sizeof(lnr))) 2476 return -EFAULT; 2477 if (!tipc_node_get_linkname(sock_net(sk), 2478 lnr.bearer_id & 0xffff, lnr.peer, 2479 lnr.linkname, TIPC_MAX_LINK_NAME)) { 2480 if (copy_to_user(argp, &lnr, sizeof(lnr))) 2481 return -EFAULT; 2482 return 0; 2483 } 2484 return -EADDRNOTAVAIL; 2485 default: 2486 return -ENOIOCTLCMD; 2487 } 2488 } 2489 2490 /* Protocol switches for the various types of TIPC sockets */ 2491 2492 static const struct proto_ops msg_ops = { 2493 .owner = THIS_MODULE, 2494 .family = AF_TIPC, 2495 .release = tipc_release, 2496 .bind = tipc_bind, 2497 .connect = tipc_connect, 2498 .socketpair = sock_no_socketpair, 2499 .accept = sock_no_accept, 2500 .getname = tipc_getname, 2501 .poll = tipc_poll, 2502 .ioctl = tipc_ioctl, 2503 .listen = sock_no_listen, 2504 .shutdown = tipc_shutdown, 2505 .setsockopt = tipc_setsockopt, 2506 .getsockopt = tipc_getsockopt, 2507 .sendmsg = tipc_sendmsg, 2508 .recvmsg = tipc_recvmsg, 2509 .mmap = sock_no_mmap, 2510 .sendpage = sock_no_sendpage 2511 }; 2512 2513 static const struct proto_ops packet_ops = { 2514 .owner = THIS_MODULE, 2515 .family = AF_TIPC, 2516 .release = tipc_release, 2517 .bind = tipc_bind, 2518 .connect = tipc_connect, 2519 .socketpair = sock_no_socketpair, 2520 .accept = tipc_accept, 2521 .getname = tipc_getname, 2522 .poll = tipc_poll, 2523 .ioctl = tipc_ioctl, 2524 .listen = tipc_listen, 2525 .shutdown = tipc_shutdown, 2526 .setsockopt = tipc_setsockopt, 2527 .getsockopt = tipc_getsockopt, 2528 .sendmsg = tipc_send_packet, 2529 .recvmsg = tipc_recvmsg, 2530 .mmap = sock_no_mmap, 2531 .sendpage = sock_no_sendpage 2532 }; 2533 2534 static const struct proto_ops stream_ops = { 2535 .owner = THIS_MODULE, 2536 .family = AF_TIPC, 2537 .release = tipc_release, 2538 .bind = tipc_bind, 2539 .connect = tipc_connect, 2540 .socketpair = sock_no_socketpair, 2541 .accept = tipc_accept, 2542 .getname = tipc_getname, 2543 .poll = tipc_poll, 2544 .ioctl = tipc_ioctl, 2545 .listen = tipc_listen, 2546 .shutdown = tipc_shutdown, 2547 .setsockopt = tipc_setsockopt, 2548 .getsockopt = tipc_getsockopt, 2549 .sendmsg = tipc_send_stream, 2550 .recvmsg = tipc_recv_stream, 2551 .mmap = sock_no_mmap, 2552 .sendpage = sock_no_sendpage 2553 }; 2554 2555 static const struct net_proto_family tipc_family_ops = { 2556 .owner = THIS_MODULE, 2557 .family = AF_TIPC, 2558 .create = tipc_sk_create 2559 }; 2560 2561 static struct proto tipc_proto = { 2562 .name = "TIPC", 2563 .owner = THIS_MODULE, 2564 .obj_size = sizeof(struct tipc_sock), 2565 .sysctl_rmem = sysctl_tipc_rmem 2566 }; 2567 2568 /** 2569 * tipc_socket_init - initialize TIPC socket interface 2570 * 2571 * Returns 0 on success, errno otherwise 2572 */ 2573 int tipc_socket_init(void) 2574 { 2575 int res; 2576 2577 res = proto_register(&tipc_proto, 1); 2578 if (res) { 2579 pr_err("Failed to register TIPC protocol type\n"); 2580 goto out; 2581 } 2582 2583 res = sock_register(&tipc_family_ops); 2584 if (res) { 2585 pr_err("Failed to register TIPC socket type\n"); 2586 proto_unregister(&tipc_proto); 2587 goto out; 2588 } 2589 out: 2590 return res; 2591 } 2592 2593 /** 2594 * tipc_socket_stop - stop TIPC socket interface 2595 */ 2596 void tipc_socket_stop(void) 2597 { 2598 sock_unregister(tipc_family_ops.family); 2599 proto_unregister(&tipc_proto); 2600 } 2601 2602 /* Caller should hold socket lock for the passed tipc socket. */ 2603 static int __tipc_nl_add_sk_con(struct sk_buff *skb, struct tipc_sock *tsk) 2604 { 2605 u32 peer_node; 2606 u32 peer_port; 2607 struct nlattr *nest; 2608 2609 peer_node = tsk_peer_node(tsk); 2610 peer_port = tsk_peer_port(tsk); 2611 2612 nest = nla_nest_start(skb, TIPC_NLA_SOCK_CON); 2613 2614 if (nla_put_u32(skb, TIPC_NLA_CON_NODE, peer_node)) 2615 goto msg_full; 2616 if (nla_put_u32(skb, TIPC_NLA_CON_SOCK, peer_port)) 2617 goto msg_full; 2618 2619 if (tsk->conn_type != 0) { 2620 if (nla_put_flag(skb, TIPC_NLA_CON_FLAG)) 2621 goto msg_full; 2622 if (nla_put_u32(skb, TIPC_NLA_CON_TYPE, tsk->conn_type)) 2623 goto msg_full; 2624 if (nla_put_u32(skb, TIPC_NLA_CON_INST, tsk->conn_instance)) 2625 goto msg_full; 2626 } 2627 nla_nest_end(skb, nest); 2628 2629 return 0; 2630 2631 msg_full: 2632 nla_nest_cancel(skb, nest); 2633 2634 return -EMSGSIZE; 2635 } 2636 2637 /* Caller should hold socket lock for the passed tipc socket. */ 2638 static int __tipc_nl_add_sk(struct sk_buff *skb, struct netlink_callback *cb, 2639 struct tipc_sock *tsk) 2640 { 2641 int err; 2642 void *hdr; 2643 struct nlattr *attrs; 2644 struct net *net = sock_net(skb->sk); 2645 struct tipc_net *tn = net_generic(net, tipc_net_id); 2646 2647 hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, 2648 &tipc_genl_family, NLM_F_MULTI, TIPC_NL_SOCK_GET); 2649 if (!hdr) 2650 goto msg_cancel; 2651 2652 attrs = nla_nest_start(skb, TIPC_NLA_SOCK); 2653 if (!attrs) 2654 goto genlmsg_cancel; 2655 if (nla_put_u32(skb, TIPC_NLA_SOCK_REF, tsk->portid)) 2656 goto attr_msg_cancel; 2657 if (nla_put_u32(skb, TIPC_NLA_SOCK_ADDR, tn->own_addr)) 2658 goto attr_msg_cancel; 2659 2660 if (tsk->connected) { 2661 err = __tipc_nl_add_sk_con(skb, tsk); 2662 if (err) 2663 goto attr_msg_cancel; 2664 } else if (!list_empty(&tsk->publications)) { 2665 if (nla_put_flag(skb, TIPC_NLA_SOCK_HAS_PUBL)) 2666 goto attr_msg_cancel; 2667 } 2668 nla_nest_end(skb, attrs); 2669 genlmsg_end(skb, hdr); 2670 2671 return 0; 2672 2673 attr_msg_cancel: 2674 nla_nest_cancel(skb, attrs); 2675 genlmsg_cancel: 2676 genlmsg_cancel(skb, hdr); 2677 msg_cancel: 2678 return -EMSGSIZE; 2679 } 2680 2681 int tipc_nl_sk_dump(struct sk_buff *skb, struct netlink_callback *cb) 2682 { 2683 int err; 2684 struct tipc_sock *tsk; 2685 const struct bucket_table *tbl; 2686 struct rhash_head *pos; 2687 struct net *net = sock_net(skb->sk); 2688 struct tipc_net *tn = net_generic(net, tipc_net_id); 2689 u32 tbl_id = cb->args[0]; 2690 u32 prev_portid = cb->args[1]; 2691 2692 rcu_read_lock(); 2693 tbl = rht_dereference_rcu((&tn->sk_rht)->tbl, &tn->sk_rht); 2694 for (; tbl_id < tbl->size; tbl_id++) { 2695 rht_for_each_entry_rcu(tsk, pos, tbl, tbl_id, node) { 2696 spin_lock_bh(&tsk->sk.sk_lock.slock); 2697 if (prev_portid && prev_portid != tsk->portid) { 2698 spin_unlock_bh(&tsk->sk.sk_lock.slock); 2699 continue; 2700 } 2701 2702 err = __tipc_nl_add_sk(skb, cb, tsk); 2703 if (err) { 2704 prev_portid = tsk->portid; 2705 spin_unlock_bh(&tsk->sk.sk_lock.slock); 2706 goto out; 2707 } 2708 prev_portid = 0; 2709 spin_unlock_bh(&tsk->sk.sk_lock.slock); 2710 } 2711 } 2712 out: 2713 rcu_read_unlock(); 2714 cb->args[0] = tbl_id; 2715 cb->args[1] = prev_portid; 2716 2717 return skb->len; 2718 } 2719 2720 /* Caller should hold socket lock for the passed tipc socket. */ 2721 static int __tipc_nl_add_sk_publ(struct sk_buff *skb, 2722 struct netlink_callback *cb, 2723 struct publication *publ) 2724 { 2725 void *hdr; 2726 struct nlattr *attrs; 2727 2728 hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, 2729 &tipc_genl_family, NLM_F_MULTI, TIPC_NL_PUBL_GET); 2730 if (!hdr) 2731 goto msg_cancel; 2732 2733 attrs = nla_nest_start(skb, TIPC_NLA_PUBL); 2734 if (!attrs) 2735 goto genlmsg_cancel; 2736 2737 if (nla_put_u32(skb, TIPC_NLA_PUBL_KEY, publ->key)) 2738 goto attr_msg_cancel; 2739 if (nla_put_u32(skb, TIPC_NLA_PUBL_TYPE, publ->type)) 2740 goto attr_msg_cancel; 2741 if (nla_put_u32(skb, TIPC_NLA_PUBL_LOWER, publ->lower)) 2742 goto attr_msg_cancel; 2743 if (nla_put_u32(skb, TIPC_NLA_PUBL_UPPER, publ->upper)) 2744 goto attr_msg_cancel; 2745 2746 nla_nest_end(skb, attrs); 2747 genlmsg_end(skb, hdr); 2748 2749 return 0; 2750 2751 attr_msg_cancel: 2752 nla_nest_cancel(skb, attrs); 2753 genlmsg_cancel: 2754 genlmsg_cancel(skb, hdr); 2755 msg_cancel: 2756 return -EMSGSIZE; 2757 } 2758 2759 /* Caller should hold socket lock for the passed tipc socket. */ 2760 static int __tipc_nl_list_sk_publ(struct sk_buff *skb, 2761 struct netlink_callback *cb, 2762 struct tipc_sock *tsk, u32 *last_publ) 2763 { 2764 int err; 2765 struct publication *p; 2766 2767 if (*last_publ) { 2768 list_for_each_entry(p, &tsk->publications, pport_list) { 2769 if (p->key == *last_publ) 2770 break; 2771 } 2772 if (p->key != *last_publ) { 2773 /* We never set seq or call nl_dump_check_consistent() 2774 * this means that setting prev_seq here will cause the 2775 * consistence check to fail in the netlink callback 2776 * handler. Resulting in the last NLMSG_DONE message 2777 * having the NLM_F_DUMP_INTR flag set. 2778 */ 2779 cb->prev_seq = 1; 2780 *last_publ = 0; 2781 return -EPIPE; 2782 } 2783 } else { 2784 p = list_first_entry(&tsk->publications, struct publication, 2785 pport_list); 2786 } 2787 2788 list_for_each_entry_from(p, &tsk->publications, pport_list) { 2789 err = __tipc_nl_add_sk_publ(skb, cb, p); 2790 if (err) { 2791 *last_publ = p->key; 2792 return err; 2793 } 2794 } 2795 *last_publ = 0; 2796 2797 return 0; 2798 } 2799 2800 int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb) 2801 { 2802 int err; 2803 u32 tsk_portid = cb->args[0]; 2804 u32 last_publ = cb->args[1]; 2805 u32 done = cb->args[2]; 2806 struct net *net = sock_net(skb->sk); 2807 struct tipc_sock *tsk; 2808 2809 if (!tsk_portid) { 2810 struct nlattr **attrs; 2811 struct nlattr *sock[TIPC_NLA_SOCK_MAX + 1]; 2812 2813 err = tipc_nlmsg_parse(cb->nlh, &attrs); 2814 if (err) 2815 return err; 2816 2817 err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, 2818 attrs[TIPC_NLA_SOCK], 2819 tipc_nl_sock_policy); 2820 if (err) 2821 return err; 2822 2823 if (!sock[TIPC_NLA_SOCK_REF]) 2824 return -EINVAL; 2825 2826 tsk_portid = nla_get_u32(sock[TIPC_NLA_SOCK_REF]); 2827 } 2828 2829 if (done) 2830 return 0; 2831 2832 tsk = tipc_sk_lookup(net, tsk_portid); 2833 if (!tsk) 2834 return -EINVAL; 2835 2836 lock_sock(&tsk->sk); 2837 err = __tipc_nl_list_sk_publ(skb, cb, tsk, &last_publ); 2838 if (!err) 2839 done = 1; 2840 release_sock(&tsk->sk); 2841 sock_put(&tsk->sk); 2842 2843 cb->args[0] = tsk_portid; 2844 cb->args[1] = last_publ; 2845 cb->args[2] = done; 2846 2847 return skb->len; 2848 } 2849