input.c 25.5 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
static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to)
60
{
61 62
	struct sk_buff *skb, *list = NULL;
	int ix;
63
	u8 annotation;
64

65
	spin_lock(&call->lock);
66

67 68 69 70
	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];
71
		annotation = call->rxtx_annotations[ix];
D
David Howells 已提交
72
		rxrpc_see_skb(skb, rxrpc_skb_tx_rotated);
73 74 75 76
		call->rxtx_buffer[ix] = NULL;
		call->rxtx_annotations[ix] = 0;
		skb->next = list;
		list = skb;
77 78 79

		if (annotation & RXRPC_TX_ANNO_LAST)
			set_bit(RXRPC_CALL_TX_LAST, &call->flags);
80
	}
81

82
	spin_unlock(&call->lock);
83

84 85 86
	trace_rxrpc_transmit(call, (test_bit(RXRPC_CALL_TX_LAST, &call->flags) ?
				    rxrpc_transmit_rotate_last :
				    rxrpc_transmit_rotate));
87 88
	wake_up(&call->waitq);

89 90 91 92
	while (list) {
		skb = list;
		list = skb->next;
		skb->next = NULL;
D
David Howells 已提交
93
		rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
94
	}
95
}
96

97 98 99 100 101 102
/*
 * 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.
 */
103 104
static bool rxrpc_end_tx_phase(struct rxrpc_call *call, bool reply_begun,
			       const char *abort_why)
105
{
106

107
	ASSERT(test_bit(RXRPC_CALL_TX_LAST, &call->flags));
108

109
	write_lock(&call->state_lock);
110

111
	switch (call->state) {
112
	case RXRPC_CALL_CLIENT_SEND_REQUEST:
113
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
114 115 116 117
		if (reply_begun)
			call->state = RXRPC_CALL_CLIENT_RECV_REPLY;
		else
			call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY;
118
		break;
119

120 121 122 123
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		__rxrpc_call_completed(call);
		rxrpc_notify_socket(call);
		break;
124 125 126

	default:
		goto bad_state;
127 128
	}

129
	write_unlock(&call->state_lock);
130 131 132 133 134
	if (call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY) {
		trace_rxrpc_transmit(call, rxrpc_transmit_await_reply);
	} else {
		trace_rxrpc_transmit(call, rxrpc_transmit_end);
	}
135 136
	_leave(" = ok");
	return true;
137 138 139 140 141 142 143 144 145 146 147 148 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)
{
	rxrpc_seq_t top = READ_ONCE(call->tx_top);

	if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags))
		rxrpc_rotate_tx_window(call, top);
	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;
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
}

/*
 * 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;
180
	unsigned int len = skb->len;
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
	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;
198

199 200
protocol_error:
	return false;
201 202 203
}

/*
204 205 206 207 208 209 210 211 212 213 214
 * 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).
215
 */
216
static void rxrpc_input_dup_data(struct rxrpc_call *call, rxrpc_seq_t seq,
217
				 u8 annotation, bool *_jumbo_bad)
218
{
219 220 221
	/* Discard normal packets that are duplicates. */
	if (annotation == 0)
		return;
222

223 224 225 226
	/* 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.
	 */
227 228 229
	if (!*_jumbo_bad) {
		call->nr_jumbo_bad++;
		*_jumbo_bad = true;
230 231
	}
}
232

233 234 235 236 237 238 239 240 241 242 243
/*
 * 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;
244
	bool immediate_ack = false, jumbo_bad = false, queued;
245 246
	u16 len;
	u8 ack = 0, flags, annotation = 0;
247

248
	_enter("{%u,%u},{%u,%u}",
249
	       call->rx_hard_ack, call->rx_top, skb->len, seq);
250

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

254 255
	if (call->state >= RXRPC_CALL_COMPLETE)
		return;
256

257 258 259
	/* Received data implicitly ACKs all of the request packets we sent
	 * when we're acting as a client.
	 */
260 261 262
	if ((call->state == RXRPC_CALL_CLIENT_SEND_REQUEST ||
	     call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY) &&
	    !rxrpc_receiving_reply(call))
263
		return;
264

265
	call->ackr_prev_seq = seq;
