0001
0002
0003
0004
0005
0006
0007
0008 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0009
0010 #include <linux/module.h>
0011 #include <linux/kernel.h>
0012 #include <linux/net.h>
0013 #include <linux/slab.h>
0014 #include <linux/skbuff.h>
0015 #include <linux/random.h>
0016 #include <linux/poll.h>
0017 #include <linux/proc_fs.h>
0018 #include <linux/key-type.h>
0019 #include <net/net_namespace.h>
0020 #include <net/sock.h>
0021 #include <net/af_rxrpc.h>
0022 #define CREATE_TRACE_POINTS
0023 #include "ar-internal.h"
0024
0025 MODULE_DESCRIPTION("RxRPC network protocol");
0026 MODULE_AUTHOR("Red Hat, Inc.");
0027 MODULE_LICENSE("GPL");
0028 MODULE_ALIAS_NETPROTO(PF_RXRPC);
0029
0030 unsigned int rxrpc_debug;
0031 module_param_named(debug, rxrpc_debug, uint, 0644);
0032 MODULE_PARM_DESC(debug, "RxRPC debugging mask");
0033
0034 static struct proto rxrpc_proto;
0035 static const struct proto_ops rxrpc_rpc_ops;
0036
0037
0038 atomic_t rxrpc_debug_id;
0039 EXPORT_SYMBOL(rxrpc_debug_id);
0040
0041
0042 atomic_t rxrpc_n_tx_skbs, rxrpc_n_rx_skbs;
0043
0044 struct workqueue_struct *rxrpc_workqueue;
0045
0046 static void rxrpc_sock_destructor(struct sock *);
0047
0048
0049
0050
0051 static inline int rxrpc_writable(struct sock *sk)
0052 {
0053 return refcount_read(&sk->sk_wmem_alloc) < (size_t) sk->sk_sndbuf;
0054 }
0055
0056
0057
0058
0059 static void rxrpc_write_space(struct sock *sk)
0060 {
0061 _enter("%p", sk);
0062 rcu_read_lock();
0063 if (rxrpc_writable(sk)) {
0064 struct socket_wq *wq = rcu_dereference(sk->sk_wq);
0065
0066 if (skwq_has_sleeper(wq))
0067 wake_up_interruptible(&wq->wait);
0068 sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
0069 }
0070 rcu_read_unlock();
0071 }
0072
0073
0074
0075
0076 static int rxrpc_validate_address(struct rxrpc_sock *rx,
0077 struct sockaddr_rxrpc *srx,
0078 int len)
0079 {
0080 unsigned int tail;
0081
0082 if (len < sizeof(struct sockaddr_rxrpc))
0083 return -EINVAL;
0084
0085 if (srx->srx_family != AF_RXRPC)
0086 return -EAFNOSUPPORT;
0087
0088 if (srx->transport_type != SOCK_DGRAM)
0089 return -ESOCKTNOSUPPORT;
0090
0091 len -= offsetof(struct sockaddr_rxrpc, transport);
0092 if (srx->transport_len < sizeof(sa_family_t) ||
0093 srx->transport_len > len)
0094 return -EINVAL;
0095
0096 if (srx->transport.family != rx->family &&
0097 srx->transport.family == AF_INET && rx->family != AF_INET6)
0098 return -EAFNOSUPPORT;
0099
0100 switch (srx->transport.family) {
0101 case AF_INET:
0102 if (srx->transport_len < sizeof(struct sockaddr_in))
0103 return -EINVAL;
0104 tail = offsetof(struct sockaddr_rxrpc, transport.sin.__pad);
0105 break;
0106
0107 #ifdef CONFIG_AF_RXRPC_IPV6
0108 case AF_INET6:
0109 if (srx->transport_len < sizeof(struct sockaddr_in6))
0110 return -EINVAL;
0111 tail = offsetof(struct sockaddr_rxrpc, transport) +
0112 sizeof(struct sockaddr_in6);
0113 break;
0114 #endif
0115
0116 default:
0117 return -EAFNOSUPPORT;
0118 }
0119
0120 if (tail < len)
0121 memset((void *)srx + tail, 0, len - tail);
0122 _debug("INET: %pISp", &srx->transport);
0123 return 0;
0124 }
0125
0126
0127
0128
0129 static int rxrpc_bind(struct socket *sock, struct sockaddr *saddr, int len)
0130 {
0131 struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)saddr;
0132 struct rxrpc_local *local;
0133 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0134 u16 service_id;
0135 int ret;
0136
0137 _enter("%p,%p,%d", rx, saddr, len);
0138
0139 ret = rxrpc_validate_address(rx, srx, len);
0140 if (ret < 0)
0141 goto error;
0142 service_id = srx->srx_service;
0143
0144 lock_sock(&rx->sk);
0145
0146 switch (rx->sk.sk_state) {
0147 case RXRPC_UNBOUND:
0148 rx->srx = *srx;
0149 local = rxrpc_lookup_local(sock_net(&rx->sk), &rx->srx);
0150 if (IS_ERR(local)) {
0151 ret = PTR_ERR(local);
0152 goto error_unlock;
0153 }
0154
0155 if (service_id) {
0156 write_lock(&local->services_lock);
0157 if (rcu_access_pointer(local->service))
0158 goto service_in_use;
0159 rx->local = local;
0160 rcu_assign_pointer(local->service, rx);
0161 write_unlock(&local->services_lock);
0162
0163 rx->sk.sk_state = RXRPC_SERVER_BOUND;
0164 } else {
0165 rx->local = local;
0166 rx->sk.sk_state = RXRPC_CLIENT_BOUND;
0167 }
0168 break;
0169
0170 case RXRPC_SERVER_BOUND:
0171 ret = -EINVAL;
0172 if (service_id == 0)
0173 goto error_unlock;
0174 ret = -EADDRINUSE;
0175 if (service_id == rx->srx.srx_service)
0176 goto error_unlock;
0177 ret = -EINVAL;
0178 srx->srx_service = rx->srx.srx_service;
0179 if (memcmp(srx, &rx->srx, sizeof(*srx)) != 0)
0180 goto error_unlock;
0181 rx->second_service = service_id;
0182 rx->sk.sk_state = RXRPC_SERVER_BOUND2;
0183 break;
0184
0185 default:
0186 ret = -EINVAL;
0187 goto error_unlock;
0188 }
0189
0190 release_sock(&rx->sk);
0191 _leave(" = 0");
0192 return 0;
0193
0194 service_in_use:
0195 write_unlock(&local->services_lock);
0196 rxrpc_unuse_local(local);
0197 rxrpc_put_local(local);
0198 ret = -EADDRINUSE;
0199 error_unlock:
0200 release_sock(&rx->sk);
0201 error:
0202 _leave(" = %d", ret);
0203 return ret;
0204 }
0205
0206
0207
0208
0209 static int rxrpc_listen(struct socket *sock, int backlog)
0210 {
0211 struct sock *sk = sock->sk;
0212 struct rxrpc_sock *rx = rxrpc_sk(sk);
0213 unsigned int max, old;
0214 int ret;
0215
0216 _enter("%p,%d", rx, backlog);
0217
0218 lock_sock(&rx->sk);
0219
0220 switch (rx->sk.sk_state) {
0221 case RXRPC_UNBOUND:
0222 ret = -EADDRNOTAVAIL;
0223 break;
0224 case RXRPC_SERVER_BOUND:
0225 case RXRPC_SERVER_BOUND2:
0226 ASSERT(rx->local != NULL);
0227 max = READ_ONCE(rxrpc_max_backlog);
0228 ret = -EINVAL;
0229 if (backlog == INT_MAX)
0230 backlog = max;
0231 else if (backlog < 0 || backlog > max)
0232 break;
0233 old = sk->sk_max_ack_backlog;
0234 sk->sk_max_ack_backlog = backlog;
0235 ret = rxrpc_service_prealloc(rx, GFP_KERNEL);
0236 if (ret == 0)
0237 rx->sk.sk_state = RXRPC_SERVER_LISTENING;
0238 else
0239 sk->sk_max_ack_backlog = old;
0240 break;
0241 case RXRPC_SERVER_LISTENING:
0242 if (backlog == 0) {
0243 rx->sk.sk_state = RXRPC_SERVER_LISTEN_DISABLED;
0244 sk->sk_max_ack_backlog = 0;
0245 rxrpc_discard_prealloc(rx);
0246 ret = 0;
0247 break;
0248 }
0249 fallthrough;
0250 default:
0251 ret = -EBUSY;
0252 break;
0253 }
0254
0255 release_sock(&rx->sk);
0256 _leave(" = %d", ret);
0257 return ret;
0258 }
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280 struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock,
0281 struct sockaddr_rxrpc *srx,
0282 struct key *key,
0283 unsigned long user_call_ID,
0284 s64 tx_total_len,
0285 gfp_t gfp,
0286 rxrpc_notify_rx_t notify_rx,
0287 bool upgrade,
0288 enum rxrpc_interruptibility interruptibility,
0289 unsigned int debug_id)
0290 {
0291 struct rxrpc_conn_parameters cp;
0292 struct rxrpc_call_params p;
0293 struct rxrpc_call *call;
0294 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0295 int ret;
0296
0297 _enter(",,%x,%lx", key_serial(key), user_call_ID);
0298
0299 ret = rxrpc_validate_address(rx, srx, sizeof(*srx));
0300 if (ret < 0)
0301 return ERR_PTR(ret);
0302
0303 lock_sock(&rx->sk);
0304
0305 if (!key)
0306 key = rx->key;
0307 if (key && !key->payload.data[0])
0308 key = NULL;
0309
0310 memset(&p, 0, sizeof(p));
0311 p.user_call_ID = user_call_ID;
0312 p.tx_total_len = tx_total_len;
0313 p.interruptibility = interruptibility;
0314 p.kernel = true;
0315
0316 memset(&cp, 0, sizeof(cp));
0317 cp.local = rx->local;
0318 cp.key = key;
0319 cp.security_level = rx->min_sec_level;
0320 cp.exclusive = false;
0321 cp.upgrade = upgrade;
0322 cp.service_id = srx->srx_service;
0323 call = rxrpc_new_client_call(rx, &cp, srx, &p, gfp, debug_id);
0324
0325 if (!IS_ERR(call)) {
0326 call->notify_rx = notify_rx;
0327 mutex_unlock(&call->user_mutex);
0328 }
0329
0330 rxrpc_put_peer(cp.peer);
0331 _leave(" = %p", call);
0332 return call;
0333 }
0334 EXPORT_SYMBOL(rxrpc_kernel_begin_call);
0335
0336
0337
0338
0339 static void rxrpc_dummy_notify_rx(struct sock *sk, struct rxrpc_call *rxcall,
0340 unsigned long call_user_ID)
0341 {
0342 }
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352 void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call)
0353 {
0354 _enter("%d{%d}", call->debug_id, refcount_read(&call->ref));
0355
0356 mutex_lock(&call->user_mutex);
0357 rxrpc_release_call(rxrpc_sk(sock->sk), call);
0358
0359
0360 if (call->notify_rx) {
0361 spin_lock_bh(&call->notify_lock);
0362 call->notify_rx = rxrpc_dummy_notify_rx;
0363 spin_unlock_bh(&call->notify_lock);
0364 }
0365
0366 mutex_unlock(&call->user_mutex);
0367 rxrpc_put_call(call, rxrpc_call_put_kernel);
0368 }
0369 EXPORT_SYMBOL(rxrpc_kernel_end_call);
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379 bool rxrpc_kernel_check_life(const struct socket *sock,
0380 const struct rxrpc_call *call)
0381 {
0382 return call->state != RXRPC_CALL_COMPLETE;
0383 }
0384 EXPORT_SYMBOL(rxrpc_kernel_check_life);
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394 u32 rxrpc_kernel_get_epoch(struct socket *sock, struct rxrpc_call *call)
0395 {
0396 return call->conn->proto.epoch;
0397 }
0398 EXPORT_SYMBOL(rxrpc_kernel_get_epoch);
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408 void rxrpc_kernel_new_call_notification(
0409 struct socket *sock,
0410 rxrpc_notify_new_call_t notify_new_call,
0411 rxrpc_discard_new_call_t discard_new_call)
0412 {
0413 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0414
0415 rx->notify_new_call = notify_new_call;
0416 rx->discard_new_call = discard_new_call;
0417 }
0418 EXPORT_SYMBOL(rxrpc_kernel_new_call_notification);
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429 void rxrpc_kernel_set_max_life(struct socket *sock, struct rxrpc_call *call,
0430 unsigned long hard_timeout)
0431 {
0432 unsigned long now;
0433
0434 mutex_lock(&call->user_mutex);
0435
0436 now = jiffies;
0437 hard_timeout += now;
0438 WRITE_ONCE(call->expect_term_by, hard_timeout);
0439 rxrpc_reduce_call_timer(call, hard_timeout, now, rxrpc_timer_set_for_hard);
0440
0441 mutex_unlock(&call->user_mutex);
0442 }
0443 EXPORT_SYMBOL(rxrpc_kernel_set_max_life);
0444
0445
0446
0447
0448
0449
0450 static int rxrpc_connect(struct socket *sock, struct sockaddr *addr,
0451 int addr_len, int flags)
0452 {
0453 struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr;
0454 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0455 int ret;
0456
0457 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags);
0458
0459 ret = rxrpc_validate_address(rx, srx, addr_len);
0460 if (ret < 0) {
0461 _leave(" = %d [bad addr]", ret);
0462 return ret;
0463 }
0464
0465 lock_sock(&rx->sk);
0466
0467 ret = -EISCONN;
0468 if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags))
0469 goto error;
0470
0471 switch (rx->sk.sk_state) {
0472 case RXRPC_UNBOUND:
0473 rx->sk.sk_state = RXRPC_CLIENT_UNBOUND;
0474 break;
0475 case RXRPC_CLIENT_UNBOUND:
0476 case RXRPC_CLIENT_BOUND:
0477 break;
0478 default:
0479 ret = -EBUSY;
0480 goto error;
0481 }
0482
0483 rx->connect_srx = *srx;
0484 set_bit(RXRPC_SOCK_CONNECTED, &rx->flags);
0485 ret = 0;
0486
0487 error:
0488 release_sock(&rx->sk);
0489 return ret;
0490 }
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501 static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
0502 {
0503 struct rxrpc_local *local;
0504 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0505 int ret;
0506
0507 _enter(",{%d},,%zu", rx->sk.sk_state, len);
0508
0509 if (m->msg_flags & MSG_OOB)
0510 return -EOPNOTSUPP;
0511
0512 if (m->msg_name) {
0513 ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen);
0514 if (ret < 0) {
0515 _leave(" = %d [bad addr]", ret);
0516 return ret;
0517 }
0518 }
0519
0520 lock_sock(&rx->sk);
0521
0522 switch (rx->sk.sk_state) {
0523 case RXRPC_UNBOUND:
0524 case RXRPC_CLIENT_UNBOUND:
0525 rx->srx.srx_family = AF_RXRPC;
0526 rx->srx.srx_service = 0;
0527 rx->srx.transport_type = SOCK_DGRAM;
0528 rx->srx.transport.family = rx->family;
0529 switch (rx->family) {
0530 case AF_INET:
0531 rx->srx.transport_len = sizeof(struct sockaddr_in);
0532 break;
0533 #ifdef CONFIG_AF_RXRPC_IPV6
0534 case AF_INET6:
0535 rx->srx.transport_len = sizeof(struct sockaddr_in6);
0536 break;
0537 #endif
0538 default:
0539 ret = -EAFNOSUPPORT;
0540 goto error_unlock;
0541 }
0542 local = rxrpc_lookup_local(sock_net(sock->sk), &rx->srx);
0543 if (IS_ERR(local)) {
0544 ret = PTR_ERR(local);
0545 goto error_unlock;
0546 }
0547
0548 rx->local = local;
0549 rx->sk.sk_state = RXRPC_CLIENT_BOUND;
0550 fallthrough;
0551
0552 case RXRPC_CLIENT_BOUND:
0553 if (!m->msg_name &&
0554 test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) {
0555 m->msg_name = &rx->connect_srx;
0556 m->msg_namelen = sizeof(rx->connect_srx);
0557 }
0558 fallthrough;
0559 case RXRPC_SERVER_BOUND:
0560 case RXRPC_SERVER_LISTENING:
0561 ret = rxrpc_do_sendmsg(rx, m, len);
0562
0563 goto out;
0564 default:
0565 ret = -EINVAL;
0566 goto error_unlock;
0567 }
0568
0569 error_unlock:
0570 release_sock(&rx->sk);
0571 out:
0572 _leave(" = %d", ret);
0573 return ret;
0574 }
0575
0576 int rxrpc_sock_set_min_security_level(struct sock *sk, unsigned int val)
0577 {
0578 if (sk->sk_state != RXRPC_UNBOUND)
0579 return -EISCONN;
0580 if (val > RXRPC_SECURITY_MAX)
0581 return -EINVAL;
0582 lock_sock(sk);
0583 rxrpc_sk(sk)->min_sec_level = val;
0584 release_sock(sk);
0585 return 0;
0586 }
0587 EXPORT_SYMBOL(rxrpc_sock_set_min_security_level);
0588
0589
0590
0591
0592 static int rxrpc_setsockopt(struct socket *sock, int level, int optname,
0593 sockptr_t optval, unsigned int optlen)
0594 {
0595 struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
0596 unsigned int min_sec_level;
0597 u16 service_upgrade[2];
0598 int ret;
0599
0600 _enter(",%d,%d,,%d", level, optname, optlen);
0601
0602 lock_sock(&rx->sk);
0603 ret = -EOPNOTSUPP;
0604
0605 if (level == SOL_RXRPC) {
0606 switch (optname) {
0607 case RXRPC_EXCLUSIVE_CONNECTION:
0608 ret = -EINVAL;
0609 if (optlen != 0)
0610 goto error;
0611 ret = -EISCONN;
0612 if (rx->sk.sk_state != RXRPC_UNBOUND)
0613 goto error;
0614 rx->exclusive = true;
0615 goto success;
0616
0617 case RXRPC_SECURITY_KEY:
0618 ret = -EINVAL;
0619 if (rx->key)
0620 goto error;
0621 ret = -EISCONN;
0622 if (rx->sk.sk_state != RXRPC_UNBOUND)
0623 goto error;
0624 ret = rxrpc_request_key(rx, optval, optlen);
0625 goto error;
0626
0627 case RXRPC_SECURITY_KEYRING:
0628 ret = -EINVAL;
0629 if (rx->key)
0630 goto error;
0631 ret = -EISCONN;
0632 if (rx->sk.sk_state != RXRPC_UNBOUND)
0633 goto error;
0634 ret = rxrpc_server_keyring(rx, optval, optlen);
0635 goto error;
0636
0637 case RXRPC_MIN_SECURITY_LEVEL:
0638 ret = -EINVAL;
0639 if (optlen != sizeof(unsigned int))
0640 goto error;
0641 ret = -EISCONN;
0642 if (rx->sk.sk_state != RXRPC_UNBOUND)
0643 goto error;
0644 ret = copy_from_sockptr(&min_sec_level, optval,
0645 sizeof(unsigned int));
0646 if (ret < 0)
0647 goto error;
0648 ret = -EINVAL;
0649 if (min_sec_level > RXRPC_SECURITY_MAX)
0650 goto error;
0651 rx->min_sec_level = min_sec_level;
0652 goto success;
0653
0654 case RXRPC_UPGRADEABLE_SERVICE:
0655 ret = -EINVAL;
0656 if (optlen != sizeof(service_upgrade) ||
0657 rx->service_upgrade.from != 0)
0658 goto error;
0659 ret = -EISCONN;
0660 if (rx->sk.sk_state != RXRPC_SERVER_BOUND2)
0661 goto error;
0662 ret = -EFAULT;
0663 if (copy_from_sockptr(service_upgrade, optval,
0664 sizeof(service_upgrade)) != 0)
0665 goto error;
0666 ret = -EINVAL;
0667 if ((service_upgrade[0] != rx->srx.srx_service ||
0668 service_upgrade[1] != rx->second_service) &&
0669 (service_upgrade[0] != rx->second_service ||
0670 service_upgrade[1] != rx->srx.srx_service))
0671 goto error;
0672 rx->service_upgrade.from = service_upgrade[0];
0673 rx->service_upgrade.to = service_upgrade[1];
0674 goto success;
0675
0676 default:
0677 break;
0678 }
0679 }
0680
0681 success:
0682 ret = 0;
0683 error:
0684 release_sock(&rx->sk);
0685 return ret;
0686 }
0687
0688
0689
0690
0691 static int rxrpc_getsockopt(struct socket *sock, int level, int optname,
0692 char __user *optval, int __user *_optlen)
0693 {
0694 int optlen;
0695
0696 if (level != SOL_RXRPC)
0697 return -EOPNOTSUPP;
0698
0699 if (get_user(optlen, _optlen))
0700 return -EFAULT;
0701
0702 switch (optname) {
0703 case RXRPC_SUPPORTED_CMSG:
0704 if (optlen < sizeof(int))
0705 return -ETOOSMALL;
0706 if (put_user(RXRPC__SUPPORTED - 1, (int __user *)optval) ||
0707 put_user(sizeof(int), _optlen))
0708 return -EFAULT;
0709 return 0;
0710
0711 default:
0712 return -EOPNOTSUPP;
0713 }
0714 }
0715
0716
0717
0718
0719 static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
0720 poll_table *wait)
0721 {
0722 struct sock *sk = sock->sk;
0723 struct rxrpc_sock *rx = rxrpc_sk(sk);
0724 __poll_t mask;
0725
0726 sock_poll_wait(file, sock, wait);
0727 mask = 0;
0728
0729
0730
0731 if (!list_empty(&rx->recvmsg_q))
0732 mask |= EPOLLIN | EPOLLRDNORM;
0733
0734
0735
0736
0737 if (rxrpc_writable(sk))
0738 mask |= EPOLLOUT | EPOLLWRNORM;
0739
0740 return mask;
0741 }
0742
0743
0744
0745
0746 static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
0747 int kern)
0748 {
0749 struct rxrpc_net *rxnet;
0750 struct rxrpc_sock *rx;
0751 struct sock *sk;
0752
0753 _enter("%p,%d", sock, protocol);
0754
0755
0756 if (protocol != PF_INET &&
0757 IS_ENABLED(CONFIG_AF_RXRPC_IPV6) && protocol != PF_INET6)
0758 return -EPROTONOSUPPORT;
0759
0760 if (sock->type != SOCK_DGRAM)
0761 return -ESOCKTNOSUPPORT;
0762
0763 sock->ops = &rxrpc_rpc_ops;
0764 sock->state = SS_UNCONNECTED;
0765
0766 sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto, kern);
0767 if (!sk)
0768 return -ENOMEM;
0769
0770 sock_init_data(sock, sk);
0771 sock_set_flag(sk, SOCK_RCU_FREE);
0772 sk->sk_state = RXRPC_UNBOUND;
0773 sk->sk_write_space = rxrpc_write_space;
0774 sk->sk_max_ack_backlog = 0;
0775 sk->sk_destruct = rxrpc_sock_destructor;
0776
0777 rx = rxrpc_sk(sk);
0778 rx->family = protocol;
0779 rx->calls = RB_ROOT;
0780
0781 spin_lock_init(&rx->incoming_lock);
0782 INIT_LIST_HEAD(&rx->sock_calls);
0783 INIT_LIST_HEAD(&rx->to_be_accepted);
0784 INIT_LIST_HEAD(&rx->recvmsg_q);
0785 rwlock_init(&rx->recvmsg_lock);
0786 rwlock_init(&rx->call_lock);
0787 memset(&rx->srx, 0, sizeof(rx->srx));
0788
0789 rxnet = rxrpc_net(sock_net(&rx->sk));
0790 timer_reduce(&rxnet->peer_keepalive_timer, jiffies + 1);
0791
0792 _leave(" = 0 [%p]", rx);
0793 return 0;
0794 }
0795
0796
0797
0798
0799 static int rxrpc_shutdown(struct socket *sock, int flags)
0800 {
0801 struct sock *sk = sock->sk;
0802 struct rxrpc_sock *rx = rxrpc_sk(sk);
0803 int ret = 0;
0804
0805 _enter("%p,%d", sk, flags);
0806
0807 if (flags != SHUT_RDWR)
0808 return -EOPNOTSUPP;
0809 if (sk->sk_state == RXRPC_CLOSE)
0810 return -ESHUTDOWN;
0811
0812 lock_sock(sk);
0813
0814 spin_lock_bh(&sk->sk_receive_queue.lock);
0815 if (sk->sk_state < RXRPC_CLOSE) {
0816 sk->sk_state = RXRPC_CLOSE;
0817 sk->sk_shutdown = SHUTDOWN_MASK;
0818 } else {
0819 ret = -ESHUTDOWN;
0820 }
0821 spin_unlock_bh(&sk->sk_receive_queue.lock);
0822
0823 rxrpc_discard_prealloc(rx);
0824
0825 release_sock(sk);
0826 return ret;
0827 }
0828
0829
0830
0831
0832 static void rxrpc_sock_destructor(struct sock *sk)
0833 {
0834 _enter("%p", sk);
0835
0836 rxrpc_purge_queue(&sk->sk_receive_queue);
0837
0838 WARN_ON(refcount_read(&sk->sk_wmem_alloc));
0839 WARN_ON(!sk_unhashed(sk));
0840 WARN_ON(sk->sk_socket);
0841
0842 if (!sock_flag(sk, SOCK_DEAD)) {
0843 printk("Attempt to release alive rxrpc socket: %p\n", sk);
0844 return;
0845 }
0846 }
0847
0848
0849
0850
0851 static int rxrpc_release_sock(struct sock *sk)
0852 {
0853 struct rxrpc_sock *rx = rxrpc_sk(sk);
0854
0855 _enter("%p{%d,%d}", sk, sk->sk_state, refcount_read(&sk->sk_refcnt));
0856
0857
0858 sock_orphan(sk);
0859 sk->sk_shutdown = SHUTDOWN_MASK;
0860
0861
0862
0863
0864
0865 switch (sk->sk_state) {
0866 case RXRPC_SERVER_BOUND:
0867 case RXRPC_SERVER_BOUND2:
0868 case RXRPC_SERVER_LISTENING:
0869 case RXRPC_SERVER_LISTEN_DISABLED:
0870 rx->local->service_closed = true;
0871 break;
0872 }
0873
0874 spin_lock_bh(&sk->sk_receive_queue.lock);
0875 sk->sk_state = RXRPC_CLOSE;
0876 spin_unlock_bh(&sk->sk_receive_queue.lock);
0877
0878 if (rx->local && rcu_access_pointer(rx->local->service) == rx) {
0879 write_lock(&rx->local->services_lock);
0880 rcu_assign_pointer(rx->local->service, NULL);
0881 write_unlock(&rx->local->services_lock);
0882 }
0883
0884
0885 rxrpc_discard_prealloc(rx);
0886 rxrpc_release_calls_on_socket(rx);
0887 flush_workqueue(rxrpc_workqueue);
0888 rxrpc_purge_queue(&sk->sk_receive_queue);
0889
0890 rxrpc_unuse_local(rx->local);
0891 rxrpc_put_local(rx->local);
0892 rx->local = NULL;
0893 key_put(rx->key);
0894 rx->key = NULL;
0895 key_put(rx->securities);
0896 rx->securities = NULL;
0897 sock_put(sk);
0898
0899 _leave(" = 0");
0900 return 0;
0901 }
0902
0903
0904
0905
0906 static int rxrpc_release(struct socket *sock)
0907 {
0908 struct sock *sk = sock->sk;
0909
0910 _enter("%p{%p}", sock, sk);
0911
0912 if (!sk)
0913 return 0;
0914
0915 sock->sk = NULL;
0916
0917 return rxrpc_release_sock(sk);
0918 }
0919
0920
0921
0922
0923 static const struct proto_ops rxrpc_rpc_ops = {
0924 .family = PF_RXRPC,
0925 .owner = THIS_MODULE,
0926 .release = rxrpc_release,
0927 .bind = rxrpc_bind,
0928 .connect = rxrpc_connect,
0929 .socketpair = sock_no_socketpair,
0930 .accept = sock_no_accept,
0931 .getname = sock_no_getname,
0932 .poll = rxrpc_poll,
0933 .ioctl = sock_no_ioctl,
0934 .listen = rxrpc_listen,
0935 .shutdown = rxrpc_shutdown,
0936 .setsockopt = rxrpc_setsockopt,
0937 .getsockopt = rxrpc_getsockopt,
0938 .sendmsg = rxrpc_sendmsg,
0939 .recvmsg = rxrpc_recvmsg,
0940 .mmap = sock_no_mmap,
0941 .sendpage = sock_no_sendpage,
0942 };
0943
0944 static struct proto rxrpc_proto = {
0945 .name = "RXRPC",
0946 .owner = THIS_MODULE,
0947 .obj_size = sizeof(struct rxrpc_sock),
0948 .max_header = sizeof(struct rxrpc_wire_header),
0949 };
0950
0951 static const struct net_proto_family rxrpc_family_ops = {
0952 .family = PF_RXRPC,
0953 .create = rxrpc_create,
0954 .owner = THIS_MODULE,
0955 };
0956
0957
0958
0959
0960 static int __init af_rxrpc_init(void)
0961 {
0962 int ret = -1;
0963 unsigned int tmp;
0964
0965 BUILD_BUG_ON(sizeof(struct rxrpc_skb_priv) > sizeof_field(struct sk_buff, cb));
0966
0967 get_random_bytes(&tmp, sizeof(tmp));
0968 tmp &= 0x3fffffff;
0969 if (tmp == 0)
0970 tmp = 1;
0971 idr_set_cursor(&rxrpc_client_conn_ids, tmp);
0972
0973 ret = -ENOMEM;
0974 rxrpc_call_jar = kmem_cache_create(
0975 "rxrpc_call_jar", sizeof(struct rxrpc_call), 0,
0976 SLAB_HWCACHE_ALIGN, NULL);
0977 if (!rxrpc_call_jar) {
0978 pr_notice("Failed to allocate call jar\n");
0979 goto error_call_jar;
0980 }
0981
0982 rxrpc_workqueue = alloc_workqueue("krxrpcd", 0, 1);
0983 if (!rxrpc_workqueue) {
0984 pr_notice("Failed to allocate work queue\n");
0985 goto error_work_queue;
0986 }
0987
0988 ret = rxrpc_init_security();
0989 if (ret < 0) {
0990 pr_crit("Cannot initialise security\n");
0991 goto error_security;
0992 }
0993
0994 ret = register_pernet_device(&rxrpc_net_ops);
0995 if (ret)
0996 goto error_pernet;
0997
0998 ret = proto_register(&rxrpc_proto, 1);
0999 if (ret < 0) {
1000 pr_crit("Cannot register protocol\n");
1001 goto error_proto;
1002 }
1003
1004 ret = sock_register(&rxrpc_family_ops);
1005 if (ret < 0) {
1006 pr_crit("Cannot register socket family\n");
1007 goto error_sock;
1008 }
1009
1010 ret = register_key_type(&key_type_rxrpc);
1011 if (ret < 0) {
1012 pr_crit("Cannot register client key type\n");
1013 goto error_key_type;
1014 }
1015
1016 ret = register_key_type(&key_type_rxrpc_s);
1017 if (ret < 0) {
1018 pr_crit("Cannot register server key type\n");
1019 goto error_key_type_s;
1020 }
1021
1022 ret = rxrpc_sysctl_init();
1023 if (ret < 0) {
1024 pr_crit("Cannot register sysctls\n");
1025 goto error_sysctls;
1026 }
1027
1028 return 0;
1029
1030 error_sysctls:
1031 unregister_key_type(&key_type_rxrpc_s);
1032 error_key_type_s:
1033 unregister_key_type(&key_type_rxrpc);
1034 error_key_type:
1035 sock_unregister(PF_RXRPC);
1036 error_sock:
1037 proto_unregister(&rxrpc_proto);
1038 error_proto:
1039 unregister_pernet_device(&rxrpc_net_ops);
1040 error_pernet:
1041 rxrpc_exit_security();
1042 error_security:
1043 destroy_workqueue(rxrpc_workqueue);
1044 error_work_queue:
1045 kmem_cache_destroy(rxrpc_call_jar);
1046 error_call_jar:
1047 return ret;
1048 }
1049
1050
1051
1052
1053 static void __exit af_rxrpc_exit(void)
1054 {
1055 _enter("");
1056 rxrpc_sysctl_exit();
1057 unregister_key_type(&key_type_rxrpc_s);
1058 unregister_key_type(&key_type_rxrpc);
1059 sock_unregister(PF_RXRPC);
1060 proto_unregister(&rxrpc_proto);
1061 unregister_pernet_device(&rxrpc_net_ops);
1062 ASSERTCMP(atomic_read(&rxrpc_n_tx_skbs), ==, 0);
1063 ASSERTCMP(atomic_read(&rxrpc_n_rx_skbs), ==, 0);
1064
1065
1066
1067
1068 rcu_barrier();
1069 rxrpc_destroy_client_conn_ids();
1070
1071 destroy_workqueue(rxrpc_workqueue);
1072 rxrpc_exit_security();
1073 kmem_cache_destroy(rxrpc_call_jar);
1074 _leave("");
1075 }
1076
1077 module_init(af_rxrpc_init);
1078 module_exit(af_rxrpc_exit);