input.c 24.2 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 52
	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,
				  true, true);
53 54
}

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

63
	spin_lock(&call->lock);
64

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

76
	spin_unlock(&call->lock);
77

78
	trace_rxrpc_transmit(call, rxrpc_transmit_rotate);
79 80
	wake_up(&call->waitq);

81 82 83 84
	while (list) {
		skb = list;
		list = skb->next;
		skb->next = NULL;
D
David Howells 已提交
85
		rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
86
	}
87
}
88

89 90 91 92 93 94 95 96 97
/*
 * 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.
 */
static bool rxrpc_end_tx_phase(struct rxrpc_call *call, const char *abort_why)
{
	_enter("");
98

99 100 101 102 103 104 105 106 107
	switch (call->state) {
	case RXRPC_CALL_CLIENT_RECV_REPLY:
		return true;
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		break;
	default:
		rxrpc_proto_abort(abort_why, call, call->tx_top);
		return false;
108 109
	}

110
	rxrpc_rotate_tx_window(call, call->tx_top);
111

112
	write_lock(&call->state_lock);
113

114 115 116 117
	switch (call->state) {
	default:
		break;
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
D
David Howells 已提交
118
		call->tx_phase = false;
119 120 121 122 123 124
		call->state = RXRPC_CALL_CLIENT_RECV_REPLY;
		break;
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		__rxrpc_call_completed(call);
		rxrpc_notify_socket(call);
		break;
125 126
	}

127
	write_unlock(&call->state_lock);
128
	trace_rxrpc_transmit(call, rxrpc_transmit_end);
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
	_leave(" = ok");
	return true;
}

/*
 * 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;
149
	unsigned int len = skb->len;
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
	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;
167

168 169
protocol_error:
	return false;
170 171 172
}

/*
173 174 175 176 177 178 179 180 181 182 183
 * 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).
184
 */
185
static void rxrpc_input_dup_data(struct rxrpc_call *call, rxrpc_seq_t seq,
186
				 u8 annotation, bool *_jumbo_bad)
187
{
188 189 190
	/* Discard normal packets that are duplicates. */
	if (annotation == 0)
		return;
191

192 193 194 195
	/* 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.
	 */
196 197 198
	if (!*_jumbo_bad) {
		call->nr_jumbo_bad++;
		*_jumbo_bad = true;
199 200
	}
}
201

202 203 204 205 206 207 208 209 210 211 212
/*
 * 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;
213
	bool immediate_ack = false, jumbo_bad = false, queued;
214 215
	u16 len;
	u8 ack = 0, flags, annotation = 0;
216

217
	_enter("{%u,%u},{%u,%u}",
218
	       call->rx_hard_ack, call->rx_top, skb->len, seq);
219

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

223 224
	if (call->state >= RXRPC_CALL_COMPLETE)
		return;
225

226 227 228 229 230 231
	/* Received data implicitly ACKs all of the request packets we sent
	 * when we're acting as a client.
	 */
	if (call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY &&
	    !rxrpc_end_tx_phase(call, "ETD"))
		return;
232

233
	call->ackr_prev_seq = seq;
234

235 236
	hard_ack = READ_ONCE(call->rx_hard_ack);
	if (after(seq, hard_ack + call->rx_winsize)) {
237
		ack = RXRPC_ACK_EXCEEDS_WINDOW;
238 239
		ack_serial = serial;
		goto ack;
240 241
	}

242 243
	flags = sp->hdr.flags;
	if (flags & RXRPC_JUMBO_PACKET) {
244
		if (call->nr_jumbo_bad > 3) {
245 246 247
			ack = RXRPC_ACK_NOSPACE;
			ack_serial = serial;
			goto ack;
248
		}
249
		annotation = 1;
250 251
	}

252 253 254
next_subpacket:
	queued = false;
	ix = seq & RXRPC_RXTX_BUFF_MASK;
255
	len = skb->len;
256 257 258 259
	if (flags & RXRPC_JUMBO_PACKET)
		len = RXRPC_JUMBO_DATALEN;

	if (flags & RXRPC_LAST_PACKET) {
260
		if (test_bit(RXRPC_CALL_RX_LAST, &call->flags) &&
261 262 263 264 265 266
		    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);
267 268
	}

269 270 271 272 273 274 275 276 277 278 279 280
	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]) {
281
		rxrpc_input_dup_data(call, seq, annotation, &jumbo_bad);
282 283 284
		if (ack != RXRPC_ACK_DUPLICATE) {
			ack = RXRPC_ACK_DUPLICATE;
			ack_serial = serial;
285
		}
286 287
		immediate_ack = true;
		goto skip;
288 289
	}

