1 /* AF_RXRPC implementation 2 * 3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11 12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 13 14 #include <linux/module.h> 15 #include <linux/kernel.h> 16 #include <linux/net.h> 17 #include <linux/slab.h> 18 #include <linux/skbuff.h> 19 #include <linux/random.h> 20 #include <linux/poll.h> 21 #include <linux/proc_fs.h> 22 #include <linux/key-type.h> 23 #include <net/net_namespace.h> 24 #include <net/sock.h> 25 #include <net/af_rxrpc.h> 26 #define CREATE_TRACE_POINTS 27 #include "ar-internal.h" 28 29 MODULE_DESCRIPTION("RxRPC network protocol"); 30 MODULE_AUTHOR("Red Hat, Inc."); 31 MODULE_LICENSE("GPL"); 32 MODULE_ALIAS_NETPROTO(PF_RXRPC); 33 34 unsigned int rxrpc_debug; // = RXRPC_DEBUG_KPROTO; 35 module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO); 36 MODULE_PARM_DESC(debug, "RxRPC debugging mask"); 37 38 static struct proto rxrpc_proto; 39 static const struct proto_ops rxrpc_rpc_ops; 40 41 /* local epoch for detecting local-end reset */ 42 u32 rxrpc_epoch; 43 44 /* current debugging ID */ 45 atomic_t rxrpc_debug_id; 46 47 /* count of skbs currently in use */ 48 atomic_t rxrpc_n_tx_skbs, rxrpc_n_rx_skbs; 49 50 struct workqueue_struct *rxrpc_workqueue; 51 52 static void rxrpc_sock_destructor(struct sock *); 53 54 /* 55 * see if an RxRPC socket is currently writable 56 */ 57 static inline int rxrpc_writable(struct sock *sk) 58 { 59 return atomic_read(&sk->sk_wmem_alloc) < (size_t) sk->sk_sndbuf; 60 } 61 62 /* 63 * wait for write bufferage to become available 64 */ 65 static void rxrpc_write_space(struct sock *sk) 66 { 67 _enter("%p", sk); 68 rcu_read_lock(); 69 if (rxrpc_writable(sk)) { 70 struct socket_wq *wq = rcu_dereference(sk->sk_wq); 71 72 if (skwq_has_sleeper(wq)) 73 wake_up_interruptible(&wq->wait); 74 sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT); 75 } 76 rcu_read_unlock(); 77 } 78 79 /* 80 * validate an RxRPC address 81 */ 82 static int rxrpc_validate_address(struct rxrpc_sock *rx, 83 struct sockaddr_rxrpc *srx, 84 int len) 85 { 86 unsigned int tail; 87 88 if (len < sizeof(struct sockaddr_rxrpc)) 89 return -EINVAL; 90 91 if (srx->srx_family != AF_RXRPC) 92 return -EAFNOSUPPORT; 93 94 if (srx->transport_type != SOCK_DGRAM) 95 return -ESOCKTNOSUPPORT; 96 97 len -= offsetof(struct sockaddr_rxrpc, transport); 98 if (srx->transport_len < sizeof(sa_family_t) || 99 srx->transport_len > len) 100 return -EINVAL; 101 102 if (srx->transport.family != rx->family) 103 return -EAFNOSUPPORT; 104 105 switch (srx->transport.family) { 106 case AF_INET: 107 if (srx->transport_len < sizeof(struct sockaddr_in)) 108 return -EINVAL; 109 tail = offsetof(struct sockaddr_rxrpc, transport.sin.__pad); 110 break; 111 112 #ifdef CONFIG_AF_RXRPC_IPV6 113 case AF_INET6: 114 if (srx->transport_len < sizeof(struct sockaddr_in6)) 115 return -EINVAL; 116 tail = offsetof(struct sockaddr_rxrpc, transport) + 117 sizeof(struct sockaddr_in6); 118 break; 119 #endif 120 121 default: 122 return -EAFNOSUPPORT; 123 } 124 125 if (tail < len) 126 memset((void *)srx + tail, 0, len - tail); 127 _debug("INET: %pISp", &srx->transport); 128 return 0; 129 } 130 131 /* 132 * bind a local address to an RxRPC socket 133 */ 134 static int rxrpc_bind(struct socket *sock, struct sockaddr *saddr, int len) 135 { 136 struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)saddr; 137 struct sock *sk = sock->sk; 138 struct rxrpc_local *local; 139 struct rxrpc_sock *rx = rxrpc_sk(sk); 140 u16 service_id = srx->srx_service; 141 int ret; 142 143 _enter("%p,%p,%d", rx, saddr, len); 144 145 ret = rxrpc_validate_address(rx, srx, len); 146 if (ret < 0) 147 goto error; 148 149 lock_sock(&rx->sk); 150 151 if (rx->sk.sk_state != RXRPC_UNBOUND) { 152 ret = -EINVAL; 153 goto error_unlock; 154 } 155 156 memcpy(&rx->srx, srx, sizeof(rx->srx)); 157 158 local = rxrpc_lookup_local(&rx->srx); 159 if (IS_ERR(local)) { 160 ret = PTR_ERR(local); 161 goto error_unlock; 162 } 163 164 if (service_id) { 165 write_lock(&local->services_lock); 166 if (rcu_access_pointer(local->service)) 167 goto service_in_use; 168 rx->local = local; 169 rcu_assign_pointer(local->service, rx); 170 write_unlock(&local->services_lock); 171 172 rx->sk.sk_state = RXRPC_SERVER_BOUND; 173 } else { 174 rx->local = local; 175 rx->sk.sk_state = RXRPC_CLIENT_BOUND; 176 } 177 178 release_sock(&rx->sk); 179 _leave(" = 0"); 180 return 0; 181 182 service_in_use: 183 write_unlock(&local->services_lock); 184 rxrpc_put_local(local); 185 ret = -EADDRINUSE; 186 error_unlock: 187 release_sock(&rx->sk); 188 error: 189 _leave(" = %d", ret); 190 return ret; 191 } 192 193 /* 194 * set the number of pending calls permitted on a listening socket 195 */ 196 static int rxrpc_listen(struct socket *sock, int backlog) 197 { 198 struct sock *sk = sock->sk; 199 struct rxrpc_sock *rx = rxrpc_sk(sk); 200 unsigned int max, old; 201 int ret; 202 203 _enter("%p,%d", rx, backlog); 204 205 lock_sock(&rx->sk); 206 207 switch (rx->sk.sk_state) { 208 case RXRPC_UNBOUND: 209 ret = -EADDRNOTAVAIL; 210 break; 211 case RXRPC_SERVER_BOUND: 212 ASSERT(rx->local != NULL); 213 max = READ_ONCE(rxrpc_max_backlog); 214 ret = -EINVAL; 215 if (backlog == INT_MAX) 216 backlog = max; 217 else if (backlog < 0 || backlog > max) 218 break; 219 old = sk->sk_max_ack_backlog; 220 sk->sk_max_ack_backlog = backlog; 221 ret = rxrpc_service_prealloc(rx, GFP_KERNEL); 222 if (ret == 0) 223 rx->sk.sk_state = RXRPC_SERVER_LISTENING; 224 else 225 sk->sk_max_ack_backlog = old; 226 break; 227 case RXRPC_SERVER_LISTENING: 228 if (backlog == 0) { 229 rx->sk.sk_state = RXRPC_SERVER_LISTEN_DISABLED; 230 sk->sk_max_ack_backlog = 0; 231 rxrpc_discard_prealloc(rx); 232 ret = 0; 233 break; 234 } 235 default: 236 ret = -EBUSY; 237 break; 238 } 239 240 release_sock(&rx->sk); 241 _leave(" = %d", ret); 242 return ret; 243 } 244 245 /** 246 * rxrpc_kernel_begin_call - Allow a kernel service to begin a call 247 * @sock: The socket on which to make the call 248 * @srx: The address of the peer to contact 249 * @key: The security context to use (defaults to socket setting) 250 * @user_call_ID: The ID to use 251 * @gfp: The allocation constraints 252 * @notify_rx: Where to send notifications instead of socket queue 253 * 254 * Allow a kernel service to begin a call on the nominated socket. This just 255 * sets up all the internal tracking structures and allocates connection and 256 * call IDs as appropriate. The call to be used is returned. 257 * 258 * The default socket destination address and security may be overridden by 259 * supplying @srx and @key. 260 */ 261 struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, 262 struct sockaddr_rxrpc *srx, 263 struct key *key, 264 unsigned long user_call_ID, 265 gfp_t gfp, 266 rxrpc_notify_rx_t notify_rx) 267 { 268 struct rxrpc_conn_parameters cp; 269 struct rxrpc_call *call; 270 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); 271 int ret; 272 273 _enter(",,%x,%lx", key_serial(key), user_call_ID); 274 275 ret = rxrpc_validate_address(rx, srx, sizeof(*srx)); 276 if (ret < 0) 277 return ERR_PTR(ret); 278 279 lock_sock(&rx->sk); 280 281 if (!key) 282 key = rx->key; 283 if (key && !key->payload.data[0]) 284 key = NULL; /* a no-security key */ 285 286 memset(&cp, 0, sizeof(cp)); 287 cp.local = rx->local; 288 cp.key = key; 289 cp.security_level = 0; 290 cp.exclusive = false; 291 cp.service_id = srx->srx_service; 292 call = rxrpc_new_client_call(rx, &cp, srx, user_call_ID, gfp); 293 if (!IS_ERR(call)) 294 call->notify_rx = notify_rx; 295 296 release_sock(&rx->sk); 297 _leave(" = %p", call); 298 return call; 299 } 300 EXPORT_SYMBOL(rxrpc_kernel_begin_call); 301 302 /** 303 * rxrpc_kernel_end_call - Allow a kernel service to end a call it was using 304 * @sock: The socket the call is on 305 * @call: The call to end 306 * 307 * Allow a kernel service to end a call it was using. The call must be 308 * complete before this is called (the call should be aborted if necessary). 309 */ 310 void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call) 311 { 312 _enter("%d{%d}", call->debug_id, atomic_read(&call->usage)); 313 rxrpc_release_call(rxrpc_sk(sock->sk), call); 314 rxrpc_put_call(call, rxrpc_call_put_kernel); 315 } 316 EXPORT_SYMBOL(rxrpc_kernel_end_call); 317 318 /** 319 * rxrpc_kernel_new_call_notification - Get notifications of new calls 320 * @sock: The socket to intercept received messages on 321 * @notify_new_call: Function to be called when new calls appear 322 * @discard_new_call: Function to discard preallocated calls 323 * 324 * Allow a kernel service to be given notifications about new calls. 325 */ 326 void rxrpc_kernel_new_call_notification( 327 struct socket *sock, 328 rxrpc_notify_new_call_t notify_new_call, 329 rxrpc_discard_new_call_t discard_new_call) 330 { 331 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); 332 333 rx->notify_new_call = notify_new_call; 334 rx->discard_new_call = discard_new_call; 335 } 336 EXPORT_SYMBOL(rxrpc_kernel_new_call_notification); 337 338 /* 339 * connect an RxRPC socket 340 * - this just targets it at a specific destination; no actual connection 341 * negotiation takes place 342 */ 343 static int rxrpc_connect(struct socket *sock, struct sockaddr *addr, 344 int addr_len, int flags) 345 { 346 struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr; 347 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); 348 int ret; 349 350 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags); 351 352 ret = rxrpc_validate_address(rx, srx, addr_len); 353 if (ret < 0) { 354 _leave(" = %d [bad addr]", ret); 355 return ret; 356 } 357 358 lock_sock(&rx->sk); 359 360 ret = -EISCONN; 361 if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) 362 goto error; 363 364 switch (rx->sk.sk_state) { 365 case RXRPC_UNBOUND: 366 rx->sk.sk_state = RXRPC_CLIENT_UNBOUND; 367 case RXRPC_CLIENT_UNBOUND: 368 case RXRPC_CLIENT_BOUND: 369 break; 370 default: 371 ret = -EBUSY; 372 goto error; 373 } 374 375 rx->connect_srx = *srx; 376 set_bit(RXRPC_SOCK_CONNECTED, &rx->flags); 377 ret = 0; 378 379 error: 380 release_sock(&rx->sk); 381 return ret; 382 } 383 384 /* 385 * send a message through an RxRPC socket 386 * - in a client this does a number of things: 387 * - finds/sets up a connection for the security specified (if any) 388 * - initiates a call (ID in control data) 389 * - ends the request phase of a call (if MSG_MORE is not set) 390 * - sends a call data packet 391 * - may send an abort (abort code in control data) 392 */ 393 static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len) 394 { 395 struct rxrpc_local *local; 396 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); 397 int ret; 398 399 _enter(",{%d},,%zu", rx->sk.sk_state, len); 400 401 if (m->msg_flags & MSG_OOB) 402 return -EOPNOTSUPP; 403 404 if (m->msg_name) { 405 ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen); 406 if (ret < 0) { 407 _leave(" = %d [bad addr]", ret); 408 return ret; 409 } 410 } 411 412 lock_sock(&rx->sk); 413 414 switch (rx->sk.sk_state) { 415 case RXRPC_UNBOUND: 416 rx->srx.srx_family = AF_RXRPC; 417 rx->srx.srx_service = 0; 418 rx->srx.transport_type = SOCK_DGRAM; 419 rx->srx.transport.family = rx->family; 420 switch (rx->family) { 421 case AF_INET: 422 rx->srx.transport_len = sizeof(struct sockaddr_in); 423 break; 424 #ifdef CONFIG_AF_RXRPC_IPV6 425 case AF_INET6: 426 rx->srx.transport_len = sizeof(struct sockaddr_in6); 427 break; 428 #endif 429 default: 430 ret = -EAFNOSUPPORT; 431 goto error_unlock; 432 } 433 local = rxrpc_lookup_local(&rx->srx); 434 if (IS_ERR(local)) { 435 ret = PTR_ERR(local); 436 goto error_unlock; 437 } 438 439 rx->local = local; 440 rx->sk.sk_state = RXRPC_CLIENT_UNBOUND; 441 /* Fall through */ 442 443 case RXRPC_CLIENT_UNBOUND: 444 case RXRPC_CLIENT_BOUND: 445 if (!m->msg_name && 446 test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) { 447 m->msg_name = &rx->connect_srx; 448 m->msg_namelen = sizeof(rx->connect_srx); 449 } 450 case RXRPC_SERVER_BOUND: 451 case RXRPC_SERVER_LISTENING: 452 ret = rxrpc_do_sendmsg(rx, m, len); 453 break; 454 default: 455 ret = -EINVAL; 456 break; 457 } 458 459 error_unlock: 460 release_sock(&rx->sk); 461 _leave(" = %d", ret); 462 return ret; 463 } 464 465 /* 466 * set RxRPC socket options 467 */ 468 static int rxrpc_setsockopt(struct socket *sock, int level, int optname, 469 char __user *optval, unsigned int optlen) 470 { 471 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); 472 unsigned int min_sec_level; 473 int ret; 474 475 _enter(",%d,%d,,%d", level, optname, optlen); 476 477 lock_sock(&rx->sk); 478 ret = -EOPNOTSUPP; 479 480 if (level == SOL_RXRPC) { 481 switch (optname) { 482 case RXRPC_EXCLUSIVE_CONNECTION: 483 ret = -EINVAL; 484 if (optlen != 0) 485 goto error; 486 ret = -EISCONN; 487 if (rx->sk.sk_state != RXRPC_UNBOUND) 488 goto error; 489 rx->exclusive = true; 490 goto success; 491 492 case RXRPC_SECURITY_KEY: 493 ret = -EINVAL; 494 if (rx->key) 495 goto error; 496 ret = -EISCONN; 497 if (rx->sk.sk_state != RXRPC_UNBOUND) 498 goto error; 499 ret = rxrpc_request_key(rx, optval, optlen); 500 goto error; 501 502 case RXRPC_SECURITY_KEYRING: 503 ret = -EINVAL; 504 if (rx->key) 505 goto error; 506 ret = -EISCONN; 507 if (rx->sk.sk_state != RXRPC_UNBOUND) 508 goto error; 509 ret = rxrpc_server_keyring(rx, optval, optlen); 510 goto error; 511 512 case RXRPC_MIN_SECURITY_LEVEL: 513 ret = -EINVAL; 514 if (optlen != sizeof(unsigned int)) 515 goto error; 516 ret = -EISCONN; 517 if (rx->sk.sk_state != RXRPC_UNBOUND) 518 goto error; 519 ret = get_user(min_sec_level, 520 (unsigned int __user *) optval); 521 if (ret < 0) 522 goto error; 523 ret = -EINVAL; 524 if (min_sec_level > RXRPC_SECURITY_MAX) 525 goto error; 526 rx->min_sec_level = min_sec_level; 527 goto success; 528 529 default: 530 break; 531 } 532 } 533 534 success: 535 ret = 0; 536 error: 537 release_sock(&rx->sk); 538 return ret; 539 } 540 541 /* 542 * permit an RxRPC socket to be polled 543 */ 544 static unsigned int rxrpc_poll(struct file *file, struct socket *sock, 545 poll_table *wait) 546 { 547 struct sock *sk = sock->sk; 548 struct rxrpc_sock *rx = rxrpc_sk(sk); 549 unsigned int mask; 550 551 sock_poll_wait(file, sk_sleep(sk), wait); 552 mask = 0; 553 554 /* the socket is readable if there are any messages waiting on the Rx 555 * queue */ 556 if (!list_empty(&rx->recvmsg_q)) 557 mask |= POLLIN | POLLRDNORM; 558 559 /* the socket is writable if there is space to add new data to the 560 * socket; there is no guarantee that any particular call in progress 561 * on the socket may have space in the Tx ACK window */ 562 if (rxrpc_writable(sk)) 563 mask |= POLLOUT | POLLWRNORM; 564 565 return mask; 566 } 567 568 /* 569 * create an RxRPC socket 570 */ 571 static int rxrpc_create(struct net *net, struct socket *sock, int protocol, 572 int kern) 573 { 574 struct rxrpc_sock *rx; 575 struct sock *sk; 576 577 _enter("%p,%d", sock, protocol); 578 579 if (!net_eq(net, &init_net)) 580 return -EAFNOSUPPORT; 581 582 /* we support transport protocol UDP/UDP6 only */ 583 if (protocol != PF_INET && 584 IS_ENABLED(CONFIG_AF_RXRPC_IPV6) && protocol != PF_INET6) 585 return -EPROTONOSUPPORT; 586 587 if (sock->type != SOCK_DGRAM) 588 return -ESOCKTNOSUPPORT; 589 590 sock->ops = &rxrpc_rpc_ops; 591 sock->state = SS_UNCONNECTED; 592 593 sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto, kern); 594 if (!sk) 595 return -ENOMEM; 596 597 sock_init_data(sock, sk); 598 sock_set_flag(sk, SOCK_RCU_FREE); 599 sk->sk_state = RXRPC_UNBOUND; 600 sk->sk_write_space = rxrpc_write_space; 601 sk->sk_max_ack_backlog = 0; 602 sk->sk_destruct = rxrpc_sock_destructor; 603 604 rx = rxrpc_sk(sk); 605 rx->family = protocol; 606 rx->calls = RB_ROOT; 607 608 spin_lock_init(&rx->incoming_lock); 609 INIT_LIST_HEAD(&rx->sock_calls); 610 INIT_LIST_HEAD(&rx->to_be_accepted); 611 INIT_LIST_HEAD(&rx->recvmsg_q); 612 rwlock_init(&rx->recvmsg_lock); 613 rwlock_init(&rx->call_lock); 614 memset(&rx->srx, 0, sizeof(rx->srx)); 615 616 _leave(" = 0 [%p]", rx); 617 return 0; 618 } 619 620 /* 621 * Kill all the calls on a socket and shut it down. 622 */ 623 static int rxrpc_shutdown(struct socket *sock, int flags) 624 { 625 struct sock *sk = sock->sk; 626 struct rxrpc_sock *rx = rxrpc_sk(sk); 627 int ret = 0; 628 629 _enter("%p,%d", sk, flags); 630 631 if (flags != SHUT_RDWR) 632 return -EOPNOTSUPP; 633 if (sk->sk_state == RXRPC_CLOSE) 634 return -ESHUTDOWN; 635 636 lock_sock(sk); 637 638 spin_lock_bh(&sk->sk_receive_queue.lock); 639 if (sk->sk_state < RXRPC_CLOSE) { 640 sk->sk_state = RXRPC_CLOSE; 641 sk->sk_shutdown = SHUTDOWN_MASK; 642 } else { 643 ret = -ESHUTDOWN; 644 } 645 spin_unlock_bh(&sk->sk_receive_queue.lock); 646 647 rxrpc_discard_prealloc(rx); 648 649 release_sock(sk); 650 return ret; 651 } 652 653 /* 654 * RxRPC socket destructor 655 */ 656 static void rxrpc_sock_destructor(struct sock *sk) 657 { 658 _enter("%p", sk); 659 660 rxrpc_purge_queue(&sk->sk_receive_queue); 661 662 WARN_ON(atomic_read(&sk->sk_wmem_alloc)); 663 WARN_ON(!sk_unhashed(sk)); 664 WARN_ON(sk->sk_socket); 665 666 if (!sock_flag(sk, SOCK_DEAD)) { 667 printk("Attempt to release alive rxrpc socket: %p\n", sk); 668 return; 669 } 670 } 671 672 /* 673 * release an RxRPC socket 674 */ 675 static int rxrpc_release_sock(struct sock *sk) 676 { 677 struct rxrpc_sock *rx = rxrpc_sk(sk); 678 679 _enter("%p{%d,%d}", sk, sk->sk_state, atomic_read(&sk->sk_refcnt)); 680 681 /* declare the socket closed for business */ 682 sock_orphan(sk); 683 sk->sk_shutdown = SHUTDOWN_MASK; 684 685 spin_lock_bh(&sk->sk_receive_queue.lock); 686 sk->sk_state = RXRPC_CLOSE; 687 spin_unlock_bh(&sk->sk_receive_queue.lock); 688 689 if (rx->local && rcu_access_pointer(rx->local->service) == rx) { 690 write_lock(&rx->local->services_lock); 691 rcu_assign_pointer(rx->local->service, NULL); 692 write_unlock(&rx->local->services_lock); 693 } 694 695 /* try to flush out this socket */ 696 rxrpc_discard_prealloc(rx); 697 rxrpc_release_calls_on_socket(rx); 698 flush_workqueue(rxrpc_workqueue); 699 rxrpc_purge_queue(&sk->sk_receive_queue); 700 701 rxrpc_put_local(rx->local); 702 rx->local = NULL; 703 key_put(rx->key); 704 rx->key = NULL; 705 key_put(rx->securities); 706 rx->securities = NULL; 707 sock_put(sk); 708 709 _leave(" = 0"); 710 return 0; 711 } 712 713 /* 714 * release an RxRPC BSD socket on close() or equivalent 715 */ 716 static int rxrpc_release(struct socket *sock) 717 { 718 struct sock *sk = sock->sk; 719 720 _enter("%p{%p}", sock, sk); 721 722 if (!sk) 723 return 0; 724 725 sock->sk = NULL; 726 727 return rxrpc_release_sock(sk); 728 } 729 730 /* 731 * RxRPC network protocol 732 */ 733 static const struct proto_ops rxrpc_rpc_ops = { 734 .family = PF_RXRPC, 735 .owner = THIS_MODULE, 736 .release = rxrpc_release, 737 .bind = rxrpc_bind, 738 .connect = rxrpc_connect, 739 .socketpair = sock_no_socketpair, 740 .accept = sock_no_accept, 741 .getname = sock_no_getname, 742 .poll = rxrpc_poll, 743 .ioctl = sock_no_ioctl, 744 .listen = rxrpc_listen, 745 .shutdown = rxrpc_shutdown, 746 .setsockopt = rxrpc_setsockopt, 747 .getsockopt = sock_no_getsockopt, 748 .sendmsg = rxrpc_sendmsg, 749 .recvmsg = rxrpc_recvmsg, 750 .mmap = sock_no_mmap, 751 .sendpage = sock_no_sendpage, 752 }; 753 754 static struct proto rxrpc_proto = { 755 .name = "RXRPC", 756 .owner = THIS_MODULE, 757 .obj_size = sizeof(struct rxrpc_sock), 758 .max_header = sizeof(struct rxrpc_wire_header), 759 }; 760 761 static const struct net_proto_family rxrpc_family_ops = { 762 .family = PF_RXRPC, 763 .create = rxrpc_create, 764 .owner = THIS_MODULE, 765 }; 766 767 /* 768 * initialise and register the RxRPC protocol 769 */ 770 static int __init af_rxrpc_init(void) 771 { 772 int ret = -1; 773 unsigned int tmp; 774 775 BUILD_BUG_ON(sizeof(struct rxrpc_skb_priv) > FIELD_SIZEOF(struct sk_buff, cb)); 776 777 get_random_bytes(&rxrpc_epoch, sizeof(rxrpc_epoch)); 778 rxrpc_epoch |= RXRPC_RANDOM_EPOCH; 779 get_random_bytes(&tmp, sizeof(tmp)); 780 tmp &= 0x3fffffff; 781 if (tmp == 0) 782 tmp = 1; 783 idr_set_cursor(&rxrpc_client_conn_ids, tmp); 784 785 ret = -ENOMEM; 786 rxrpc_call_jar = kmem_cache_create( 787 "rxrpc_call_jar", sizeof(struct rxrpc_call), 0, 788 SLAB_HWCACHE_ALIGN, NULL); 789 if (!rxrpc_call_jar) { 790 pr_notice("Failed to allocate call jar\n"); 791 goto error_call_jar; 792 } 793 794 rxrpc_workqueue = alloc_workqueue("krxrpcd", 0, 1); 795 if (!rxrpc_workqueue) { 796 pr_notice("Failed to allocate work queue\n"); 797 goto error_work_queue; 798 } 799 800 ret = rxrpc_init_security(); 801 if (ret < 0) { 802 pr_crit("Cannot initialise security\n"); 803 goto error_security; 804 } 805 806 ret = proto_register(&rxrpc_proto, 1); 807 if (ret < 0) { 808 pr_crit("Cannot register protocol\n"); 809 goto error_proto; 810 } 811 812 ret = sock_register(&rxrpc_family_ops); 813 if (ret < 0) { 814 pr_crit("Cannot register socket family\n"); 815 goto error_sock; 816 } 817 818 ret = register_key_type(&key_type_rxrpc); 819 if (ret < 0) { 820 pr_crit("Cannot register client key type\n"); 821 goto error_key_type; 822 } 823 824 ret = register_key_type(&key_type_rxrpc_s); 825 if (ret < 0) { 826 pr_crit("Cannot register server key type\n"); 827 goto error_key_type_s; 828 } 829 830 ret = rxrpc_sysctl_init(); 831 if (ret < 0) { 832 pr_crit("Cannot register sysctls\n"); 833 goto error_sysctls; 834 } 835 836 #ifdef CONFIG_PROC_FS 837 proc_create("rxrpc_calls", 0, init_net.proc_net, &rxrpc_call_seq_fops); 838 proc_create("rxrpc_conns", 0, init_net.proc_net, 839 &rxrpc_connection_seq_fops); 840 #endif 841 return 0; 842 843 error_sysctls: 844 unregister_key_type(&key_type_rxrpc_s); 845 error_key_type_s: 846 unregister_key_type(&key_type_rxrpc); 847 error_key_type: 848 sock_unregister(PF_RXRPC); 849 error_sock: 850 proto_unregister(&rxrpc_proto); 851 error_proto: 852 rxrpc_exit_security(); 853 error_security: 854 destroy_workqueue(rxrpc_workqueue); 855 error_work_queue: 856 kmem_cache_destroy(rxrpc_call_jar); 857 error_call_jar: 858 return ret; 859 } 860 861 /* 862 * unregister the RxRPC protocol 863 */ 864 static void __exit af_rxrpc_exit(void) 865 { 866 _enter(""); 867 rxrpc_sysctl_exit(); 868 unregister_key_type(&key_type_rxrpc_s); 869 unregister_key_type(&key_type_rxrpc); 870 sock_unregister(PF_RXRPC); 871 proto_unregister(&rxrpc_proto); 872 rxrpc_destroy_all_calls(); 873 rxrpc_destroy_all_connections(); 874 ASSERTCMP(atomic_read(&rxrpc_n_tx_skbs), ==, 0); 875 ASSERTCMP(atomic_read(&rxrpc_n_rx_skbs), ==, 0); 876 rxrpc_destroy_all_locals(); 877 878 remove_proc_entry("rxrpc_conns", init_net.proc_net); 879 remove_proc_entry("rxrpc_calls", init_net.proc_net); 880 destroy_workqueue(rxrpc_workqueue); 881 rxrpc_exit_security(); 882 kmem_cache_destroy(rxrpc_call_jar); 883 _leave(""); 884 } 885 886 module_init(af_rxrpc_init); 887 module_exit(af_rxrpc_exit); 888