input.c 26.9 KB
Newer Older
1 2
/* RxRPC packet reception
 *
3
 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved.
4 5 6 7 8 9 10 11
 * Written by David Howells (dhowells@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */

12 13
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

14 15 16 17 18 19 20 21
#include <linux/module.h>
#include <linux/net.h>
#include <linux/skbuff.h>
#include <linux/errqueue.h>
#include <linux/udp.h>
#include <linux/in.h>
#include <linux/in6.h>
#include <linux/icmp.h>
22
#include <linux/gfp.h>
23 24 25
#include <net/sock.h>
#include <net/af_rxrpc.h>
#include <net/ip.h>
26
#include <net/udp.h>
27
#include <net/net_namespace.h>
28 29
#include "ar-internal.h"

30 31 32 33 34 35 36 37 38
static void rxrpc_proto_abort(const char *why,
			      struct rxrpc_call *call, rxrpc_seq_t seq)
{
	if (rxrpc_abort_call(why, call, seq, RX_PROTOCOL_ERROR, EBADMSG)) {
		set_bit(RXRPC_CALL_EV_ABORT, &call->events);
		rxrpc_queue_call(call);
	}
}

39 40 41 42 43 44 45 46
/*
 * Ping the other end to fill our RTT cache and to retrieve the rwind
 * and MTU parameters.
 */
static void rxrpc_send_ping(struct rxrpc_call *call, struct sk_buff *skb,
			    int skew)
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
47
	ktime_t now = skb->tstamp;
48

49 50 51
	if (call->peer->rtt_usage < 3 ||
	    ktime_before(ktime_add_ms(call->peer->rtt_last_req, 1000), now))
		rxrpc_propose_ACK(call, RXRPC_ACK_PING, skew, sp->hdr.serial,
52 53
				  true, true,
				  rxrpc_propose_ack_ping_for_params);
54 55
}

56
/*
57
 * Apply a hard ACK by advancing the Tx window.
58
 */
59 60
static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
				   struct rxrpc_ack_summary *summary)
61
{
62 63
	struct sk_buff *skb, *list = NULL;
	int ix;
64
	u8 annotation;
65

66 67 68 69 70 71 72
	if (call->acks_lowest_nak == call->tx_hard_ack) {
		call->acks_lowest_nak = to;
	} else if (before_eq(call->acks_lowest_nak, to)) {
		summary->new_low_nack = true;
		call->acks_lowest_nak = to;
	}

73
	spin_lock(&call->lock);
74

75 76 77 78
	while (before(call->tx_hard_ack, to)) {
		call->tx_hard_ack++;
		ix = call->tx_hard_ack & RXRPC_RXTX_BUFF_MASK;
		skb = call->rxtx_buffer[ix];
79
		annotation = call->rxtx_annotations[ix];
D
David Howells 已提交
80
		rxrpc_see_skb(skb, rxrpc_skb_tx_rotated);
81 82 83 84
		call->rxtx_buffer[ix] = NULL;
		call->rxtx_annotations[ix] = 0;
		skb->next = list;
		list = skb;
85 86 87

		if (annotation & RXRPC_TX_ANNO_LAST)
			set_bit(RXRPC_CALL_TX_LAST, &call->flags);
88 89
		if ((annotation & RXRPC_TX_ANNO_MASK) != RXRPC_TX_ANNO_ACK)
			summary->nr_rot_new_acks++;
90
	}
91

92
	spin_unlock(&call->lock);
93

94 95 96
	trace_rxrpc_transmit(call, (test_bit(RXRPC_CALL_TX_LAST, &call->flags) ?
				    rxrpc_transmit_rotate_last :
				    rxrpc_transmit_rotate));
97 98
	wake_up(&call->waitq);

99 100 101 102
	while (list) {
		skb = list;
		list = skb->next;
		skb->next = NULL;
D
David Howells 已提交
103
		rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
104
	}
105
}
106

107 108 109 110 111 112
/*
 * End the transmission phase of a call.
 *
 * This occurs when we get an ACKALL packet, the first DATA packet of a reply,
 * or a final ACK packet.
 */
113 114
static bool rxrpc_end_tx_phase(struct rxrpc_call *call, bool reply_begun,
			       const char *abort_why)
