root/net/rxrpc/af_rxrpc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rxrpc_writable
  2. rxrpc_write_space
  3. rxrpc_validate_address
  4. rxrpc_bind
  5. rxrpc_listen
  6. rxrpc_kernel_begin_call
  7. rxrpc_dummy_notify_rx
  8. rxrpc_kernel_end_call
  9. rxrpc_kernel_check_life
  10. rxrpc_kernel_get_epoch
  11. rxrpc_kernel_new_call_notification
  12. rxrpc_kernel_set_max_life
  13. rxrpc_connect
  14. rxrpc_sendmsg
  15. rxrpc_setsockopt
  16. rxrpc_getsockopt
  17. rxrpc_poll
  18. rxrpc_create
  19. rxrpc_shutdown
  20. rxrpc_sock_destructor
  21. rxrpc_release_sock
  22. rxrpc_release
  23. af_rxrpc_init
  24. af_rxrpc_exit

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

/* [<][>][^][v][top][bottom][index][help] */