266

267 268
	hard_ack = READ_ONCE(call->rx_hard_ack);
	if (after(seq, hard_ack + call->rx_winsize)) {
269
		ack = RXRPC_ACK_EXCEEDS_WINDOW;
270 271
		ack_serial = serial;
		goto ack;
272 273
	}

274 275
	flags = sp->hdr.flags;
	if (flags & RXRPC_JUMBO_PACKET) {
276
		if (call->nr_jumbo_bad > 3) {
277 278 279
			ack = RXRPC_ACK_NOSPACE;
			ack_serial = serial;
			goto ack;
280
		}
281
		annotation = 1;
282 283
	}

284 285 286
next_subpacket:
	queued = false;
	ix = seq & RXRPC_RXTX_BUFF_MASK;
287
	len = skb->len;
288 289 290 291
	if (flags & RXRPC_JUMBO_PACKET)
		len = RXRPC_JUMBO_DATALEN;

	if (flags & RXRPC_LAST_PACKET) {
292
		if (test_bit(RXRPC_CALL_RX_LAST, &call->flags) &&
293 294 295 296 297 298
		    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);
299 300
	}

301 302 303 304 305 306 307 308 309 310 311 312
	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]) {
313
		rxrpc_input_dup_data(call, seq, annotation, &jumbo_bad);
314 315 316
		if (ack != RXRPC_ACK_DUPLICATE) {
			ack = RXRPC_ACK_DUPLICATE;
			ack_serial = serial;
317
		}
318 319
		immediate_ack = true;
		goto skip;
320 321
	}

322 323 324 325 326 327 328 329
	/* 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 已提交
330
	rxrpc_get_skb(skb, rxrpc_skb_rx_got);
331 332 333
	call->rxtx_annotations[ix] = annotation;
	smp_wmb();
	call->rxtx_buffer[ix] = skb;
334
	if (after(seq, call->rx_top)) {
335
		smp_store_release(&call->rx_top, seq);
336 337 338 339 340 341 342 343
	} 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;
	}
344
	if (flags & RXRPC_LAST_PACKET) {
345
		set_bit(RXRPC_CALL_RX_LAST, &call->flags);
346 347 348 349
		trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
	} else {
		trace_rxrpc_receive(call, rxrpc_receive_queue, serial, seq);
	}
350 351 352 353 354 355 356 357 358
	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;
359 360
	}

361 362 363 364 365 366 367 368 369 370 371
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;
372 373 374 375 376 377 378 379 380
		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;
		}
381 382 383 384

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

386 387 388 389
	if (queued && flags & RXRPC_LAST_PACKET && !ack) {
		ack = RXRPC_ACK_DELAY;
		ack_serial = serial;
	}
390

391 392 393
ack:
	if (ack)
		rxrpc_propose_ACK(call, ack, skew, ack_serial,
394 395
				  immediate_ack, true,
				  rxrpc_propose_ack_input_data);
396

397 398 399
	if (sp->hdr.seq == READ_ONCE(call->rx_hard_ack) + 1)
		rxrpc_notify_socket(call);
	_leave(" [queued]");
400 401
}

402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
/*
 * 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);
}

434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459
/*
 * 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);
}

460
/*
461
 * Process the extra information that may be appended to an ACK packet
462
 */
463 464
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
				struct rxrpc_ackinfo *ackinfo)
465
{
466 467 468
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	struct rxrpc_peer *peer;
	unsigned int mtu;
469
	u32 rwind = ntohl(ackinfo->rwind);
470 471 472 473

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

476 477 478
	if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
		rwind = RXRPC_RXTX_BUFF_SIZE - 1;
	call->tx_winsize = rwind;
479 480 481 482 483 484 485 486 487 488 489 490

	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);
	}
}
491