115
{
116

117
	ASSERT(test_bit(RXRPC_CALL_TX_LAST, &call->flags));
118

119
	write_lock(&call->state_lock);
120

121
	switch (call->state) {
122
	case RXRPC_CALL_CLIENT_SEND_REQUEST:
123
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
124 125 126 127
		if (reply_begun)
			call->state = RXRPC_CALL_CLIENT_RECV_REPLY;
		else
			call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY;
128
		break;
129

130 131 132 133
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		__rxrpc_call_completed(call);
		rxrpc_notify_socket(call);
		break;
134 135 136

	default:
		goto bad_state;
137 138
	}

139
	write_unlock(&call->state_lock);
140
	if (call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY) {
141 142
		rxrpc_propose_ACK(call, RXRPC_ACK_IDLE, 0, 0, false, true,
				  rxrpc_propose_ack_client_tx_end);
143 144 145 146
		trace_rxrpc_transmit(call, rxrpc_transmit_await_reply);
	} else {
		trace_rxrpc_transmit(call, rxrpc_transmit_end);
	}
147 148
	_leave(" = ok");
	return true;
149 150 151 152 153 154 155 156 157 158 159 160 161

bad_state:
	write_unlock(&call->state_lock);
	kdebug("end_tx %s", rxrpc_call_states[call->state]);
	rxrpc_proto_abort(abort_why, call, call->tx_top);
	return false;
}

/*
 * Begin the reply reception phase of a call.
 */
static bool rxrpc_receiving_reply(struct rxrpc_call *call)
{
162
	struct rxrpc_ack_summary summary = { 0 };
163 164
	rxrpc_seq_t top = READ_ONCE(call->tx_top);

165 166 167 168 169 170 171 172 173
	if (call->ackr_reason) {
		spin_lock_bh(&call->lock);
		call->ackr_reason = 0;
		call->resend_at = call->expire_at;
		call->ack_at = call->expire_at;
		spin_unlock_bh(&call->lock);
		rxrpc_set_timer(call, rxrpc_timer_init_for_reply);
	}

174
	if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags))
175
		rxrpc_rotate_tx_window(call, top, &summary);
176 177 178 179 180 181 182 183
	if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
		rxrpc_proto_abort("TXL", call, top);
		return false;
	}
	if (!rxrpc_end_tx_phase(call, true, "ETD"))
		return false;
	call->tx_phase = false;
	return true;
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
}

/*
 * Scan a jumbo packet to validate its structure and to work out how many
 * subpackets it contains.
 *
 * A jumbo packet is a collection of consecutive packets glued together with
 * little headers between that indicate how to change the initial header for
 * each subpacket.
 *
 * RXRPC_JUMBO_PACKET must be set on all but the last subpacket - and all but
 * the last are RXRPC_JUMBO_DATALEN in size.  The last subpacket may be of any
 * size.
 */
static bool rxrpc_validate_jumbo(struct sk_buff *skb)
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	unsigned int offset = sp->offset;
202
	unsigned int len = skb->len;
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
	int nr_jumbo = 1;
	u8 flags = sp->hdr.flags;

	do {
		nr_jumbo++;
		if (len - offset < RXRPC_JUMBO_SUBPKTLEN)
			goto protocol_error;
		if (flags & RXRPC_LAST_PACKET)
			goto protocol_error;
		offset += RXRPC_JUMBO_DATALEN;
		if (skb_copy_bits(skb, offset, &flags, 1) < 0)
			goto protocol_error;
		offset += sizeof(struct rxrpc_jumbo_header);
	} while (flags & RXRPC_JUMBO_PACKET);

	sp->nr_jumbo = nr_jumbo;
	return true;
220

221 222
protocol_error:
	return false;
223 224 225
}

/*
226 227 228 229 230 231 232 233 234 235 236
 * Handle reception of a duplicate packet.
 *
 * We have to take care to avoid an attack here whereby we're given a series of
 * jumbograms, each with a sequence number one before the preceding one and
 * filled up to maximum UDP size.  If they never send us the first packet in
 * the sequence, they can cause us to have to hold on to around 2MiB of kernel
 * space until the call times out.
 *
 * We limit the space usage by only accepting three duplicate jumbo packets per
 * call.  After that, we tell the other side we're no longer accepting jumbos
 * (that information is encoded in the ACK packet).
237
 */
238
static void rxrpc_input_dup_data(struct rxrpc_call *call, rxrpc_seq_t seq,
239
				 u8 annotation, bool *_jumbo_bad)
240
{
241 242 243
	/* Discard normal packets that are duplicates. */
	if (annotation == 0)
		return;
244

245 246 247 248
	/* Skip jumbo subpackets that are duplicates.  When we've had three or
	 * more partially duplicate jumbo packets, we refuse to take any more
	 * jumbos for this call.
	 */
249 250 251
	if (!*_jumbo_bad) {
		call->nr_jumbo_bad++;
		*_jumbo_bad = true;
252 253
	}
}
254

255 256 257 258 259 260 261 262 263 264 265
/*
 * Process a DATA packet, adding the packet to the Rx ring.
 */
static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb,
			     u16 skew)
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	unsigned int offset = sp->offset;
	unsigned int ix;
	rxrpc_serial_t serial = sp->hdr.serial, ack_serial = 0;
	rxrpc_seq_t seq = sp->hdr.seq, hard_ack;
266
	bool immediate_ack = false, jumbo_bad = false, queued;
267 268
	u16 len;
	u8 ack = 0, flags, annotation = 0;
269

270
	_enter("{%u,%u},{%u,%u}",
271
	       call->rx_hard_ack, call->rx_top, skb->len, seq);