290 291 292 293 294 295 296 297
	/* 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 已提交
298
	rxrpc_get_skb(skb, rxrpc_skb_rx_got);
299 300 301 302 303
	call->rxtx_annotations[ix] = annotation;
	smp_wmb();
	call->rxtx_buffer[ix] = skb;
	if (after(seq, call->rx_top))
		smp_store_release(&call->rx_top, seq);
304
	if (flags & RXRPC_LAST_PACKET) {
305
		set_bit(RXRPC_CALL_RX_LAST, &call->flags);
306 307 308 309
		trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
	} else {
		trace_rxrpc_receive(call, rxrpc_receive_queue, serial, seq);
	}
310 311 312 313 314 315 316 317 318
	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;
319 320
	}

321 322 323 324 325 326 327 328 329 330 331
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;
332 333 334 335 336 337 338 339 340
		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;
		}
341 342 343 344

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

346 347 348 349
	if (queued && flags & RXRPC_LAST_PACKET && !ack) {
		ack = RXRPC_ACK_DELAY;
		ack_serial = serial;
	}
350

351 352 353 354
ack:
	if (ack)
		rxrpc_propose_ACK(call, ack, skew, ack_serial,
				  immediate_ack, true);
355

356 357 358
	if (sp->hdr.seq == READ_ONCE(call->rx_hard_ack) + 1)
		rxrpc_notify_socket(call);
	_leave(" [queued]");
359 360
}

361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
/*
 * 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);
}

393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418
/*
 * 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);
}

419
/*
420
 * Process the extra information that may be appended to an ACK packet
421
 */
422 423
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
				struct rxrpc_ackinfo *ackinfo)
424
{
425 426 427
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	struct rxrpc_peer *peer;
	unsigned int mtu;
428
	u32 rwind = ntohl(ackinfo->rwind);
429 430 431 432

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

435 436 437
	if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
		rwind = RXRPC_RXTX_BUFF_SIZE - 1;
	call->tx_winsize = rwind;
438 439 440 441 442 443 444 445 446 447 448 449

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

451 452 453 454 455 456 457 458 459 460 461 462 463 464
/*
 * 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 已提交
465
	u8 annotation, anno_type;
466 467 468

	for (; nr_acks > 0; nr_acks--, seq++) {
		ix = seq & RXRPC_RXTX_BUFF_MASK;
D
David Howells 已提交
469 470 471
		annotation = call->rxtx_annotations[ix];
		anno_type = annotation & RXRPC_TX_ANNO_MASK;
		annotation &= ~RXRPC_TX_ANNO_MASK;
472
		switch (*acks++) {
473
		case RXRPC_ACK_TYPE_ACK:
D
David Howells 已提交
474 475 476 477
			if (anno_type == RXRPC_TX_ANNO_ACK)
				continue;
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_ACK | annotation;
478 479
			break;
		case RXRPC_ACK_TYPE_NACK:
D
David Howells 已提交
480
			if (anno_type == RXRPC_TX_ANNO_NAK)
481
				continue;
D
David Howells 已提交
482 483
			call->rxtx_annotations[ix] =
				RXRPC_TX_ANNO_NAK | annotation;
484 485 486 487
			resend = true;
			break;
		default:
			return rxrpc_proto_abort("SFT", call, 0);
488 489
		}
	}
490 491 492 493

	if (resend &&
	    !test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events))
		rxrpc_queue_call(call);
494 495 496
}

/*
497 498 499 500 501 502 503 504
 * 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.
505
 */
506 507
static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
			    u16 skew)
508 509
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
510 511 512 513 514
	union {
		struct rxrpc_ackpacket ack;
		struct rxrpc_ackinfo info;
		u8 acks[RXRPC_MAXACKS];
	} buf;
515
	rxrpc_serial_t acked_serial;
516 517 518 519 520 521 522 523
	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);
524
	}
525 526
	sp->offset += sizeof(buf.ack);

527
	acked_serial = ntohl(buf.ack.serial);
528 529 530 531
	first_soft_ack = ntohl(buf.ack.firstPacket);
	hard_ack = first_soft_ack - 1;
	nr_acks = buf.ack.nAcks;

532 533
	trace_rxrpc_rx_ack(call, first_soft_ack, buf.ack.reason, nr_acks);

534 535 536 537 538
	_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),
539
	       acked_serial,
540 541 542
	       rxrpc_acks(buf.ack.reason),
	       buf.ack.nAcks);

543 544 545
	if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
		rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
546 547 548
	if (buf.ack.reason == RXRPC_ACK_REQUESTED)
		rxrpc_input_requested_ack(call, skb->tstamp, acked_serial,
					  sp->hdr.serial);
549

550 551 552 553 554
	if (buf.ack.reason == RXRPC_ACK_PING) {
		_proto("Rx ACK %%%u PING Request", sp->hdr.serial);
		rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE,
				  skew, sp->hdr.serial, true, true);
	} else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