492 493 494 495 496 497 498 499 500 501 502 503 504 505
/*
 * 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,
				  rxrpc_seq_t seq, int nr_acks)
{
	bool resend = false;
	int ix;
D
David Howells 已提交
506
	u8 annotation, anno_type;
507 508 509

	for (; nr_acks > 0; nr_acks--, seq++) {
		ix = seq & RXRPC_RXTX_BUFF_MASK;
D
David Howells 已提交
510 511 512
		annotation = call->rxtx_annotations[ix];
		anno_type = annotation & RXRPC_TX_ANNO_MASK;
		annotation &= ~RXRPC_TX_ANNO_MASK;
513
		switch (*acks++) {
514
		case RXRPC_ACK_TYPE_ACK:
D
David Howells 已提交
515 516 517 518
			if (anno_type == RXRPC_TX_ANNO_ACK)
				continue;
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_ACK | annotation;
519 520
			break;
		case RXRPC_ACK_TYPE_NACK:
D
David Howells 已提交
521
			if (anno_type == RXRPC_TX_ANNO_NAK)
522
				continue;
523 524
			if (anno_type == RXRPC_TX_ANNO_RETRANS)
				continue;
D
David Howells 已提交
525 526
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_NAK | annotation;
527 528 529 530
			resend = true;
			break;
		default:
			return rxrpc_proto_abort("SFT", call, 0);
531 532
		}
	}
533 534 535 536

	if (resend &&
	    !test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events))
		rxrpc_queue_call(call);
537 538 539
}

/*
540 541 542 543 544 545 546 547
 * 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.
548
 */
549 550
static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
			    u16 skew)
551
{
552
	u8 ack_reason;
553
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
554 555 556 557 558
	union {
		struct rxrpc_ackpacket ack;
		struct rxrpc_ackinfo info;
		u8 acks[RXRPC_MAXACKS];
	} buf;
559
	rxrpc_serial_t acked_serial;
560 561 562 563 564 565 566 567
	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);
568
	}
569 570
	sp->offset += sizeof(buf.ack);

571
	acked_serial = ntohl(buf.ack.serial);
572 573 574
	first_soft_ack = ntohl(buf.ack.firstPacket);
	hard_ack = first_soft_ack - 1;
	nr_acks = buf.ack.nAcks;
575 576
	ack_reason = (buf.ack.reason < RXRPC_ACK__INVALID ?
		      buf.ack.reason : RXRPC_ACK__INVALID);
577

578
	trace_rxrpc_rx_ack(call, first_soft_ack, ack_reason, nr_acks);
579

580 581 582 583 584
	_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),
585
	       acked_serial,
586
	       rxrpc_ack_names[ack_reason],
587 588
	       buf.ack.nAcks);

589 590 591
	if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
		rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
592 593 594
	if (buf.ack.reason == RXRPC_ACK_REQUESTED)
		rxrpc_input_requested_ack(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
595

596 597 598
	if (buf.ack.reason == RXRPC_ACK_PING) {
		_proto("Rx ACK %%%u PING Request", sp->hdr.serial);
		rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE,
599 600
				  skew, sp->hdr.serial, true, true,
				  rxrpc_propose_ack_respond_to_ping);
601
	} else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
602
		rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
603 604
				  skew, sp->hdr.serial, true, true,
				  rxrpc_propose_ack_respond_to_ack);
605 606
	}

607
	offset = sp->offset + nr_acks + 3;
608
	if (skb->len >= offset + sizeof(buf.info)) {
609 610 611 612
		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);
	}
613

614 615
	if (first_soft_ack == 0)
		return rxrpc_proto_abort("AK0", call, 0);
616

617 618 619 620 621 622 623
	/* 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;
624
	default:
625 626
		return;
	}
627

628
	/* Discard any out-of-order or duplicate ACKs. */
629
	if (before_eq(sp->hdr.serial, call->acks_latest)) {
630 631 632 633 634
		_debug("discard ACK %d <= %d",
		       sp->hdr.serial, call->acks_latest);
		return;
	}
	call->acks_latest = sp->hdr.serial;
635

636 637 638
	if (before(hard_ack, call->tx_hard_ack) ||
	    after(hard_ack, call->tx_top))
		return rxrpc_proto_abort("AKW", call, 0);
639 640
	if (nr_acks > call->tx_top - hard_ack)
		return rxrpc_proto_abort("AKN", call, 0);
641

642 643
	if (after(hard_ack, call->tx_hard_ack))
		rxrpc_rotate_tx_window(call, hard_ack);
644