272

273 274
	_proto("Rx DATA %%%u { #%u f=%02x }",
	       sp->hdr.serial, seq, sp->hdr.flags);
275

276 277
	if (call->state >= RXRPC_CALL_COMPLETE)
		return;
278

279 280 281
	/* Received data implicitly ACKs all of the request packets we sent
	 * when we're acting as a client.
	 */
282 283 284
	if ((call->state == RXRPC_CALL_CLIENT_SEND_REQUEST ||
	     call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY) &&
	    !rxrpc_receiving_reply(call))
285
		return;
286

287
	call->ackr_prev_seq = seq;
288

289 290
	hard_ack = READ_ONCE(call->rx_hard_ack);
	if (after(seq, hard_ack + call->rx_winsize)) {
291
		ack = RXRPC_ACK_EXCEEDS_WINDOW;
292 293
		ack_serial = serial;
		goto ack;
294 295
	}

296 297
	flags = sp->hdr.flags;
	if (flags & RXRPC_JUMBO_PACKET) {
298
		if (call->nr_jumbo_bad > 3) {
299 300 301
			ack = RXRPC_ACK_NOSPACE;
			ack_serial = serial;
			goto ack;
302
		}
303
		annotation = 1;
304 305
	}

306 307 308
next_subpacket:
	queued = false;
	ix = seq & RXRPC_RXTX_BUFF_MASK;
309
	len = skb->len;
310 311 312 313
	if (flags & RXRPC_JUMBO_PACKET)
		len = RXRPC_JUMBO_DATALEN;

	if (flags & RXRPC_LAST_PACKET) {
314
		if (test_bit(RXRPC_CALL_RX_LAST, &call->flags) &&
315 316 317 318 319 320
		    seq != call->rx_top)
			return rxrpc_proto_abort("LSN", call, seq);
	} else {
		if (test_bit(RXRPC_CALL_RX_LAST, &call->flags) &&
		    after_eq(seq, call->rx_top))
			return rxrpc_proto_abort("LSA", call, seq);
321 322
	}

323 324 325 326 327 328 329 330 331 332 333 334
	if (before_eq(seq, hard_ack)) {
		ack = RXRPC_ACK_DUPLICATE;
		ack_serial = serial;
		goto skip;
	}

	if (flags & RXRPC_REQUEST_ACK && !ack) {
		ack = RXRPC_ACK_REQUESTED;
		ack_serial = serial;
	}

	if (call->rxtx_buffer[ix]) {
335
		rxrpc_input_dup_data(call, seq, annotation, &jumbo_bad);
336 337 338
		if (ack != RXRPC_ACK_DUPLICATE) {
			ack = RXRPC_ACK_DUPLICATE;
			ack_serial = serial;
339
		}
340 341
		immediate_ack = true;
		goto skip;
342 343
	}

344 345 346 347 348 349 350 351
	/* Queue the packet.  We use a couple of memory barriers here as need
	 * to make sure that rx_top is perceived to be set after the buffer
	 * pointer and that the buffer pointer is set after the annotation and
	 * the skb data.
	 *
	 * Barriers against rxrpc_recvmsg_data() and rxrpc_rotate_rx_window()
	 * and also rxrpc_fill_out_ack().
	 */
D
David Howells 已提交
352
	rxrpc_get_skb(skb, rxrpc_skb_rx_got);
353 354 355
	call->rxtx_annotations[ix] = annotation;
	smp_wmb();
	call->rxtx_buffer[ix] = skb;
356
	if (after(seq, call->rx_top)) {
357
		smp_store_release(&call->rx_top, seq);
358 359 360 361 362 363 364 365
	} else if (before(seq, call->rx_top)) {
		/* Send an immediate ACK if we fill in a hole */
		if (!ack) {
			ack = RXRPC_ACK_DELAY;
			ack_serial = serial;
		}
		immediate_ack = true;
	}
366
	if (flags & RXRPC_LAST_PACKET) {
367
		set_bit(RXRPC_CALL_RX_LAST, &call->flags);
368 369 370 371
		trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
	} else {
		trace_rxrpc_receive(call, rxrpc_receive_queue, serial, seq);
	}
372 373 374 375 376 377 378 379 380
	queued = true;

	if (after_eq(seq, call->rx_expect_next)) {
		if (after(seq, call->rx_expect_next)) {
			_net("OOS %u > %u", seq, call->rx_expect_next);
			ack = RXRPC_ACK_OUT_OF_SEQUENCE;
			ack_serial = serial;
		}
		call->rx_expect_next = seq + 1;
381 382
	}

