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