645 646 647 648 649 650 651 652
	if (nr_acks > 0) {
		if (skb_copy_bits(skb, sp->offset, buf.acks, nr_acks) < 0)
			return rxrpc_proto_abort("XSA", call, 0);
		rxrpc_input_soft_acks(call, buf.acks, first_soft_ack, nr_acks);
	}

	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
		rxrpc_end_tx_phase(call, false, "ETA");
653
		return;
654
	}
655 656 657 658

}

/*
659
 * Process an ACKALL packet.
660
 */
661
static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
662
{
663
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
664

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

667 668 669
	rxrpc_rotate_tx_window(call, call->tx_top);
	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags))
		rxrpc_end_tx_phase(call, false, "ETL");
670
}
671

672 673 674 675 676 677 678 679
/*
 * 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;
680

681
	_enter("");
682

683 684 685
	if (skb->len >= 4 &&
	    skb_copy_bits(skb, sp->offset, &wtmp, sizeof(wtmp)) >= 0)
		abort_code = ntohl(wtmp);
686

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

689 690 691
	if (rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
				      abort_code, ECONNABORTED))
		rxrpc_notify_socket(call);
692 693 694
}

/*
695
 * Process an incoming call packet.
696
 */
697 698
static void rxrpc_input_call_packet(struct rxrpc_call *call,
				    struct sk_buff *skb, u16 skew)
699
{
700
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
701

702
	_enter("%p,%p", call, skb);
703

704 705 706 707
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_DATA:
		rxrpc_input_data(call, skb, skew);
		break;
708

709 710
	case RXRPC_PACKET_TYPE_ACK:
		rxrpc_input_ack(call, skb, skew);
711 712
		break;

713 714
	case RXRPC_PACKET_TYPE_BUSY:
		_proto("Rx BUSY %%%u", sp->hdr.serial);
715

716 717 718 719 720
		/* 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;
721

722 723 724
	case RXRPC_PACKET_TYPE_ABORT:
		rxrpc_input_abort(call, skb);
		break;
725

726 727 728
	case RXRPC_PACKET_TYPE_ACKALL:
		rxrpc_input_ackall(call, skb);
		break;
729

730 731 732
	default:
		_proto("Rx %s %%%u", rxrpc_pkts[sp->hdr.type], sp->hdr.serial);
		break;
733
	}
734

735 736 737 738 739
	_leave("");
}

/*
 * post connection-level events to the connection
740 741
 * - this includes challenges, responses, some aborts and call terminal packet
 *   retransmission.
742
 */
743
static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
744 745 746 747 748
				      struct sk_buff *skb)
{
	_enter("%p,%p", conn, skb);

	skb_queue_tail(&conn->rx_queue, skb);
749
	rxrpc_queue_conn(conn);
750 751
}

752 753 754 755 756 757 758 759 760 761
/*
 * 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);
762
	rxrpc_queue_local(local);
763 764
}

765 766 767 768 769 770 771 772 773 774 775
/*
 * 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);
}

776 777 778 779 780 781 782 783 784
/*
 * 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 */
785
	if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
786 787 788 789 790 791 792 793 794 795 796 797 798 799
		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);
800
	sp->offset = sizeof(whdr);
801 802 803
	return 0;
}

804 805 806
/*
 * handle data received on the local endpoint
 * - may be called in interrupt context
807 808 809 810
 *
 * 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.
811
 */
812
void rxrpc_data_ready(struct sock *udp_sk)
813
{
814
	struct rxrpc_connection *conn;
815 816
	struct rxrpc_channel *chan;
	struct rxrpc_call *call;
817
	struct rxrpc_skb_priv *sp;
818
	struct rxrpc_local *local = udp_sk->sk_user_data;
819
	struct sk_buff *skb;
820
	unsigned int channel;
821
	int ret, skew;
822

823
	_enter("%p", udp_sk);
824 825 826

	ASSERT(!irqs_disabled());

827
	skb = skb_recv_datagram(udp_sk, 0, 1, &ret);
828 829 830 831 832 833 834
	if (!skb) {
		if (ret == -EAGAIN)
			return;
		_debug("UDP socket error %d", ret);
		return;
	}

D
David Howells 已提交
835
	rxrpc_new_skb(skb, rxrpc_skb_rx_received);
836 837 838 839 840

	_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 已提交
841
		rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
842
		__UDP_INC_STATS(&init_net, UDP_MIB_INERRORS, 0);
843 844 845 846
		_leave(" [CSUM failed]");
		return;
	}