383 384 385 386 387 388 389 390 391 392 393
skip:
	offset += len;
	if (flags & RXRPC_JUMBO_PACKET) {
		if (skb_copy_bits(skb, offset, &flags, 1) < 0)
			return rxrpc_proto_abort("XJF", call, seq);
		offset += sizeof(struct rxrpc_jumbo_header);
		seq++;
		serial++;
		annotation++;
		if (flags & RXRPC_JUMBO_PACKET)
			annotation |= RXRPC_RX_ANNO_JLAST;
394 395 396 397 398 399 400 401 402
		if (after(seq, hard_ack + call->rx_winsize)) {
			ack = RXRPC_ACK_EXCEEDS_WINDOW;
			ack_serial = serial;
			if (!jumbo_bad) {
				call->nr_jumbo_bad++;
				jumbo_bad = true;
			}
			goto ack;
		}
403 404 405 406

		_proto("Rx DATA Jumbo %%%u", serial);
		goto next_subpacket;
	}
407

408 409 410 411
	if (queued && flags & RXRPC_LAST_PACKET && !ack) {
		ack = RXRPC_ACK_DELAY;
		ack_serial = serial;
	}
412

413 414 415
ack:
	if (ack)
		rxrpc_propose_ACK(call, ack, skew, ack_serial,
416 417
				  immediate_ack, true,
				  rxrpc_propose_ack_input_data);
418

419 420 421
	if (sp->hdr.seq == READ_ONCE(call->rx_hard_ack) + 1)
		rxrpc_notify_socket(call);
	_leave(" [queued]");
422 423
}

424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455
/*
 * Process a requested ACK.
 */
static void rxrpc_input_requested_ack(struct rxrpc_call *call,
				      ktime_t resp_time,
				      rxrpc_serial_t orig_serial,
				      rxrpc_serial_t ack_serial)
{
	struct rxrpc_skb_priv *sp;
	struct sk_buff *skb;
	ktime_t sent_at;
	int ix;

	for (ix = 0; ix < RXRPC_RXTX_BUFF_SIZE; ix++) {
		skb = call->rxtx_buffer[ix];
		if (!skb)
			continue;

		sp = rxrpc_skb(skb);
		if (sp->hdr.serial != orig_serial)
			continue;
		smp_rmb();
		sent_at = skb->tstamp;
		goto found;
	}
	return;

found:
	rxrpc_peer_add_rtt(call, rxrpc_rtt_rx_requested_ack,
			   orig_serial, ack_serial, sent_at, resp_time);
}

456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
/*
 * Process a ping response.
 */
static void rxrpc_input_ping_response(struct rxrpc_call *call,
				      ktime_t resp_time,
				      rxrpc_serial_t orig_serial,
				      rxrpc_serial_t ack_serial)
{
	rxrpc_serial_t ping_serial;
	ktime_t ping_time;

	ping_time = call->ackr_ping_time;
	smp_rmb();
	ping_serial = call->ackr_ping;

	if (!test_bit(RXRPC_CALL_PINGING, &call->flags) ||
	    before(orig_serial, ping_serial))
		return;
	clear_bit(RXRPC_CALL_PINGING, &call->flags);
	if (after(orig_serial, ping_serial))
		return;

	rxrpc_peer_add_rtt(call, rxrpc_rtt_rx_ping_response,
			   orig_serial, ack_serial, ping_time, resp_time);
}

482
/*
483
 * Process the extra information that may be appended to an ACK packet
484
 */
485 486
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
				struct rxrpc_ackinfo *ackinfo)
487
{
488 489 490
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	struct rxrpc_peer *peer;
	unsigned int mtu;
491
	u32 rwind = ntohl(ackinfo->rwind);
492 493 494 495

	_proto("Rx ACK %%%u Info { rx=%u max=%u rwin=%u jm=%u }",
	       sp->hdr.serial,
	       ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU),
496
	       rwind, ntohl(ackinfo->jumbo_max));
497

498 499 500
	if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
		rwind = RXRPC_RXTX_BUFF_SIZE - 1;
	call->tx_winsize = rwind;
501 502 503 504 505 506 507 508 509 510 511 512

	mtu = min(ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU));

	peer = call->peer;
	if (mtu < peer->maxdata) {
		spin_lock_bh(&peer->lock);
		peer->maxdata = mtu;
		peer->mtu = mtu + peer->hdrsize;
		spin_unlock_bh(&peer->lock);
		_net("Net MTU %u (maxdata %u)", peer->mtu, peer->maxdata);
	}
}
513

514 515 516 517 518 519 520 521 522 523
/*
 * Process individual soft ACKs.
 *
 * Each ACK in the array corresponds to one packet and can be either an ACK or
 * a NAK.  If we get find an explicitly NAK'd packet we resend immediately;
 * packets that lie beyond the end of the ACK list are scheduled for resend by
 * the timer on the basis that the peer might just not have processed them at
 * the time the ACK was sent.
 */
static void rxrpc_input_soft_acks(struct rxrpc_call *call, u8 *acks,
524 525
				  rxrpc_seq_t seq, int nr_acks,
				  struct rxrpc_ack_summary *summary)