555
		rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
556
				  skew, sp->hdr.serial, true, true);
557 558
	}

559
	offset = sp->offset + nr_acks + 3;
560
	if (skb->len >= offset + sizeof(buf.info)) {
561 562 563 564
		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);
	}
565

566 567
	if (first_soft_ack == 0)
		return rxrpc_proto_abort("AK0", call, 0);
568

569 570 571 572 573 574 575
	/* 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;
576
	default:
577 578
		return;
	}
579

580 581 582 583 584 585 586
	/* Discard any out-of-order or duplicate ACKs. */
	if ((int)sp->hdr.serial - (int)call->acks_latest <= 0) {
		_debug("discard ACK %d <= %d",
		       sp->hdr.serial, call->acks_latest);
		return;
	}
	call->acks_latest = sp->hdr.serial;
587

588 589 590 591 592
	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags) &&
	    hard_ack == call->tx_top) {
		rxrpc_end_tx_phase(call, "ETA");
		return;
	}
593

594 595 596
	if (before(hard_ack, call->tx_hard_ack) ||
	    after(hard_ack, call->tx_top))
		return rxrpc_proto_abort("AKW", call, 0);
597

598 599
	if (after(hard_ack, call->tx_hard_ack))
		rxrpc_rotate_tx_window(call, hard_ack);
600

601 602
	if (after(first_soft_ack, call->tx_top))
		return;
603

604 605 606 607 608
	if (nr_acks > call->tx_top - first_soft_ack + 1)
		nr_acks = first_soft_ack - call->tx_top + 1;
	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);
609 610 611
}

/*
612
 * Process an ACKALL packet.
613
 */
614
static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
615
{
616
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
617

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

620 621
	rxrpc_end_tx_phase(call, "ETL");
}
622

623 624 625 626 627 628 629 630
/*
 * 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;
631

632
	_enter("");
633

634 635 636
	if (skb->len >= 4 &&
	    skb_copy_bits(skb, sp->offset, &wtmp, sizeof(wtmp)) >= 0)
		abort_code = ntohl(wtmp);
637

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

640 641 642
	if (rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
				      abort_code, ECONNABORTED))
		rxrpc_notify_socket(call);
643 644 645
}

/*
646
 * Process an incoming call packet.
647
 */
648 649
static void rxrpc_input_call_packet(struct rxrpc_call *call,
				    struct sk_buff *skb, u16 skew)
650
{
651
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
652

653
	_enter("%p,%p", call, skb);
654

655 656 657 658
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_DATA:
		rxrpc_input_data(call, skb, skew);
		break;
659

660 661
	case RXRPC_PACKET_TYPE_ACK:
		rxrpc_input_ack(call, skb, skew);
662 663
		break;

664 665
	case RXRPC_PACKET_TYPE_BUSY:
		_proto("Rx BUSY %%%u", sp->hdr.serial);
666

667 668 669 670 671
		/* 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;
672

673 674 675
	case RXRPC_PACKET_TYPE_ABORT:
		rxrpc_input_abort(call, skb);
		break;
676

677 678 679
	case RXRPC_PACKET_TYPE_ACKALL:
		rxrpc_input_ackall(call, skb);
		break;
680

681 682 683
	default:
		_proto("Rx %s %%%u", rxrpc_pkts[sp->hdr.type], sp->hdr.serial);
		break;
684
	}
685

686 687 688 689 690
	_leave("");
}

/*
 * post connection-level events to the connection
691 692
 * - this includes challenges, responses, some aborts and call terminal packet
 *   retransmission.
693
 */
694
static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
695 696 697 698 699
				      struct sk_buff *skb)
{
	_enter("%p,%p", conn, skb);

	skb_queue_tail(&conn->rx_queue, skb);
700
	rxrpc_queue_conn(conn);
701 702
}

703 704 705 706 707 708 709 710 711 712
/*
 * 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);
713
	rxrpc_queue_local(local);
714 715
}

716 717 718 719 720 721 722 723 724 725 726
/*
 * 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);
}

727 728 729 730 731 732 733 734 735
/*
 * 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 */
736
	if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
737 738 739 740 741 742 743 744 745 746 747 748 749 750
		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);
751
	sp->offset = sizeof(whdr);
752 753 754
	return 0;
}

755 756 757
/*
 * handle data received on the local endpoint
 * - may be called in interrupt context
758 759 760 761
 *
 * 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.
762
 */
