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

sendmsg.c (22340B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/* AF_RXRPC sendmsg() implementation.
      3 *
      4 * Copyright (C) 2007, 2016 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/net.h>
     11#include <linux/gfp.h>
     12#include <linux/skbuff.h>
     13#include <linux/export.h>
     14#include <linux/sched/signal.h>
     15
     16#include <net/sock.h>
     17#include <net/af_rxrpc.h>
     18#include "ar-internal.h"
     19
     20/*
     21 * Return true if there's sufficient Tx queue space.
     22 */
     23static bool rxrpc_check_tx_space(struct rxrpc_call *call, rxrpc_seq_t *_tx_win)
     24{
     25	unsigned int win_size =
     26		min_t(unsigned int, call->tx_winsize,
     27		      call->cong_cwnd + call->cong_extra);
     28	rxrpc_seq_t tx_win = READ_ONCE(call->tx_hard_ack);
     29
     30	if (_tx_win)
     31		*_tx_win = tx_win;
     32	return call->tx_top - tx_win < win_size;
     33}
     34
     35/*
     36 * Wait for space to appear in the Tx queue or a signal to occur.
     37 */
     38static int rxrpc_wait_for_tx_window_intr(struct rxrpc_sock *rx,
     39					 struct rxrpc_call *call,
     40					 long *timeo)
     41{
     42	for (;;) {
     43		set_current_state(TASK_INTERRUPTIBLE);
     44		if (rxrpc_check_tx_space(call, NULL))
     45			return 0;
     46
     47		if (call->state >= RXRPC_CALL_COMPLETE)
     48			return call->error;
     49
     50		if (signal_pending(current))
     51			return sock_intr_errno(*timeo);
     52
     53		trace_rxrpc_transmit(call, rxrpc_transmit_wait);
     54		mutex_unlock(&call->user_mutex);
     55		*timeo = schedule_timeout(*timeo);
     56		if (mutex_lock_interruptible(&call->user_mutex) < 0)
     57			return sock_intr_errno(*timeo);
     58	}
     59}
     60
     61/*
     62 * Wait for space to appear in the Tx queue uninterruptibly, but with
     63 * a timeout of 2*RTT if no progress was made and a signal occurred.
     64 */
     65static int rxrpc_wait_for_tx_window_waitall(struct rxrpc_sock *rx,
     66					    struct rxrpc_call *call)
     67{
     68	rxrpc_seq_t tx_start, tx_win;
     69	signed long rtt, timeout;
     70
     71	rtt = READ_ONCE(call->peer->srtt_us) >> 3;
     72	rtt = usecs_to_jiffies(rtt) * 2;
     73	if (rtt < 2)
     74		rtt = 2;
     75
     76	timeout = rtt;
     77	tx_start = READ_ONCE(call->tx_hard_ack);
     78
     79	for (;;) {
     80		set_current_state(TASK_UNINTERRUPTIBLE);
     81
     82		tx_win = READ_ONCE(call->tx_hard_ack);
     83		if (rxrpc_check_tx_space(call, &tx_win))
     84			return 0;
     85
     86		if (call->state >= RXRPC_CALL_COMPLETE)
     87			return call->error;
     88
     89		if (timeout == 0 &&
     90		    tx_win == tx_start && signal_pending(current))
     91			return -EINTR;
     92
     93		if (tx_win != tx_start) {
     94			timeout = rtt;
     95			tx_start = tx_win;
     96		}
     97
     98		trace_rxrpc_transmit(call, rxrpc_transmit_wait);
     99		timeout = schedule_timeout(timeout);
    100	}
    101}
    102
    103/*
    104 * Wait for space to appear in the Tx queue uninterruptibly.
    105 */
    106static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx,
    107					    struct rxrpc_call *call,
    108					    long *timeo)
    109{
    110	for (;;) {
    111		set_current_state(TASK_UNINTERRUPTIBLE);
    112		if (rxrpc_check_tx_space(call, NULL))
    113			return 0;
    114
    115		if (call->state >= RXRPC_CALL_COMPLETE)
    116			return call->error;
    117
    118		trace_rxrpc_transmit(call, rxrpc_transmit_wait);
    119		*timeo = schedule_timeout(*timeo);
    120	}
    121}
    122
    123/*
    124 * wait for space to appear in the transmit/ACK window
    125 * - caller holds the socket locked
    126 */
    127static int rxrpc_wait_for_tx_window(struct rxrpc_sock *rx,
    128				    struct rxrpc_call *call,
    129				    long *timeo,
    130				    bool waitall)
    131{
    132	DECLARE_WAITQUEUE(myself, current);
    133	int ret;
    134
    135	_enter(",{%u,%u,%u}",
    136	       call->tx_hard_ack, call->tx_top, call->tx_winsize);
    137
    138	add_wait_queue(&call->waitq, &myself);
    139
    140	switch (call->interruptibility) {
    141	case RXRPC_INTERRUPTIBLE:
    142		if (waitall)
    143			ret = rxrpc_wait_for_tx_window_waitall(rx, call);
    144		else
    145			ret = rxrpc_wait_for_tx_window_intr(rx, call, timeo);
    146		break;
    147	case RXRPC_PREINTERRUPTIBLE:
    148	case RXRPC_UNINTERRUPTIBLE:
    149	default:
    150		ret = rxrpc_wait_for_tx_window_nonintr(rx, call, timeo);
    151		break;
    152	}
    153
    154	remove_wait_queue(&call->waitq, &myself);
    155	set_current_state(TASK_RUNNING);
    156	_leave(" = %d", ret);
    157	return ret;
    158}
    159
    160/*
    161 * Schedule an instant Tx resend.
    162 */
    163static inline void rxrpc_instant_resend(struct rxrpc_call *call, int ix)
    164{
    165	spin_lock_bh(&call->lock);
    166
    167	if (call->state < RXRPC_CALL_COMPLETE) {
    168		call->rxtx_annotations[ix] =
    169			(call->rxtx_annotations[ix] & RXRPC_TX_ANNO_LAST) |
    170			RXRPC_TX_ANNO_RETRANS;
    171		if (!test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events))
    172			rxrpc_queue_call(call);
    173	}
    174
    175	spin_unlock_bh(&call->lock);
    176}
    177
    178/*
    179 * Notify the owner of the call that the transmit phase is ended and the last
    180 * packet has been queued.
    181 */
    182static void rxrpc_notify_end_tx(struct rxrpc_sock *rx, struct rxrpc_call *call,
    183				rxrpc_notify_end_tx_t notify_end_tx)
    184{
    185	if (notify_end_tx)
    186		notify_end_tx(&rx->sk, call, call->user_call_ID);
    187}
    188
    189/*
    190 * Queue a DATA packet for transmission, set the resend timeout and send
    191 * the packet immediately.  Returns the error from rxrpc_send_data_packet()
    192 * in case the caller wants to do something with it.
    193 */
    194static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
    195			      struct sk_buff *skb, bool last,
    196			      rxrpc_notify_end_tx_t notify_end_tx)
    197{
    198	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
    199	unsigned long now;
    200	rxrpc_seq_t seq = sp->hdr.seq;
    201	int ret, ix;
    202	u8 annotation = RXRPC_TX_ANNO_UNACK;
    203
    204	_net("queue skb %p [%d]", skb, seq);
    205
    206	ASSERTCMP(seq, ==, call->tx_top + 1);
    207
    208	if (last)
    209		annotation |= RXRPC_TX_ANNO_LAST;
    210
    211	/* We have to set the timestamp before queueing as the retransmit
    212	 * algorithm can see the packet as soon as we queue it.
    213	 */
    214	skb->tstamp = ktime_get_real();
    215
    216	ix = seq & RXRPC_RXTX_BUFF_MASK;
    217	rxrpc_get_skb(skb, rxrpc_skb_got);
    218	call->rxtx_annotations[ix] = annotation;
    219	smp_wmb();
    220	call->rxtx_buffer[ix] = skb;
    221	call->tx_top = seq;
    222	if (last)
    223		trace_rxrpc_transmit(call, rxrpc_transmit_queue_last);
    224	else
    225		trace_rxrpc_transmit(call, rxrpc_transmit_queue);
    226
    227	if (last || call->state == RXRPC_CALL_SERVER_ACK_REQUEST) {
    228		_debug("________awaiting reply/ACK__________");
    229		write_lock_bh(&call->state_lock);
    230		switch (call->state) {
    231		case RXRPC_CALL_CLIENT_SEND_REQUEST:
    232			call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY;
    233			rxrpc_notify_end_tx(rx, call, notify_end_tx);
    234			break;
    235		case RXRPC_CALL_SERVER_ACK_REQUEST:
    236			call->state = RXRPC_CALL_SERVER_SEND_REPLY;
    237			now = jiffies;
    238			WRITE_ONCE(call->ack_at, now + MAX_JIFFY_OFFSET);
    239			if (call->ackr_reason == RXRPC_ACK_DELAY)
    240				call->ackr_reason = 0;
    241			trace_rxrpc_timer(call, rxrpc_timer_init_for_send_reply, now);
    242			if (!last)
    243				break;
    244			fallthrough;
    245		case RXRPC_CALL_SERVER_SEND_REPLY:
    246			call->state = RXRPC_CALL_SERVER_AWAIT_ACK;
    247			rxrpc_notify_end_tx(rx, call, notify_end_tx);
    248			break;
    249		default:
    250			break;
    251		}
    252		write_unlock_bh(&call->state_lock);
    253	}
    254
    255	if (seq == 1 && rxrpc_is_client_call(call))
    256		rxrpc_expose_client_call(call);
    257
    258	ret = rxrpc_send_data_packet(call, skb, false);
    259	if (ret < 0) {
    260		switch (ret) {
    261		case -ENETUNREACH:
    262		case -EHOSTUNREACH:
    263		case -ECONNREFUSED:
    264			rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
    265						  0, ret);
    266			goto out;
    267		}
    268		_debug("need instant resend %d", ret);
    269		rxrpc_instant_resend(call, ix);
    270	} else {
    271		unsigned long now = jiffies;
    272		unsigned long resend_at = now + call->peer->rto_j;
    273
    274		WRITE_ONCE(call->resend_at, resend_at);
    275		rxrpc_reduce_call_timer(call, resend_at, now,
    276					rxrpc_timer_set_for_send);
    277	}
    278
    279out:
    280	rxrpc_free_skb(skb, rxrpc_skb_freed);
    281	_leave(" = %d", ret);
    282	return ret;
    283}
    284
    285/*
    286 * send data through a socket
    287 * - must be called in process context
    288 * - The caller holds the call user access mutex, but not the socket lock.
    289 */
    290static int rxrpc_send_data(struct rxrpc_sock *rx,
    291			   struct rxrpc_call *call,
    292			   struct msghdr *msg, size_t len,
    293			   rxrpc_notify_end_tx_t notify_end_tx)
    294{
    295	struct rxrpc_skb_priv *sp;
    296	struct sk_buff *skb;
    297	struct sock *sk = &rx->sk;
    298	long timeo;
    299	bool more;
    300	int ret, copied;
    301
    302	timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
    303
    304	/* this should be in poll */
    305	sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
    306
    307	if (sk->sk_shutdown & SEND_SHUTDOWN)
    308		return -EPIPE;
    309
    310	more = msg->msg_flags & MSG_MORE;
    311
    312	if (call->tx_total_len != -1) {
    313		if (len > call->tx_total_len)
    314			return -EMSGSIZE;
    315		if (!more && len != call->tx_total_len)
    316			return -EMSGSIZE;
    317	}
    318
    319	skb = call->tx_pending;
    320	call->tx_pending = NULL;
    321	rxrpc_see_skb(skb, rxrpc_skb_seen);
    322
    323	copied = 0;
    324	do {
    325		/* Check to see if there's a ping ACK to reply to. */
    326		if (call->ackr_reason == RXRPC_ACK_PING_RESPONSE)
    327			rxrpc_send_ack_packet(call, false, NULL);
    328
    329		if (!skb) {
    330			size_t remain, bufsize, chunk, offset;
    331
    332			_debug("alloc");
    333
    334			if (!rxrpc_check_tx_space(call, NULL)) {
    335				ret = -EAGAIN;
    336				if (msg->msg_flags & MSG_DONTWAIT)
    337					goto maybe_error;
    338				ret = rxrpc_wait_for_tx_window(rx, call,
    339							       &timeo,
    340							       msg->msg_flags & MSG_WAITALL);
    341				if (ret < 0)
    342					goto maybe_error;
    343			}
    344
    345			/* Work out the maximum size of a packet.  Assume that
    346			 * the security header is going to be in the padded
    347			 * region (enc blocksize), but the trailer is not.
    348			 */
    349			remain = more ? INT_MAX : msg_data_left(msg);
    350			ret = call->conn->security->how_much_data(call, remain,
    351								  &bufsize, &chunk, &offset);
    352			if (ret < 0)
    353				goto maybe_error;
    354
    355			_debug("SIZE: %zu/%zu @%zu", chunk, bufsize, offset);
    356
    357			/* create a buffer that we can retain until it's ACK'd */
    358			skb = sock_alloc_send_skb(
    359				sk, bufsize, msg->msg_flags & MSG_DONTWAIT, &ret);
    360			if (!skb)
    361				goto maybe_error;
    362
    363			sp = rxrpc_skb(skb);
    364			sp->rx_flags |= RXRPC_SKB_TX_BUFFER;
    365			rxrpc_new_skb(skb, rxrpc_skb_new);
    366
    367			_debug("ALLOC SEND %p", skb);
    368
    369			ASSERTCMP(skb->mark, ==, 0);
    370
    371			__skb_put(skb, offset);
    372
    373			sp->remain = chunk;
    374			if (sp->remain > skb_tailroom(skb))
    375				sp->remain = skb_tailroom(skb);
    376
    377			_net("skb: hr %d, tr %d, hl %d, rm %d",
    378			       skb_headroom(skb),
    379			       skb_tailroom(skb),
    380			       skb_headlen(skb),
    381			       sp->remain);
    382
    383			skb->ip_summed = CHECKSUM_UNNECESSARY;
    384		}
    385
    386		_debug("append");
    387		sp = rxrpc_skb(skb);
    388
    389		/* append next segment of data to the current buffer */
    390		if (msg_data_left(msg) > 0) {
    391			int copy = skb_tailroom(skb);
    392			ASSERTCMP(copy, >, 0);
    393			if (copy > msg_data_left(msg))
    394				copy = msg_data_left(msg);
    395			if (copy > sp->remain)
    396				copy = sp->remain;
    397
    398			_debug("add");
    399			ret = skb_add_data(skb, &msg->msg_iter, copy);
    400			_debug("added");
    401			if (ret < 0)
    402				goto efault;
    403			sp->remain -= copy;
    404			skb->mark += copy;
    405			copied += copy;
    406			if (call->tx_total_len != -1)
    407				call->tx_total_len -= copy;
    408		}
    409
    410		/* check for the far side aborting the call or a network error
    411		 * occurring */
    412		if (call->state == RXRPC_CALL_COMPLETE)
    413			goto call_terminated;
    414
    415		/* add the packet to the send queue if it's now full */
    416		if (sp->remain <= 0 ||
    417		    (msg_data_left(msg) == 0 && !more)) {
    418			struct rxrpc_connection *conn = call->conn;
    419			uint32_t seq;
    420
    421			seq = call->tx_top + 1;
    422
    423			sp->hdr.seq	= seq;
    424			sp->hdr._rsvd	= 0;
    425			sp->hdr.flags	= conn->out_clientflag;
    426
    427			if (msg_data_left(msg) == 0 && !more)
    428				sp->hdr.flags |= RXRPC_LAST_PACKET;
    429			else if (call->tx_top - call->tx_hard_ack <
    430				 call->tx_winsize)
    431				sp->hdr.flags |= RXRPC_MORE_PACKETS;
    432
    433			ret = call->security->secure_packet(call, skb, skb->mark);
    434			if (ret < 0)
    435				goto out;
    436
    437			ret = rxrpc_queue_packet(rx, call, skb,
    438						 !msg_data_left(msg) && !more,
    439						 notify_end_tx);
    440			/* Should check for failure here */
    441			skb = NULL;
    442		}
    443	} while (msg_data_left(msg) > 0);
    444
    445success:
    446	ret = copied;
    447	if (READ_ONCE(call->state) == RXRPC_CALL_COMPLETE) {
    448		read_lock_bh(&call->state_lock);
    449		if (call->error < 0)
    450			ret = call->error;
    451		read_unlock_bh(&call->state_lock);
    452	}
    453out:
    454	call->tx_pending = skb;
    455	_leave(" = %d", ret);
    456	return ret;
    457
    458call_terminated:
    459	rxrpc_free_skb(skb, rxrpc_skb_freed);
    460	_leave(" = %d", call->error);
    461	return call->error;
    462
    463maybe_error:
    464	if (copied)
    465		goto success;
    466	goto out;
    467
    468efault:
    469	ret = -EFAULT;
    470	goto out;
    471}
    472
    473/*
    474 * extract control messages from the sendmsg() control buffer
    475 */
    476static int rxrpc_sendmsg_cmsg(struct msghdr *msg, struct rxrpc_send_params *p)
    477{
    478	struct cmsghdr *cmsg;
    479	bool got_user_ID = false;
    480	int len;
    481
    482	if (msg->msg_controllen == 0)
    483		return -EINVAL;
    484
    485	for_each_cmsghdr(cmsg, msg) {
    486		if (!CMSG_OK(msg, cmsg))
    487			return -EINVAL;
    488
    489		len = cmsg->cmsg_len - sizeof(struct cmsghdr);
    490		_debug("CMSG %d, %d, %d",
    491		       cmsg->cmsg_level, cmsg->cmsg_type, len);
    492
    493		if (cmsg->cmsg_level != SOL_RXRPC)
    494			continue;
    495
    496		switch (cmsg->cmsg_type) {
    497		case RXRPC_USER_CALL_ID:
    498			if (msg->msg_flags & MSG_CMSG_COMPAT) {
    499				if (len != sizeof(u32))
    500					return -EINVAL;
    501				p->call.user_call_ID = *(u32 *)CMSG_DATA(cmsg);
    502			} else {
    503				if (len != sizeof(unsigned long))
    504					return -EINVAL;
    505				p->call.user_call_ID = *(unsigned long *)
    506					CMSG_DATA(cmsg);
    507			}
    508			got_user_ID = true;
    509			break;
    510
    511		case RXRPC_ABORT:
    512			if (p->command != RXRPC_CMD_SEND_DATA)
    513				return -EINVAL;
    514			p->command = RXRPC_CMD_SEND_ABORT;
    515			if (len != sizeof(p->abort_code))
    516				return -EINVAL;
    517			p->abort_code = *(unsigned int *)CMSG_DATA(cmsg);
    518			if (p->abort_code == 0)
    519				return -EINVAL;
    520			break;
    521
    522		case RXRPC_CHARGE_ACCEPT:
    523			if (p->command != RXRPC_CMD_SEND_DATA)
    524				return -EINVAL;
    525			p->command = RXRPC_CMD_CHARGE_ACCEPT;
    526			if (len != 0)
    527				return -EINVAL;
    528			break;
    529
    530		case RXRPC_EXCLUSIVE_CALL:
    531			p->exclusive = true;
    532			if (len != 0)
    533				return -EINVAL;
    534			break;
    535
    536		case RXRPC_UPGRADE_SERVICE:
    537			p->upgrade = true;
    538			if (len != 0)
    539				return -EINVAL;
    540			break;
    541
    542		case RXRPC_TX_LENGTH:
    543			if (p->call.tx_total_len != -1 || len != sizeof(__s64))
    544				return -EINVAL;
    545			p->call.tx_total_len = *(__s64 *)CMSG_DATA(cmsg);
    546			if (p->call.tx_total_len < 0)
    547				return -EINVAL;
    548			break;
    549
    550		case RXRPC_SET_CALL_TIMEOUT:
    551			if (len & 3 || len < 4 || len > 12)
    552				return -EINVAL;
    553			memcpy(&p->call.timeouts, CMSG_DATA(cmsg), len);
    554			p->call.nr_timeouts = len / 4;
    555			if (p->call.timeouts.hard > INT_MAX / HZ)
    556				return -ERANGE;
    557			if (p->call.nr_timeouts >= 2 && p->call.timeouts.idle > 60 * 60 * 1000)
    558				return -ERANGE;
    559			if (p->call.nr_timeouts >= 3 && p->call.timeouts.normal > 60 * 60 * 1000)
    560				return -ERANGE;
    561			break;
    562
    563		default:
    564			return -EINVAL;
    565		}
    566	}
    567
    568	if (!got_user_ID)
    569		return -EINVAL;
    570	if (p->call.tx_total_len != -1 && p->command != RXRPC_CMD_SEND_DATA)
    571		return -EINVAL;
    572	_leave(" = 0");
    573	return 0;
    574}
    575
    576/*
    577 * Create a new client call for sendmsg().
    578 * - Called with the socket lock held, which it must release.
    579 * - If it returns a call, the call's lock will need releasing by the caller.
    580 */
    581static struct rxrpc_call *
    582rxrpc_new_client_call_for_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg,
    583				  struct rxrpc_send_params *p)
    584	__releases(&rx->sk.sk_lock.slock)
    585	__acquires(&call->user_mutex)
    586{
    587	struct rxrpc_conn_parameters cp;
    588	struct rxrpc_call *call;
    589	struct key *key;
    590
    591	DECLARE_SOCKADDR(struct sockaddr_rxrpc *, srx, msg->msg_name);
    592
    593	_enter("");
    594
    595	if (!msg->msg_name) {
    596		release_sock(&rx->sk);
    597		return ERR_PTR(-EDESTADDRREQ);
    598	}
    599
    600	key = rx->key;
    601	if (key && !rx->key->payload.data[0])
    602		key = NULL;
    603
    604	memset(&cp, 0, sizeof(cp));
    605	cp.local		= rx->local;
    606	cp.key			= rx->key;
    607	cp.security_level	= rx->min_sec_level;
    608	cp.exclusive		= rx->exclusive | p->exclusive;
    609	cp.upgrade		= p->upgrade;
    610	cp.service_id		= srx->srx_service;
    611	call = rxrpc_new_client_call(rx, &cp, srx, &p->call, GFP_KERNEL,
    612				     atomic_inc_return(&rxrpc_debug_id));
    613	/* The socket is now unlocked */
    614
    615	rxrpc_put_peer(cp.peer);
    616	_leave(" = %p\n", call);
    617	return call;
    618}
    619
    620/*
    621 * send a message forming part of a client call through an RxRPC socket
    622 * - caller holds the socket locked
    623 * - the socket may be either a client socket or a server socket
    624 */
    625int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len)
    626	__releases(&rx->sk.sk_lock.slock)
    627	__releases(&call->user_mutex)
    628{
    629	enum rxrpc_call_state state;
    630	struct rxrpc_call *call;
    631	unsigned long now, j;
    632	int ret;
    633
    634	struct rxrpc_send_params p = {
    635		.call.tx_total_len	= -1,
    636		.call.user_call_ID	= 0,
    637		.call.nr_timeouts	= 0,
    638		.call.interruptibility	= RXRPC_INTERRUPTIBLE,
    639		.abort_code		= 0,
    640		.command		= RXRPC_CMD_SEND_DATA,
    641		.exclusive		= false,
    642		.upgrade		= false,
    643	};
    644
    645	_enter("");
    646
    647	ret = rxrpc_sendmsg_cmsg(msg, &p);
    648	if (ret < 0)
    649		goto error_release_sock;
    650
    651	if (p.command == RXRPC_CMD_CHARGE_ACCEPT) {
    652		ret = -EINVAL;
    653		if (rx->sk.sk_state != RXRPC_SERVER_LISTENING)
    654			goto error_release_sock;
    655		ret = rxrpc_user_charge_accept(rx, p.call.user_call_ID);
    656		goto error_release_sock;
    657	}
    658
    659	call = rxrpc_find_call_by_user_ID(rx, p.call.user_call_ID);
    660	if (!call) {
    661		ret = -EBADSLT;
    662		if (p.command != RXRPC_CMD_SEND_DATA)
    663			goto error_release_sock;
    664		call = rxrpc_new_client_call_for_sendmsg(rx, msg, &p);
    665		/* The socket is now unlocked... */
    666		if (IS_ERR(call))
    667			return PTR_ERR(call);
    668		/* ... and we have the call lock. */
    669		ret = 0;
    670		if (READ_ONCE(call->state) == RXRPC_CALL_COMPLETE)
    671			goto out_put_unlock;
    672	} else {
    673		switch (READ_ONCE(call->state)) {
    674		case RXRPC_CALL_UNINITIALISED:
    675		case RXRPC_CALL_CLIENT_AWAIT_CONN:
    676		case RXRPC_CALL_SERVER_PREALLOC:
    677		case RXRPC_CALL_SERVER_SECURING:
    678			rxrpc_put_call(call, rxrpc_call_put);
    679			ret = -EBUSY;
    680			goto error_release_sock;
    681		default:
    682			break;
    683		}
    684
    685		ret = mutex_lock_interruptible(&call->user_mutex);
    686		release_sock(&rx->sk);
    687		if (ret < 0) {
    688			ret = -ERESTARTSYS;
    689			goto error_put;
    690		}
    691
    692		if (p.call.tx_total_len != -1) {
    693			ret = -EINVAL;
    694			if (call->tx_total_len != -1 ||
    695			    call->tx_pending ||
    696			    call->tx_top != 0)
    697				goto error_put;
    698			call->tx_total_len = p.call.tx_total_len;
    699		}
    700	}
    701
    702	switch (p.call.nr_timeouts) {
    703	case 3:
    704		j = msecs_to_jiffies(p.call.timeouts.normal);
    705		if (p.call.timeouts.normal > 0 && j == 0)
    706			j = 1;
    707		WRITE_ONCE(call->next_rx_timo, j);
    708		fallthrough;
    709	case 2:
    710		j = msecs_to_jiffies(p.call.timeouts.idle);
    711		if (p.call.timeouts.idle > 0 && j == 0)
    712			j = 1;
    713		WRITE_ONCE(call->next_req_timo, j);
    714		fallthrough;
    715	case 1:
    716		if (p.call.timeouts.hard > 0) {
    717			j = msecs_to_jiffies(p.call.timeouts.hard);
    718			now = jiffies;
    719			j += now;
    720			WRITE_ONCE(call->expect_term_by, j);
    721			rxrpc_reduce_call_timer(call, j, now,
    722						rxrpc_timer_set_for_hard);
    723		}
    724		break;
    725	}
    726
    727	state = READ_ONCE(call->state);
    728	_debug("CALL %d USR %lx ST %d on CONN %p",
    729	       call->debug_id, call->user_call_ID, state, call->conn);
    730
    731	if (state >= RXRPC_CALL_COMPLETE) {
    732		/* it's too late for this call */
    733		ret = -ESHUTDOWN;
    734	} else if (p.command == RXRPC_CMD_SEND_ABORT) {
    735		ret = 0;
    736		if (rxrpc_abort_call("CMD", call, 0, p.abort_code, -ECONNABORTED))
    737			ret = rxrpc_send_abort_packet(call);
    738	} else if (p.command != RXRPC_CMD_SEND_DATA) {
    739		ret = -EINVAL;
    740	} else if (rxrpc_is_client_call(call) &&
    741		   state != RXRPC_CALL_CLIENT_SEND_REQUEST) {
    742		/* request phase complete for this client call */
    743		ret = -EPROTO;
    744	} else if (rxrpc_is_service_call(call) &&
    745		   state != RXRPC_CALL_SERVER_ACK_REQUEST &&
    746		   state != RXRPC_CALL_SERVER_SEND_REPLY) {
    747		/* Reply phase not begun or not complete for service call. */
    748		ret = -EPROTO;
    749	} else {
    750		ret = rxrpc_send_data(rx, call, msg, len, NULL);
    751	}
    752
    753out_put_unlock:
    754	mutex_unlock(&call->user_mutex);
    755error_put:
    756	rxrpc_put_call(call, rxrpc_call_put);
    757	_leave(" = %d", ret);
    758	return ret;
    759
    760error_release_sock:
    761	release_sock(&rx->sk);
    762	return ret;
    763}
    764
    765/**
    766 * rxrpc_kernel_send_data - Allow a kernel service to send data on a call
    767 * @sock: The socket the call is on
    768 * @call: The call to send data through
    769 * @msg: The data to send
    770 * @len: The amount of data to send
    771 * @notify_end_tx: Notification that the last packet is queued.
    772 *
    773 * Allow a kernel service to send data on a call.  The call must be in an state
    774 * appropriate to sending data.  No control data should be supplied in @msg,
    775 * nor should an address be supplied.  MSG_MORE should be flagged if there's
    776 * more data to come, otherwise this data will end the transmission phase.
    777 */
    778int rxrpc_kernel_send_data(struct socket *sock, struct rxrpc_call *call,
    779			   struct msghdr *msg, size_t len,
    780			   rxrpc_notify_end_tx_t notify_end_tx)
    781{
    782	int ret;
    783
    784	_enter("{%d,%s},", call->debug_id, rxrpc_call_states[call->state]);
    785
    786	ASSERTCMP(msg->msg_name, ==, NULL);
    787	ASSERTCMP(msg->msg_control, ==, NULL);
    788
    789	mutex_lock(&call->user_mutex);
    790
    791	_debug("CALL %d USR %lx ST %d on CONN %p",
    792	       call->debug_id, call->user_call_ID, call->state, call->conn);
    793
    794	switch (READ_ONCE(call->state)) {
    795	case RXRPC_CALL_CLIENT_SEND_REQUEST:
    796	case RXRPC_CALL_SERVER_ACK_REQUEST:
    797	case RXRPC_CALL_SERVER_SEND_REPLY:
    798		ret = rxrpc_send_data(rxrpc_sk(sock->sk), call, msg, len,
    799				      notify_end_tx);
    800		break;
    801	case RXRPC_CALL_COMPLETE:
    802		read_lock_bh(&call->state_lock);
    803		ret = call->error;
    804		read_unlock_bh(&call->state_lock);
    805		break;
    806	default:
    807		/* Request phase complete for this client call */
    808		trace_rxrpc_rx_eproto(call, 0, tracepoint_string("late_send"));
    809		ret = -EPROTO;
    810		break;
    811	}
    812
    813	mutex_unlock(&call->user_mutex);
    814	_leave(" = %d", ret);
    815	return ret;
    816}
    817EXPORT_SYMBOL(rxrpc_kernel_send_data);
    818
    819/**
    820 * rxrpc_kernel_abort_call - Allow a kernel service to abort a call
    821 * @sock: The socket the call is on
    822 * @call: The call to be aborted
    823 * @abort_code: The abort code to stick into the ABORT packet
    824 * @error: Local error value
    825 * @why: 3-char string indicating why.
    826 *
    827 * Allow a kernel service to abort a call, if it's still in an abortable state
    828 * and return true if the call was aborted, false if it was already complete.
    829 */
    830bool rxrpc_kernel_abort_call(struct socket *sock, struct rxrpc_call *call,
    831			     u32 abort_code, int error, const char *why)
    832{
    833	bool aborted;
    834
    835	_enter("{%d},%d,%d,%s", call->debug_id, abort_code, error, why);
    836
    837	mutex_lock(&call->user_mutex);
    838
    839	aborted = rxrpc_abort_call(why, call, 0, abort_code, error);
    840	if (aborted)
    841		rxrpc_send_abort_packet(call);
    842
    843	mutex_unlock(&call->user_mutex);
    844	return aborted;
    845}
    846EXPORT_SYMBOL(rxrpc_kernel_abort_call);
    847
    848/**
    849 * rxrpc_kernel_set_tx_length - Set the total Tx length on a call
    850 * @sock: The socket the call is on
    851 * @call: The call to be informed
    852 * @tx_total_len: The amount of data to be transmitted for this call
    853 *
    854 * Allow a kernel service to set the total transmit length on a call.  This
    855 * allows buffer-to-packet encrypt-and-copy to be performed.
    856 *
    857 * This function is primarily for use for setting the reply length since the
    858 * request length can be set when beginning the call.
    859 */
    860void rxrpc_kernel_set_tx_length(struct socket *sock, struct rxrpc_call *call,
    861				s64 tx_total_len)
    862{
    863	WARN_ON(call->tx_total_len != -1);
    864	call->tx_total_len = tx_total_len;
    865}
    866EXPORT_SYMBOL(rxrpc_kernel_set_tx_length);