526 527 528
{
	bool resend = false;
	int ix;
D
David Howells 已提交
529
	u8 annotation, anno_type;
530 531 532

	for (; nr_acks > 0; nr_acks--, seq++) {
		ix = seq & RXRPC_RXTX_BUFF_MASK;
D
David Howells 已提交
533 534 535
		annotation = call->rxtx_annotations[ix];
		anno_type = annotation & RXRPC_TX_ANNO_MASK;
		annotation &= ~RXRPC_TX_ANNO_MASK;
536
		switch (*acks++) {
537
		case RXRPC_ACK_TYPE_ACK:
538
			summary->nr_acks++;
D
David Howells 已提交
539 540
			if (anno_type == RXRPC_TX_ANNO_ACK)
				continue;
541
			summary->nr_new_acks++;
D
David Howells 已提交
542 543
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_ACK | annotation;
544 545
			break;
		case RXRPC_ACK_TYPE_NACK:
546 547 548 549 550 551
			if (!summary->nr_nacks &&
			    call->acks_lowest_nak != seq) {
				call->acks_lowest_nak = seq;
				summary->new_low_nack = true;
			}
			summary->nr_nacks++;
D
David Howells 已提交
552
			if (anno_type == RXRPC_TX_ANNO_NAK)
553
				continue;
554
			summary->nr_new_nacks++;
555 556
			if (anno_type == RXRPC_TX_ANNO_RETRANS)
				continue;
D
David Howells 已提交
557 558
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_NAK | annotation;
559 560 561 562
			resend = true;
			break;
		default:
			return rxrpc_proto_abort("SFT", call, 0);
563 564
		}
	}
565 566 567 568

	if (resend &&
	    !test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events))
		rxrpc_queue_call(call);
569 570 571
}

/*
572 573 574 575 576 577 578 579
 * Process an ACK packet.
 *
 * ack.firstPacket is the sequence number of the first soft-ACK'd/NAK'd packet
 * in the ACK array.  Anything before that is hard-ACK'd and may be discarded.
 *
 * A hard-ACK means that a packet has been processed and may be discarded; a
 * soft-ACK means that the packet may be discarded and retransmission
 * requested.  A phase is complete when all packets are hard-ACK'd.
580
 */
581 582
static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
			    u16 skew)
583
{
584
	struct rxrpc_ack_summary summary = { 0 };
585
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
586 587 588 589 590
	union {
		struct rxrpc_ackpacket ack;
		struct rxrpc_ackinfo info;
		u8 acks[RXRPC_MAXACKS];
	} buf;
591
	rxrpc_serial_t acked_serial;
592 593 594 595 596 597 598 599
	rxrpc_seq_t first_soft_ack, hard_ack;
	int nr_acks, offset;

	_enter("");

	if (skb_copy_bits(skb, sp->offset, &buf.ack, sizeof(buf.ack)) < 0) {
		_debug("extraction failure");
		return rxrpc_proto_abort("XAK", call, 0);
600
	}
601 602
	sp->offset += sizeof(buf.ack);

603
	acked_serial = ntohl(buf.ack.serial);
604 605 606
	first_soft_ack = ntohl(buf.ack.firstPacket);
	hard_ack = first_soft_ack - 1;
	nr_acks = buf.ack.nAcks;
607 608
	summary.ack_reason = (buf.ack.reason < RXRPC_ACK__INVALID ?
			      buf.ack.reason : RXRPC_ACK__INVALID);
609

610
	trace_rxrpc_rx_ack(call, first_soft_ack, summary.ack_reason, nr_acks);
611

612 613 614 615 616
	_proto("Rx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }",
	       sp->hdr.serial,
	       ntohs(buf.ack.maxSkew),
	       first_soft_ack,
	       ntohl(buf.ack.previousPacket),
617
	       acked_serial,
618
	       rxrpc_ack_names[summary.ack_reason],
619 620
	       buf.ack.nAcks);

621 622 623
	if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
		rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
624 625 626
	if (buf.ack.reason == RXRPC_ACK_REQUESTED)
		rxrpc_input_requested_ack(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
627

628 629 630
	if (buf.ack.reason == RXRPC_ACK_PING) {
		_proto("Rx ACK %%%u PING Request", sp->hdr.serial);
		rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE,
631 632
				  skew, sp->hdr.serial, true, true,
				  rxrpc_propose_ack_respond_to_ping);
633
	} else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
634
		rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
635 636
				  skew, sp->hdr.serial, true, true,
				  rxrpc_propose_ack_respond_to_ack);
637 638
	}

639
	offset = sp->offset + nr_acks + 3;
640
	if (skb->len >= offset + sizeof(buf.info)) {
641 642 643 644
		if (skb_copy_bits(skb, offset, &buf.info, sizeof(buf.info)) < 0)
			return rxrpc_proto_abort("XAI", call, 0);
		rxrpc_input_ackinfo(call, skb, &buf.info);
	}
645