763
void rxrpc_data_ready(struct sock *udp_sk)
764
{
765
	struct rxrpc_connection *conn;
766 767
	struct rxrpc_channel *chan;
	struct rxrpc_call *call;
768
	struct rxrpc_skb_priv *sp;
769
	struct rxrpc_local *local = udp_sk->sk_user_data;
770
	struct sk_buff *skb;
771
	unsigned int channel;
772
	int ret, skew;
773

774
	_enter("%p", udp_sk);
775 776 777

	ASSERT(!irqs_disabled());

778
	skb = skb_recv_datagram(udp_sk, 0, 1, &ret);
779 780 781 782 783 784 785
	if (!skb) {
		if (ret == -EAGAIN)
			return;
		_debug("UDP socket error %d", ret);
		return;
	}

D
David Howells 已提交
786
	rxrpc_new_skb(skb, rxrpc_skb_rx_received);
787 788 789 790 791

	_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 已提交
792
		rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
793
		__UDP_INC_STATS(&init_net, UDP_MIB_INERRORS, 0);
794 795 796 797
		_leave(" [CSUM failed]");
		return;
	}

798
	__UDP_INC_STATS(&init_net, UDP_MIB_INDATAGRAMS, 0);
799

800 801 802
	/* The socket buffer we have is owned by UDP, with UDP's data all over
	 * it, but we really want our own data there.
	 */
803 804 805
	skb_orphan(skb);
	sp = rxrpc_skb(skb);

806 807 808 809 810 811 812 813
	if (IS_ENABLED(CONFIG_AF_RXRPC_INJECT_LOSS)) {
		static int lose;
		if ((lose++ & 7) == 7) {
			rxrpc_lose_skb(skb, rxrpc_skb_rx_lost);
			return;
		}
	}

814 815 816 817
	_net("Rx UDP packet from %08x:%04hu",
	     ntohl(ip_hdr(skb)->saddr), ntohs(udp_hdr(skb)->source));

	/* dig out the RxRPC connection details */
818
	if (rxrpc_extract_header(sp, skb) < 0)
819
		goto bad_message;
820
	trace_rxrpc_rx_packet(sp);
821 822 823

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

826 827
	if (sp->hdr.type >= RXRPC_N_PACKET_TYPES ||
	    !((RXRPC_SUPPORTED_PACKET_TYPES >> sp->hdr.type) & 1)) {
828 829 830 831
		_proto("Rx Bad Packet Type %u", sp->hdr.type);
		goto bad_message;
	}

832 833
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_VERSION:
834 835
		rxrpc_post_packet_to_local(local, skb);
		goto out;
836

837 838 839 840 841 842 843 844 845 846 847 848
	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;
	}
849

850 851 852
	rcu_read_lock();

	conn = rxrpc_find_connection_rcu(local, skb);
853 854 855
	if (conn) {
		if (sp->hdr.securityIndex != conn->security_ix)
			goto wrong_security;
856

857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872
		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);
		}
873

874
		/* Call-bound packets are routed by connection channel. */
875 876
		channel = sp->hdr.cid & RXRPC_CHANNELMASK;
		chan = &conn->channels[channel];
877 878 879 880 881 882

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

		if (sp->hdr.callNumber == chan->last_call) {
883 884
			/* For the previous service call, if completed successfully, we
			 * discard all further packets.
885
			 */
D
David Howells 已提交
886
			if (rxrpc_conn_is_service(conn) &&
887 888 889 890
			    (chan->last_type == RXRPC_PACKET_TYPE_ACK ||
			     sp->hdr.type == RXRPC_PACKET_TYPE_ABORT))
				goto discard_unlock;

891 892
			/* But otherwise we need to retransmit the final packet from
			 * data cached in the connection record.
893 894 895 896
			 */
			rxrpc_post_packet_to_conn(conn, skb);
			goto out_unlock;
		}
897

898
		call = rcu_dereference(chan->call);
899 900 901 902
	} else {
		skew = 0;
		call = NULL;
	}
903

904 905 906 907 908 909 910 911 912 913 914 915
	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;
		}
916
		rxrpc_send_ping(call, skb, skew);
917
	}
918

919 920 921
	rxrpc_input_call_packet(call, skb, skew);
	goto discard_unlock;

922
discard_unlock:
923
	rcu_read_unlock();
924
discard:
D
David Howells 已提交
925
	rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
926
out:
927
	trace_rxrpc_rx_done(0, 0);
928 929
	return;

930
out_unlock:
931
	rcu_read_unlock();
932
	goto out;
933

934 935 936 937 938 939
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;
940

941 942
bad_message_unlock:
	rcu_read_unlock();
943
bad_message:
944 945
	trace_rxrpc_abort("BAD", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
			  RX_PROTOCOL_ERROR, EBADMSG);
946
	skb->priority = RX_PROTOCOL_ERROR;
947 948
post_abort:
	skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT;
949 950
reject_packet:
	trace_rxrpc_rx_done(skb->mark, skb->priority);
951 952 953
	rxrpc_reject_packet(local, skb);
	_leave(" [badmsg]");
}