cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

af_rxrpc.c (25777B)


      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
     25MODULE_DESCRIPTION("RxRPC network protocol");
     26MODULE_AUTHOR("Red Hat, Inc.");
     27MODULE_LICENSE("GPL");
     28MODULE_ALIAS_NETPROTO(PF_RXRPC);
     29
     30unsigned int rxrpc_debug; // = RXRPC_DEBUG_KPROTO;
     31module_param_named(debug, rxrpc_debug, uint, 0644);
     32MODULE_PARM_DESC(debug, "RxRPC debugging mask");
     33
     34static struct proto rxrpc_proto;
     35static const struct proto_ops rxrpc_rpc_ops;
     36
     37/* current debugging ID */
     38atomic_t rxrpc_debug_id;
     39EXPORT_SYMBOL(rxrpc_debug_id);
     40
     41/* count of skbs currently in use */
     42atomic_t rxrpc_n_tx_skbs, rxrpc_n_rx_skbs;
     43
     44struct workqueue_struct *rxrpc_workqueue;
     45
     46static void rxrpc_sock_destructor(struct sock *);
     47
     48/*
     49 * see if an RxRPC socket is currently writable
     50 */
     51static 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 */
     59static 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 */
     76static 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 */
    129static 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
    194service_in_use:
    195	write_unlock(&local->services_lock);
    196	rxrpc_unuse_local(local);
    197	rxrpc_put_local(local);
    198	ret = -EADDRINUSE;
    199error_unlock:
    200	release_sock(&rx->sk);
    201error:
    202	_leave(" = %d", ret);
    203	return ret;
    204}
    205
    206/*
    207 * set the number of pending calls permitted on a listening socket
    208 */
    209static 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		fallthrough;
    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 * @interruptibility: The call is interruptible, or can be canceled.
    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 */
    280struct 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	p.kernel		= true;
    315
    316	memset(&cp, 0, sizeof(cp));
    317	cp.local		= rx->local;
    318	cp.key			= key;
    319	cp.security_level	= rx->min_sec_level;
    320	cp.exclusive		= false;
    321	cp.upgrade		= upgrade;
    322	cp.service_id		= srx->srx_service;
    323	call = rxrpc_new_client_call(rx, &cp, srx, &p, gfp, debug_id);
    324	/* The socket has been unlocked. */
    325	if (!IS_ERR(call)) {
    326		call->notify_rx = notify_rx;
    327		mutex_unlock(&call->user_mutex);
    328	}
    329
    330	rxrpc_put_peer(cp.peer);
    331	_leave(" = %p", call);
    332	return call;
    333}
    334EXPORT_SYMBOL(rxrpc_kernel_begin_call);
    335
    336/*
    337 * Dummy function used to stop the notifier talking to recvmsg().
    338 */
    339static void rxrpc_dummy_notify_rx(struct sock *sk, struct rxrpc_call *rxcall,
    340				  unsigned long call_user_ID)
    341{
    342}
    343
    344/**
    345 * rxrpc_kernel_end_call - Allow a kernel service to end a call it was using
    346 * @sock: The socket the call is on
    347 * @call: The call to end
    348 *
    349 * Allow a kernel service to end a call it was using.  The call must be
    350 * complete before this is called (the call should be aborted if necessary).
    351 */
    352void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call)
    353{
    354	_enter("%d{%d}", call->debug_id, refcount_read(&call->ref));
    355
    356	mutex_lock(&call->user_mutex);
    357	rxrpc_release_call(rxrpc_sk(sock->sk), call);
    358
    359	/* Make sure we're not going to call back into a kernel service */
    360	if (call->notify_rx) {
    361		spin_lock_bh(&call->notify_lock);
    362		call->notify_rx = rxrpc_dummy_notify_rx;
    363		spin_unlock_bh(&call->notify_lock);
    364	}
    365
    366	mutex_unlock(&call->user_mutex);
    367	rxrpc_put_call(call, rxrpc_call_put_kernel);
    368}
    369EXPORT_SYMBOL(rxrpc_kernel_end_call);
    370
    371/**
    372 * rxrpc_kernel_check_life - Check to see whether a call is still alive
    373 * @sock: The socket the call is on
    374 * @call: The call to check
    375 *
    376 * Allow a kernel service to find out whether a call is still alive -
    377 * ie. whether it has completed.
    378 */
    379bool rxrpc_kernel_check_life(const struct socket *sock,
    380			     const struct rxrpc_call *call)
    381{
    382	return call->state != RXRPC_CALL_COMPLETE;
    383}
    384EXPORT_SYMBOL(rxrpc_kernel_check_life);
    385
    386/**
    387 * rxrpc_kernel_get_epoch - Retrieve the epoch value from a call.
    388 * @sock: The socket the call is on
    389 * @call: The call to query
    390 *
    391 * Allow a kernel service to retrieve the epoch value from a service call to
    392 * see if the client at the other end rebooted.
    393 */
    394u32 rxrpc_kernel_get_epoch(struct socket *sock, struct rxrpc_call *call)
    395{
    396	return call->conn->proto.epoch;
    397}
    398EXPORT_SYMBOL(rxrpc_kernel_get_epoch);
    399
    400/**
    401 * rxrpc_kernel_new_call_notification - Get notifications of new calls
    402 * @sock: The socket to intercept received messages on
    403 * @notify_new_call: Function to be called when new calls appear
    404 * @discard_new_call: Function to discard preallocated calls
    405 *
    406 * Allow a kernel service to be given notifications about new calls.
    407 */
    408void rxrpc_kernel_new_call_notification(
    409	struct socket *sock,
    410	rxrpc_notify_new_call_t notify_new_call,
    411	rxrpc_discard_new_call_t discard_new_call)
    412{
    413	struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
    414
    415	rx->notify_new_call = notify_new_call;
    416	rx->discard_new_call = discard_new_call;
    417}
    418EXPORT_SYMBOL(rxrpc_kernel_new_call_notification);
    419
    420/**
    421 * rxrpc_kernel_set_max_life - Set maximum lifespan on a call
    422 * @sock: The socket the call is on
    423 * @call: The call to configure
    424 * @hard_timeout: The maximum lifespan of the call in jiffies
    425 *
    426 * Set the maximum lifespan of a call.  The call will end with ETIME or
    427 * ETIMEDOUT if it takes longer than this.
    428 */
    429void rxrpc_kernel_set_max_life(struct socket *sock, struct rxrpc_call *call,
    430			       unsigned long hard_timeout)
    431{
    432	unsigned long now;
    433
    434	mutex_lock(&call->user_mutex);
    435
    436	now = jiffies;
    437	hard_timeout += now;
    438	WRITE_ONCE(call->expect_term_by, hard_timeout);
    439	rxrpc_reduce_call_timer(call, hard_timeout, now, rxrpc_timer_set_for_hard);
    440
    441	mutex_unlock(&call->user_mutex);
    442}
    443EXPORT_SYMBOL(rxrpc_kernel_set_max_life);
    444
    445/*
    446 * connect an RxRPC socket
    447 * - this just targets it at a specific destination; no actual connection
    448 *   negotiation takes place
    449 */
    450static int rxrpc_connect(struct socket *sock, struct sockaddr *addr,
    451			 int addr_len, int flags)
    452{
    453	struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr;
    454	struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
    455	int ret;
    456
    457	_enter("%p,%p,%d,%d", rx, addr, addr_len, flags);
    458
    459	ret = rxrpc_validate_address(rx, srx, addr_len);
    460	if (ret < 0) {
    461		_leave(" = %d [bad addr]", ret);
    462		return ret;
    463	}
    464
    465	lock_sock(&rx->sk);
    466
    467	ret = -EISCONN;
    468	if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags))
    469		goto error;
    470
    471	switch (rx->sk.sk_state) {
    472	case RXRPC_UNBOUND:
    473		rx->sk.sk_state = RXRPC_CLIENT_UNBOUND;
    474		break;
    475	case RXRPC_CLIENT_UNBOUND:
    476	case RXRPC_CLIENT_BOUND:
    477		break;
    478	default:
    479		ret = -EBUSY;
    480		goto error;
    481	}
    482
    483	rx->connect_srx = *srx;
    484	set_bit(RXRPC_SOCK_CONNECTED, &rx->flags);
    485	ret = 0;
    486
    487error:
    488	release_sock(&rx->sk);
    489	return ret;
    490}
    491
    492/*
    493 * send a message through an RxRPC socket
    494 * - in a client this does a number of things:
    495 *   - finds/sets up a connection for the security specified (if any)
    496 *   - initiates a call (ID in control data)
    497 *   - ends the request phase of a call (if MSG_MORE is not set)
    498 *   - sends a call data packet
    499 *   - may send an abort (abort code in control data)
    500 */
    501static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
    502{
    503	struct rxrpc_local *local;
    504	struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
    505	int ret;
    506
    507	_enter(",{%d},,%zu", rx->sk.sk_state, len);
    508
    509	if (m->msg_flags & MSG_OOB)
    510		return -EOPNOTSUPP;
    511
    512	if (m->msg_name) {
    513		ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen);
    514		if (ret < 0) {
    515			_leave(" = %d [bad addr]", ret);
    516			return ret;
    517		}
    518	}
    519
    520	lock_sock(&rx->sk);
    521
    522	switch (rx->sk.sk_state) {
    523	case RXRPC_UNBOUND:
    524	case RXRPC_CLIENT_UNBOUND:
    525		rx->srx.srx_family = AF_RXRPC;
    526		rx->srx.srx_service = 0;
    527		rx->srx.transport_type = SOCK_DGRAM;
    528		rx->srx.transport.family = rx->family;
    529		switch (rx->family) {
    530		case AF_INET:
    531			rx->srx.transport_len = sizeof(struct sockaddr_in);
    532			break;
    533#ifdef CONFIG_AF_RXRPC_IPV6
    534		case AF_INET6:
    535			rx->srx.transport_len = sizeof(struct sockaddr_in6);
    536			break;
    537#endif
    538		default:
    539			ret = -EAFNOSUPPORT;
    540			goto error_unlock;
    541		}
    542		local = rxrpc_lookup_local(sock_net(sock->sk), &rx->srx);
    543		if (IS_ERR(local)) {
    544			ret = PTR_ERR(local);
    545			goto error_unlock;
    546		}
    547
    548		rx->local = local;
    549		rx->sk.sk_state = RXRPC_CLIENT_BOUND;
    550		fallthrough;
    551
    552	case RXRPC_CLIENT_BOUND:
    553		if (!m->msg_name &&
    554		    test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) {
    555			m->msg_name = &rx->connect_srx;
    556			m->msg_namelen = sizeof(rx->connect_srx);
    557		}
    558		fallthrough;
    559	case RXRPC_SERVER_BOUND:
    560	case RXRPC_SERVER_LISTENING:
    561		ret = rxrpc_do_sendmsg(rx, m, len);
    562		/* The socket has been unlocked */
    563		goto out;
    564	default:
    565		ret = -EINVAL;
    566		goto error_unlock;
    567	}
    568
    569error_unlock:
    570	release_sock(&rx->sk);
    571out:
    572	_leave(" = %d", ret);
    573	return ret;
    574}
    575
    576int rxrpc_sock_set_min_security_level(struct sock *sk, unsigned int val)
    577{
    578	if (sk->sk_state != RXRPC_UNBOUND)
    579		return -EISCONN;
    580	if (val > RXRPC_SECURITY_MAX)
    581		return -EINVAL;
    582	lock_sock(sk);
    583	rxrpc_sk(sk)->min_sec_level = val;
    584	release_sock(sk);
    585	return 0;
    586}
    587EXPORT_SYMBOL(rxrpc_sock_set_min_security_level);
    588
    589/*
    590 * set RxRPC socket options
    591 */
    592static int rxrpc_setsockopt(struct socket *sock, int level, int optname,
    593			    sockptr_t optval, unsigned int optlen)
    594{
    595	struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
    596	unsigned int min_sec_level;
    597	u16 service_upgrade[2];
    598	int ret;
    599
    600	_enter(",%d,%d,,%d", level, optname, optlen);
    601
    602	lock_sock(&rx->sk);
    603	ret = -EOPNOTSUPP;
    604
    605	if (level == SOL_RXRPC) {
    606		switch (optname) {
    607		case RXRPC_EXCLUSIVE_CONNECTION:
    608			ret = -EINVAL;
    609			if (optlen != 0)
    610				goto error;
    611			ret = -EISCONN;
    612			if (rx->sk.sk_state != RXRPC_UNBOUND)
    613				goto error;
    614			rx->exclusive = true;
    615			goto success;
    616
    617		case RXRPC_SECURITY_KEY:
    618			ret = -EINVAL;
    619			if (rx->key)
    620				goto error;
    621			ret = -EISCONN;
    622			if (rx->sk.sk_state != RXRPC_UNBOUND)
    623				goto error;
    624			ret = rxrpc_request_key(rx, optval, optlen);
    625			goto error;
    626
    627		case RXRPC_SECURITY_KEYRING:
    628			ret = -EINVAL;
    629			if (rx->key)
    630				goto error;
    631			ret = -EISCONN;
    632			if (rx->sk.sk_state != RXRPC_UNBOUND)
    633				goto error;
    634			ret = rxrpc_server_keyring(rx, optval, optlen);
    635			goto error;
    636
    637		case RXRPC_MIN_SECURITY_LEVEL:
    638			ret = -EINVAL;
    639			if (optlen != sizeof(unsigned int))
    640				goto error;
    641			ret = -EISCONN;
    642			if (rx->sk.sk_state != RXRPC_UNBOUND)
    643				goto error;
    644			ret = copy_from_sockptr(&min_sec_level, optval,
    645				       sizeof(unsigned int));
    646			if (ret < 0)
    647				goto error;
    648			ret = -EINVAL;
    649			if (min_sec_level > RXRPC_SECURITY_MAX)
    650				goto error;
    651			rx->min_sec_level = min_sec_level;
    652			goto success;
    653
    654		case RXRPC_UPGRADEABLE_SERVICE:
    655			ret = -EINVAL;
    656			if (optlen != sizeof(service_upgrade) ||
    657			    rx->service_upgrade.from != 0)
    658				goto error;
    659			ret = -EISCONN;
    660			if (rx->sk.sk_state != RXRPC_SERVER_BOUND2)
    661				goto error;
    662			ret = -EFAULT;
    663			if (copy_from_sockptr(service_upgrade, optval,
    664					   sizeof(service_upgrade)) != 0)
    665				goto error;
    666			ret = -EINVAL;
    667			if ((service_upgrade[0] != rx->srx.srx_service ||
    668			     service_upgrade[1] != rx->second_service) &&
    669			    (service_upgrade[0] != rx->second_service ||
    670			     service_upgrade[1] != rx->srx.srx_service))
    671				goto error;
    672			rx->service_upgrade.from = service_upgrade[0];
    673			rx->service_upgrade.to = service_upgrade[1];
    674			goto success;
    675
    676		default:
    677			break;
    678		}
    679	}
    680
    681success:
    682	ret = 0;
    683error:
    684	release_sock(&rx->sk);
    685	return ret;
    686}
    687
    688/*
    689 * Get socket options.
    690 */
    691static int rxrpc_getsockopt(struct socket *sock, int level, int optname,
    692			    char __user *optval, int __user *_optlen)
    693{
    694	int optlen;
    695
    696	if (level != SOL_RXRPC)
    697		return -EOPNOTSUPP;
    698
    699	if (get_user(optlen, _optlen))
    700		return -EFAULT;
    701
    702	switch (optname) {
    703	case RXRPC_SUPPORTED_CMSG:
    704		if (optlen < sizeof(int))
    705			return -ETOOSMALL;
    706		if (put_user(RXRPC__SUPPORTED - 1, (int __user *)optval) ||
    707		    put_user(sizeof(int), _optlen))
    708			return -EFAULT;
    709		return 0;
    710
    711	default:
    712		return -EOPNOTSUPP;
    713	}
    714}
    715
    716/*
    717 * permit an RxRPC socket to be polled
    718 */
    719static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
    720			       poll_table *wait)
    721{
    722	struct sock *sk = sock->sk;
    723	struct rxrpc_sock *rx = rxrpc_sk(sk);
    724	__poll_t mask;
    725
    726	sock_poll_wait(file, sock, wait);
    727	mask = 0;
    728
    729	/* the socket is readable if there are any messages waiting on the Rx
    730	 * queue */
    731	if (!list_empty(&rx->recvmsg_q))
    732		mask |= EPOLLIN | EPOLLRDNORM;
    733
    734	/* the socket is writable if there is space to add new data to the
    735	 * socket; there is no guarantee that any particular call in progress
    736	 * on the socket may have space in the Tx ACK window */
    737	if (rxrpc_writable(sk))
    738		mask |= EPOLLOUT | EPOLLWRNORM;
    739
    740	return mask;
    741}
    742
    743/*
    744 * create an RxRPC socket
    745 */
    746static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
    747			int kern)
    748{
    749	struct rxrpc_net *rxnet;
    750	struct rxrpc_sock *rx;
    751	struct sock *sk;
    752
    753	_enter("%p,%d", sock, protocol);
    754
    755	/* we support transport protocol UDP/UDP6 only */
    756	if (protocol != PF_INET &&
    757	    IS_ENABLED(CONFIG_AF_RXRPC_IPV6) && protocol != PF_INET6)
    758		return -EPROTONOSUPPORT;
    759
    760	if (sock->type != SOCK_DGRAM)
    761		return -ESOCKTNOSUPPORT;
    762
    763	sock->ops = &rxrpc_rpc_ops;
    764	sock->state = SS_UNCONNECTED;
    765
    766	sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto, kern);
    767	if (!sk)
    768		return -ENOMEM;
    769
    770	sock_init_data(sock, sk);
    771	sock_set_flag(sk, SOCK_RCU_FREE);
    772	sk->sk_state		= RXRPC_UNBOUND;
    773	sk->sk_write_space	= rxrpc_write_space;
    774	sk->sk_max_ack_backlog	= 0;
    775	sk->sk_destruct		= rxrpc_sock_destructor;
    776
    777	rx = rxrpc_sk(sk);
    778	rx->family = protocol;
    779	rx->calls = RB_ROOT;
    780
    781	spin_lock_init(&rx->incoming_lock);
    782	INIT_LIST_HEAD(&rx->sock_calls);
    783	INIT_LIST_HEAD(&rx->to_be_accepted);
    784	INIT_LIST_HEAD(&rx->recvmsg_q);
    785	rwlock_init(&rx->recvmsg_lock);
    786	rwlock_init(&rx->call_lock);
    787	memset(&rx->srx, 0, sizeof(rx->srx));
    788
    789	rxnet = rxrpc_net(sock_net(&rx->sk));
    790	timer_reduce(&rxnet->peer_keepalive_timer, jiffies + 1);
    791
    792	_leave(" = 0 [%p]", rx);
    793	return 0;
    794}
    795
    796/*
    797 * Kill all the calls on a socket and shut it down.
    798 */
    799static int rxrpc_shutdown(struct socket *sock, int flags)
    800{
    801	struct sock *sk = sock->sk;
    802	struct rxrpc_sock *rx = rxrpc_sk(sk);
    803	int ret = 0;
    804
    805	_enter("%p,%d", sk, flags);
    806
    807	if (flags != SHUT_RDWR)
    808		return -EOPNOTSUPP;
    809	if (sk->sk_state == RXRPC_CLOSE)
    810		return -ESHUTDOWN;
    811
    812	lock_sock(sk);
    813
    814	spin_lock_bh(&sk->sk_receive_queue.lock);
    815	if (sk->sk_state < RXRPC_CLOSE) {
    816		sk->sk_state = RXRPC_CLOSE;
    817		sk->sk_shutdown = SHUTDOWN_MASK;
    818	} else {
    819		ret = -ESHUTDOWN;
    820	}
    821	spin_unlock_bh(&sk->sk_receive_queue.lock);
    822
    823	rxrpc_discard_prealloc(rx);
    824
    825	release_sock(sk);
    826	return ret;
    827}
    828
    829/*
    830 * RxRPC socket destructor
    831 */
    832static void rxrpc_sock_destructor(struct sock *sk)
    833{
    834	_enter("%p", sk);
    835
    836	rxrpc_purge_queue(&sk->sk_receive_queue);
    837
    838	WARN_ON(refcount_read(&sk->sk_wmem_alloc));
    839	WARN_ON(!sk_unhashed(sk));
    840	WARN_ON(sk->sk_socket);
    841
    842	if (!sock_flag(sk, SOCK_DEAD)) {
    843		printk("Attempt to release alive rxrpc socket: %p\n", sk);
    844		return;
    845	}
    846}
    847
    848/*
    849 * release an RxRPC socket
    850 */
    851static int rxrpc_release_sock(struct sock *sk)
    852{
    853	struct rxrpc_sock *rx = rxrpc_sk(sk);
    854
    855	_enter("%p{%d,%d}", sk, sk->sk_state, refcount_read(&sk->sk_refcnt));
    856
    857	/* declare the socket closed for business */
    858	sock_orphan(sk);
    859	sk->sk_shutdown = SHUTDOWN_MASK;
    860
    861	/* We want to kill off all connections from a service socket
    862	 * as fast as possible because we can't share these; client
    863	 * sockets, on the other hand, can share an endpoint.
    864	 */
    865	switch (sk->sk_state) {
    866	case RXRPC_SERVER_BOUND:
    867	case RXRPC_SERVER_BOUND2:
    868	case RXRPC_SERVER_LISTENING:
    869	case RXRPC_SERVER_LISTEN_DISABLED:
    870		rx->local->service_closed = true;
    871		break;
    872	}
    873
    874	spin_lock_bh(&sk->sk_receive_queue.lock);
    875	sk->sk_state = RXRPC_CLOSE;
    876	spin_unlock_bh(&sk->sk_receive_queue.lock);
    877
    878	if (rx->local && rcu_access_pointer(rx->local->service) == rx) {
    879		write_lock(&rx->local->services_lock);
    880		rcu_assign_pointer(rx->local->service, NULL);
    881		write_unlock(&rx->local->services_lock);
    882	}
    883
    884	/* try to flush out this socket */
    885	rxrpc_discard_prealloc(rx);
    886	rxrpc_release_calls_on_socket(rx);
    887	flush_workqueue(rxrpc_workqueue);
    888	rxrpc_purge_queue(&sk->sk_receive_queue);
    889
    890	rxrpc_unuse_local(rx->local);
    891	rxrpc_put_local(rx->local);
    892	rx->local = NULL;
    893	key_put(rx->key);
    894	rx->key = NULL;
    895	key_put(rx->securities);
    896	rx->securities = NULL;
    897	sock_put(sk);
    898
    899	_leave(" = 0");
    900	return 0;
    901}
    902
    903/*
    904 * release an RxRPC BSD socket on close() or equivalent
    905 */
    906static int rxrpc_release(struct socket *sock)
    907{
    908	struct sock *sk = sock->sk;
    909
    910	_enter("%p{%p}", sock, sk);
    911
    912	if (!sk)
    913		return 0;
    914
    915	sock->sk = NULL;
    916
    917	return rxrpc_release_sock(sk);
    918}
    919
    920/*
    921 * RxRPC network protocol
    922 */
    923static const struct proto_ops rxrpc_rpc_ops = {
    924	.family		= PF_RXRPC,
    925	.owner		= THIS_MODULE,
    926	.release	= rxrpc_release,
    927	.bind		= rxrpc_bind,
    928	.connect	= rxrpc_connect,
    929	.socketpair	= sock_no_socketpair,
    930	.accept		= sock_no_accept,
    931	.getname	= sock_no_getname,
    932	.poll		= rxrpc_poll,
    933	.ioctl		= sock_no_ioctl,
    934	.listen		= rxrpc_listen,
    935	.shutdown	= rxrpc_shutdown,
    936	.setsockopt	= rxrpc_setsockopt,
    937	.getsockopt	= rxrpc_getsockopt,
    938	.sendmsg	= rxrpc_sendmsg,
    939	.recvmsg	= rxrpc_recvmsg,
    940	.mmap		= sock_no_mmap,
    941	.sendpage	= sock_no_sendpage,
    942};
    943
    944static struct proto rxrpc_proto = {
    945	.name		= "RXRPC",
    946	.owner		= THIS_MODULE,
    947	.obj_size	= sizeof(struct rxrpc_sock),
    948	.max_header	= sizeof(struct rxrpc_wire_header),
    949};
    950
    951static const struct net_proto_family rxrpc_family_ops = {
    952	.family	= PF_RXRPC,
    953	.create = rxrpc_create,
    954	.owner	= THIS_MODULE,
    955};
    956
    957/*
    958 * initialise and register the RxRPC protocol
    959 */
    960static int __init af_rxrpc_init(void)
    961{
    962	int ret = -1;
    963	unsigned int tmp;
    964
    965	BUILD_BUG_ON(sizeof(struct rxrpc_skb_priv) > sizeof_field(struct sk_buff, cb));
    966
    967	get_random_bytes(&tmp, sizeof(tmp));
    968	tmp &= 0x3fffffff;
    969	if (tmp == 0)
    970		tmp = 1;
    971	idr_set_cursor(&rxrpc_client_conn_ids, tmp);
    972
    973	ret = -ENOMEM;
    974	rxrpc_call_jar = kmem_cache_create(
    975		"rxrpc_call_jar", sizeof(struct rxrpc_call), 0,
    976		SLAB_HWCACHE_ALIGN, NULL);
    977	if (!rxrpc_call_jar) {
    978		pr_notice("Failed to allocate call jar\n");
    979		goto error_call_jar;
    980	}
    981
    982	rxrpc_workqueue = alloc_workqueue("krxrpcd", 0, 1);
    983	if (!rxrpc_workqueue) {
    984		pr_notice("Failed to allocate work queue\n");
    985		goto error_work_queue;
    986	}
    987
    988	ret = rxrpc_init_security();
    989	if (ret < 0) {
    990		pr_crit("Cannot initialise security\n");
    991		goto error_security;
    992	}
    993
    994	ret = register_pernet_device(&rxrpc_net_ops);
    995	if (ret)
    996		goto error_pernet;
    997
    998	ret = proto_register(&rxrpc_proto, 1);
    999	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
   1030error_sysctls:
   1031	unregister_key_type(&key_type_rxrpc_s);
   1032error_key_type_s:
   1033	unregister_key_type(&key_type_rxrpc);
   1034error_key_type:
   1035	sock_unregister(PF_RXRPC);
   1036error_sock:
   1037	proto_unregister(&rxrpc_proto);
   1038error_proto:
   1039	unregister_pernet_device(&rxrpc_net_ops);
   1040error_pernet:
   1041	rxrpc_exit_security();
   1042error_security:
   1043	destroy_workqueue(rxrpc_workqueue);
   1044error_work_queue:
   1045	kmem_cache_destroy(rxrpc_call_jar);
   1046error_call_jar:
   1047	return ret;
   1048}
   1049
   1050/*
   1051 * unregister the RxRPC protocol
   1052 */
   1053static 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	/* Make sure the local and peer records pinned by any dying connections
   1066	 * are released.
   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
   1077module_init(af_rxrpc_init);
   1078module_exit(af_rxrpc_exit);