646 647
	if (first_soft_ack == 0)
		return rxrpc_proto_abort("AK0", call, 0);
648

649 650 651 652 653 654 655
	/* Ignore ACKs unless we are or have just been transmitting. */
	switch (call->state) {
	case RXRPC_CALL_CLIENT_SEND_REQUEST:
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
	case RXRPC_CALL_SERVER_SEND_REPLY:
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		break;
656
	default:
657 658
		return;
	}
659

660
	/* Discard any out-of-order or duplicate ACKs. */
661
	if (before_eq(sp->hdr.serial, call->acks_latest)) {
662 663 664 665 666
		_debug("discard ACK %d <= %d",
		       sp->hdr.serial, call->acks_latest);
		return;
	}
	call->acks_latest = sp->hdr.serial;
667

668 669 670
	if (before(hard_ack, call->tx_hard_ack) ||
	    after(hard_ack, call->tx_top))
		return rxrpc_proto_abort("AKW", call, 0);
671 672
	if (nr_acks > call->tx_top - hard_ack)
		return rxrpc_proto_abort("AKN", call, 0);
673

674
	if (after(hard_ack, call->tx_hard_ack))
675
		rxrpc_rotate_tx_window(call, hard_ack, &summary);
676

677 678 679
	if (nr_acks > 0) {
		if (skb_copy_bits(skb, sp->offset, buf.acks, nr_acks) < 0)
			return rxrpc_proto_abort("XSA", call, 0);
680 681
		rxrpc_input_soft_acks(call, buf.acks, first_soft_ack, nr_acks,
				      &summary);
682 683 684 685
	}

	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
		rxrpc_end_tx_phase(call, false, "ETA");
686
		return;
687
	}
688

689 690 691 692 693 694
	if (call->rxtx_annotations[call->tx_top & RXRPC_RXTX_BUFF_MASK] &
	    RXRPC_TX_ANNO_LAST &&
	    summary.nr_acks == call->tx_top - hard_ack)
		rxrpc_propose_ACK(call, RXRPC_ACK_PING, skew, sp->hdr.serial,
				  false, true,
				  rxrpc_propose_ack_ping_for_lost_reply);
695 696 697
}

/*
698
 * Process an ACKALL packet.
699
 */
700
static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
701
{
702
	struct rxrpc_ack_summary summary = { 0 };
703
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
704

705
	_proto("Rx ACKALL %%%u", sp->hdr.serial);
706

707
	rxrpc_rotate_tx_window(call, call->tx_top, &summary);
708 709
	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags))
		rxrpc_end_tx_phase(call, false, "ETL");
710
}
711

712 713 714 715 716 717 718 719
/*
 * Process an ABORT packet.
 */
static void rxrpc_input_abort(struct rxrpc_call *call, struct sk_buff *skb)
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	__be32 wtmp;
	u32 abort_code = RX_CALL_DEAD;
720

721
	_enter("");
722

723 724 725
	if (skb->len >= 4 &&
	    skb_copy_bits(skb, sp->offset, &wtmp, sizeof(wtmp)) >= 0)
		abort_code = ntohl(wtmp);
726

727
	_proto("Rx ABORT %%%u { %x }", sp->hdr.serial, abort_code);
728

729 730 731
	if (rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
				      abort_code, ECONNABORTED))
		rxrpc_notify_socket(call);
732 733 734
}

/*
735
 * Process an incoming call packet.
736
 */
737 738
static void rxrpc_input_call_packet(struct rxrpc_call *call,
				    struct sk_buff *skb, u16 skew)
739
{
740
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
741

742
	_enter("%p,%p", call, skb);
743

744 745 746 747
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_DATA:
		rxrpc_input_data(call, skb, skew);
		break;
748

749 750
	case RXRPC_PACKET_TYPE_ACK:
		rxrpc_input_ack(call, skb, skew);
751 752
		break;

753 754
	case RXRPC_PACKET_TYPE_BUSY:
		_proto("Rx BUSY %%%u", sp->hdr.serial);
755

756 757 758 759 760
		/* Just ignore BUSY packets from the server; the retry and
		 * lifespan timers will take care of business.  BUSY packets
		 * from the client don't make sense.
		 */
		break;
761

762 763 764
	case RXRPC_PACKET_TYPE_ABORT:
		rxrpc_input_abort(call, skb);
		break;
765

766 767 768
	case RXRPC_PACKET_TYPE_ACKALL:
		rxrpc_input_ackall(call, skb);
		break;
769

770 771 772
	default:
		_proto("Rx %s %%%u", rxrpc_pkts[sp->hdr.type], sp->hdr.serial);
		break;
773
	}
774

775 776 777 778 779
	_leave("");
}

/*
 * post connection-level events to the connection
780 781
 * - this includes challenges, responses, some aborts and call terminal packet
 *   retransmission.
782
 */
783
static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
784 785 786 787 788
				      struct sk_buff *skb)
{
	_enter("%p,%p", conn, skb);