847
	__UDP_INC_STATS(&init_net, UDP_MIB_INDATAGRAMS, 0);
848

849 850 851
	/* The socket buffer we have is owned by UDP, with UDP's data all over
	 * it, but we really want our own data there.
	 */
852 853 854
	skb_orphan(skb);
	sp = rxrpc_skb(skb);

855 856 857 858
	/* dig out the RxRPC connection details */
	if (rxrpc_extract_header(sp, skb) < 0)
		goto bad_message;

859 860 861
	if (IS_ENABLED(CONFIG_AF_RXRPC_INJECT_LOSS)) {
		static int lose;
		if ((lose++ & 7) == 7) {
862
			trace_rxrpc_rx_lose(sp);
863 864 865 866 867
			rxrpc_lose_skb(skb, rxrpc_skb_rx_lost);
			return;
		}
	}

868
	trace_rxrpc_rx_packet(sp);
869 870 871

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

874 875
	if (sp->hdr.type >= RXRPC_N_PACKET_TYPES ||
	    !((RXRPC_SUPPORTED_PACKET_TYPES >> sp->hdr.type) & 1)) {
876 877 878 879
		_proto("Rx Bad Packet Type %u", sp->hdr.type);
		goto bad_message;
	}

880 881
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_VERSION:
882 883
		rxrpc_post_packet_to_local(local, skb);
		goto out;
884

885 886 887 888 889 890 891 892 893 894 895 896
	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;
	}
897

898 899 900
	rcu_read_lock();

	conn = rxrpc_find_connection_rcu(local, skb);
901 902 903
	if (conn) {
		if (sp->hdr.securityIndex != conn->security_ix)
			goto wrong_security;
904

905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
		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);
		}
921

922
		/* Call-bound packets are routed by connection channel. */
923 924
		channel = sp->hdr.cid & RXRPC_CHANNELMASK;
		chan = &conn->channels[channel];
925 926 927 928 929 930

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

		if (sp->hdr.callNumber == chan->last_call) {
931 932
			/* For the previous service call, if completed successfully, we
			 * discard all further packets.
933
			 */
D
David Howells 已提交
934
			if (rxrpc_conn_is_service(conn) &&
935 936 937 938
			    (chan->last_type == RXRPC_PACKET_TYPE_ACK ||
			     sp->hdr.type == RXRPC_PACKET_TYPE_ABORT))
				goto discard_unlock;

939 940
			/* But otherwise we need to retransmit the final packet from
			 * data cached in the connection record.
941 942 943 944
			 */
			rxrpc_post_packet_to_conn(conn, skb);
			goto out_unlock;
		}
945

946
		call = rcu_dereference(chan->call);
947 948 949 950
	} else {
		skew = 0;
		call = NULL;
	}
951

952 953 954 955 956 957 958 959 960 961 962 963
	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;
		}
964
		rxrpc_send_ping(call, skb, skew);
965
	}
966

967 968 969
	rxrpc_input_call_packet(call, skb, skew);
	goto discard_unlock;

970
discard_unlock:
971
	rcu_read_unlock();
972
discard:
D
David Howells 已提交
973
	rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
974
out:
975
	trace_rxrpc_rx_done(0, 0);
976 977
	return;

978
out_unlock:
979
	rcu_read_unlock();
980
	goto out;
981

982 983 984 985 986 987
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;
988

989 990
bad_message_unlock:
	rcu_read_unlock();
991
bad_message:
992 993
	trace_rxrpc_abort("BAD", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
			  RX_PROTOCOL_ERROR, EBADMSG);
994
	skb->priority = RX_PROTOCOL_ERROR;
995 996
post_abort:
	skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT;
997 998
reject_packet:
	trace_rxrpc_rx_done(skb->mark, skb->priority);
999 1000 1001
	rxrpc_reject_packet(local, skb);
	_leave(" [badmsg]");
}