	skb_queue_tail(&conn->rx_queue, skb);
789
	rxrpc_queue_conn(conn);
790 791
}

792 793 794 795 796 797 798 799 800 801
/*
 * post endpoint-level events to the local endpoint
 * - this includes debug and version messages
 */
static void rxrpc_post_packet_to_local(struct rxrpc_local *local,
				       struct sk_buff *skb)
{
	_enter("%p,%p", local, skb);

	skb_queue_tail(&local->event_queue, skb);
802
	rxrpc_queue_local(local);
803 804
}

805 806 807 808 809 810 811 812 813 814 815
/*
 * put a packet up for transport-level abort
 */
static void rxrpc_reject_packet(struct rxrpc_local *local, struct sk_buff *skb)
{
	CHECK_SLAB_OKAY(&local->usage);

	skb_queue_tail(&local->reject_queue, skb);
	rxrpc_queue_local(local);
}

816 817 818 819 820 821 822 823 824
/*
 * Extract the wire header from a packet and translate the byte order.
 */
static noinline
int rxrpc_extract_header(struct rxrpc_skb_priv *sp, struct sk_buff *skb)
{
	struct rxrpc_wire_header whdr;

	/* dig out the RxRPC connection details */
825
	if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
826 827 828 829 830 831 832 833 834 835 836 837 838 839
		return -EBADMSG;

	memset(sp, 0, sizeof(*sp));
	sp->hdr.epoch		= ntohl(whdr.epoch);
	sp->hdr.cid		= ntohl(whdr.cid);
	sp->hdr.callNumber	= ntohl(whdr.callNumber);
	sp->hdr.seq		= ntohl(whdr.seq);
	sp->hdr.serial		= ntohl(whdr.serial);
	sp->hdr.flags		= whdr.flags;
	sp->hdr.type		= whdr.type;
	sp->hdr.userStatus	= whdr.userStatus;
	sp->hdr.securityIndex	= whdr.securityIndex;
	sp->hdr._rsvd		= ntohs(whdr._rsvd);
	sp->hdr.serviceId	= ntohs(whdr.serviceId);
840
	sp->offset = sizeof(whdr);
841 842 843
	return 0;
}

844 845 846
/*
 * handle data received on the local endpoint
 * - may be called in interrupt context
847 848 849 850
 *
 * The socket is locked by the caller and this prevents the socket from being
 * shut down and the local endpoint from going away, thus sk_user_data will not
 * be cleared until this function returns.
851
 */
852
void rxrpc_data_ready(struct sock *udp_sk)
853
{
854
	struct rxrpc_connection *conn;
855 856
	struct rxrpc_channel *chan;
	struct rxrpc_call *call;
857
	struct rxrpc_skb_priv *sp;
858
	struct rxrpc_local *local = udp_sk->sk_user_data;
859
	struct sk_buff *skb;
860
	unsigned int channel;
861
	int ret, skew;
862

863
	_enter("%p", udp_sk);
864 865 866

	ASSERT(!irqs_disabled());

867
	skb = skb_recv_datagram(udp_sk, 0, 1, &ret);
868 869 870 871 872 873 874
	if (!skb) {
		if (ret == -EAGAIN)
			return;
		_debug("UDP socket error %d", ret);
		return;
	}

D
David Howells 已提交
875
	rxrpc_new_skb(skb, rxrpc_skb_rx_received);
876 877 878 879 880

	_net("recv skb %p", skb);

	/* we'll probably need to checksum it (didn't call sock_recvmsg) */
	if (skb_checksum_complete(skb)) {
D
David Howells 已提交
881
		rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
882
		__UDP_INC_STATS(&init_net, UDP_MIB_INERRORS, 0);
883 884 885 886
		_leave(" [CSUM failed]");
		return;
	}

887
	__UDP_INC_STATS(&init_net, UDP_MIB_INDATAGRAMS, 0);
888

889 890 891
	/* The socket buffer we have is owned by UDP, with UDP's data all over
	 * it, but we really want our own data there.
	 */
892 893 894
	skb_orphan(skb);
	sp = rxrpc_skb(skb);

895 896 897 898
	/* dig out the RxRPC connection details */
	if (rxrpc_extract_header(sp, skb) < 0)
		goto bad_message;

899 900 901
	if (IS_ENABLED(CONFIG_AF_RXRPC_INJECT_LOSS)) {
		static int lose;
		if ((lose++ & 7) == 7) {
902
			trace_rxrpc_rx_lose(sp);
903 904 905 906 907
			rxrpc_lose_skb(skb, rxrpc_skb_rx_lost);
			return;
		}
	}

908
	trace_rxrpc_rx_packet(sp);
909 910 911

	_net("Rx RxRPC %s ep=%x call=%x:%x",
	     sp->hdr.flags & RXRPC_CLIENT_INITIATED ? "ToServer" : "ToClient",
912
	     sp->hdr.epoch, sp->hdr.cid, sp->hdr.callNumber);
913

914 915
	if (sp->hdr.type >= RXRPC_N_PACKET_TYPES ||
	    !((RXRPC_SUPPORTED_PACKET_TYPES >> sp->hdr.type) & 1)) {
916 917 918 919
		_proto("Rx Bad Packet Type %u", sp->hdr.type);
		goto bad_message;
	}

920 921
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_VERSION:
922 923
		rxrpc_post_packet_to_local(local, skb);
		goto out;
924

925 926 927 928 929 930 931 932 933 934 935 936
	case RXRPC_PACKET_TYPE_BUSY:
		if (sp->hdr.flags & RXRPC_CLIENT_INITIATED)
			goto discard;

	case RXRPC_PACKET_TYPE_DATA:
		if (sp->hdr.callNumber == 0)
			goto bad_message;
		if (sp->hdr.flags & RXRPC_JUMBO_PACKET &&
		    !rxrpc_validate_jumbo(skb))
			goto bad_message;
		break;
	}
937

938 939 940
	rcu_read_lock();

	conn = rxrpc_find_connection_rcu(local, skb);
941 942 943
	if (conn) {
		if (sp->hdr.securityIndex != conn->security_ix)
			goto wrong_security;
944

945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960
		if (sp->hdr.callNumber == 0) {
			/* Connection-level packet */
			_debug("CONN %p {%d}", conn, conn->debug_id);
			rxrpc_post_packet_to_conn(conn, skb);
			goto out_unlock;
		}

		/* Note the serial number skew here */
		skew = (int)sp->hdr.serial - (int)conn->hi_serial;
		if (skew >= 0) {
			if (skew > 0)
				conn->hi_serial = sp->hdr.serial;
		} else {
			skew = -skew;
			skew = min(skew, 65535);
		}
961

962
		/* Call-bound packets are routed by connection channel. */
963 964
		channel = sp->hdr.cid & RXRPC_CHANNELMASK;
		chan = &conn->channels[channel];
965 966 967 968 969 970

		/* Ignore really old calls */
		if (sp->hdr.callNumber < chan->last_call)
			goto discard_unlock;

		if (sp->hdr.callNumber == chan->last_call) {
971 972
			/* For the previous service call, if completed successfully, we
			 * discard all further packets.
973
			 */
D
David Howells 已提交
974
			if (rxrpc_conn_is_service(conn) &&
975 976 977 978
			    (chan->last_type == RXRPC_PACKET_TYPE_ACK ||
			     sp->hdr.type == RXRPC_PACKET_TYPE_ABORT))
				goto discard_unlock;

979 980
			/* But otherwise we need to retransmit the final packet from
			 * data cached in the connection record.
981 982 983 984
			 */
			rxrpc_post_packet_to_conn(conn, skb);
			goto out_unlock;
		}
985

986
		call = rcu_dereference(chan->call);
987 988 989 990
	} else {
		skew = 0;
		call = NULL;
	}
991

992 993 994 995 996 997 998 999 1000 1001 1002 1003
	if (!call || atomic_read(&call->usage) == 0) {
		if (!(sp->hdr.type & RXRPC_CLIENT_INITIATED) ||
		    sp->hdr.callNumber == 0 ||
		    sp->hdr.type != RXRPC_PACKET_TYPE_DATA)
			goto bad_message_unlock;
		if (sp->hdr.seq != 1)
			goto discard_unlock;
		call = rxrpc_new_incoming_call(local, conn, skb);
		if (!call) {
			rcu_read_unlock();
			goto reject_packet;
		}
1004
		rxrpc_send_ping(call, skb, skew);
1005
	}
1006

1007 1008 1009
	rxrpc_input_call_packet(call, skb, skew);
	goto discard_unlock;

1010
discard_unlock:
1011
	rcu_read_unlock();
1012
discard:
D
David Howells 已提交
1013
	rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
1014
out:
1015
	trace_rxrpc_rx_done(0, 0);
1016 1017
	return;

1018
out_unlock:
1019
	rcu_read_unlock();
1020
	goto out;
1021

1022 1023 1024 1025 1026 1027
wrong_security:
	rcu_read_unlock();
	trace_rxrpc_abort("SEC", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
			  RXKADINCONSISTENCY, EBADMSG);
	skb->priority = RXKADINCONSISTENCY;
	goto post_abort;
1028

1029 1030
bad_message_unlock:
	rcu_read_unlock();
1031
bad_message:
1032 1033
	trace_rxrpc_abort("BAD", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
			  RX_PROTOCOL_ERROR, EBADMSG);
1034
	skb->priority = RX_PROTOCOL_ERROR;
1035 1036
post_abort:
	skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT;
1037 1038
reject_packet:
	trace_rxrpc_rx_done(skb->mark, skb->priority);
1039 1040 1041
	rxrpc_reject_packet(local, skb);
	_leave(" [badmsg]");
}