input.c 21.0 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
 * Apply a hard ACK by advancing the Tx window.
41
 */
42
static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to)
43
{
44 45
	struct sk_buff *skb, *list = NULL;
	int ix;
46

47
	spin_lock(&call->lock);
48

49 50 51 52 53 54 55 56 57 58
	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];
		rxrpc_see_skb(skb);
		call->rxtx_buffer[ix] = NULL;
		call->rxtx_annotations[ix] = 0;
		skb->next = list;
		list = skb;
	}
59

60
	spin_unlock(&call->lock);
61

62 63
	wake_up(&call->waitq);

64 65 66 67
	while (list) {
		skb = list;
		list = skb->next;
		skb->next = NULL;
68 69
		rxrpc_free_skb(skb);
	}
70
}
71

72 73 74 75 76 77 78 79 80
/*
 * 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("");
81

82 83 84 85 86 87 88 89 90
	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;
91 92
	}

93
	rxrpc_rotate_tx_window(call, call->tx_top);
94

95
	write_lock(&call->state_lock);
96

97 98 99 100 101 102 103 104 105 106
	switch (call->state) {
	default:
		break;
	case RXRPC_CALL_CLIENT_AWAIT_REPLY:
		call->state = RXRPC_CALL_CLIENT_RECV_REPLY;
		break;
	case RXRPC_CALL_SERVER_AWAIT_ACK:
		__rxrpc_call_completed(call);
		rxrpc_notify_socket(call);
		break;
107 108
	}

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
	write_unlock(&call->state_lock);
	_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;
	unsigned int len = skb->data_len;
	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;
148

149 150
protocol_error:
	return false;
151 152 153
}

/*
154 155 156 157 158 159 160 161 162 163 164
 * 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).
165
 */
166 167
static void rxrpc_input_dup_data(struct rxrpc_call *call, rxrpc_seq_t seq,
				 u8 annotation, bool *_jumbo_dup)
168
{
169 170 171
	/* Discard normal packets that are duplicates. */
	if (annotation == 0)
		return;
172

173 174 175 176 177 178 179 180 181
	/* 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.
	 */
	if (!*_jumbo_dup) {
		call->nr_jumbo_dup++;
		*_jumbo_dup = true;
	}
}
182

183 184 185 186 187 188 189 190 191 192 193 194 195 196
/*
 * 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;
	bool immediate_ack = false, jumbo_dup = false, queued;
	u16 len;
	u8 ack = 0, flags, annotation = 0;
197

198 199
	_enter("{%u,%u},{%u,%u}",
	       call->rx_hard_ack, call->rx_top, skb->data_len, seq);
200

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

204 205
	if (call->state >= RXRPC_CALL_COMPLETE)
		return;
206

207 208 209 210 211 212
	/* 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;
213

214
	call->ackr_prev_seq = seq;
215

216 217
	hard_ack = READ_ONCE(call->rx_hard_ack);
	if (after(seq, hard_ack + call->rx_winsize)) {
218
		ack = RXRPC_ACK_EXCEEDS_WINDOW;
219 220
		ack_serial = serial;
		goto ack;
221 222
	}

223 224 225 226 227 228
	flags = sp->hdr.flags;
	if (flags & RXRPC_JUMBO_PACKET) {
		if (call->nr_jumbo_dup > 3) {
			ack = RXRPC_ACK_NOSPACE;
			ack_serial = serial;
			goto ack;
229
		}
230
		annotation = 1;
231 232
	}

233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
next_subpacket:
	queued = false;
	ix = seq & RXRPC_RXTX_BUFF_MASK;
	len = skb->data_len;
	if (flags & RXRPC_JUMBO_PACKET)
		len = RXRPC_JUMBO_DATALEN;

	if (flags & RXRPC_LAST_PACKET) {
		if (test_and_set_bit(RXRPC_CALL_RX_LAST, &call->flags) &&
		    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);
248 249
	}

250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
	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]) {
		rxrpc_input_dup_data(call, seq, annotation, &jumbo_dup);
		if (ack != RXRPC_ACK_DUPLICATE) {
			ack = RXRPC_ACK_DUPLICATE;
			ack_serial = serial;
266
		}
267 268
		immediate_ack = true;
		goto skip;
269 270
	}

271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293
	/* 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().
	 */
	rxrpc_get_skb(skb);
	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);
	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;
294 295
	}

296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
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;

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

312 313 314 315
	if (queued && flags & RXRPC_LAST_PACKET && !ack) {
		ack = RXRPC_ACK_DELAY;
		ack_serial = serial;
	}
316

317 318 319 320
ack:
	if (ack)
		rxrpc_propose_ACK(call, ack, skew, ack_serial,
				  immediate_ack, true);
321

322 323 324
	if (sp->hdr.seq == READ_ONCE(call->rx_hard_ack) + 1)
		rxrpc_notify_socket(call);
	_leave(" [queued]");
325 326 327
}

/*
328
 * Process the extra information that may be appended to an ACK packet
329
 */
330 331
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
				struct rxrpc_ackinfo *ackinfo)
332
{
333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
	struct rxrpc_peer *peer;
	unsigned int mtu;

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

	if (call->tx_winsize > ntohl(ackinfo->rwind))
		call->tx_winsize = ntohl(ackinfo->rwind);

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

357 358 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
/*
 * 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;

	for (; nr_acks > 0; nr_acks--, seq++) {
		ix = seq & RXRPC_RXTX_BUFF_MASK;
		switch (*acks) {
		case RXRPC_ACK_TYPE_ACK:
			call->rxtx_annotations[ix] = RXRPC_TX_ANNO_ACK;
			break;
		case RXRPC_ACK_TYPE_NACK:
			if (call->rxtx_annotations[ix] == RXRPC_TX_ANNO_NAK)
				continue;
			call->rxtx_annotations[ix] = RXRPC_TX_ANNO_NAK;
			resend = true;
			break;
		default:
			return rxrpc_proto_abort("SFT", call, 0);
386 387
		}
	}
388 389 390 391

	if (resend &&
	    !test_and_set_bit(RXRPC_CALL_EV_RESEND, &call->events))
		rxrpc_queue_call(call);
392 393 394
}

/*
395 396 397 398 399 400 401 402
 * 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.
403
 */
404 405
static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
			    u16 skew)
406 407
{
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
408 409 410 411 412 413 414 415 416 417 418 419 420
	union {
		struct rxrpc_ackpacket ack;
		struct rxrpc_ackinfo info;
		u8 acks[RXRPC_MAXACKS];
	} buf;
	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);
421
	}
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
	sp->offset += sizeof(buf.ack);

	first_soft_ack = ntohl(buf.ack.firstPacket);
	hard_ack = first_soft_ack - 1;
	nr_acks = buf.ack.nAcks;

	_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),
	       ntohl(buf.ack.serial),
	       rxrpc_acks(buf.ack.reason),
	       buf.ack.nAcks);

	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) {
442
		rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
443
				  skew, sp->hdr.serial, true, true);
444 445
	}

446 447 448 449 450 451
	offset = sp->offset + nr_acks + 3;
	if (skb->data_len >= offset + sizeof(buf.info)) {
		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);
	}
452

453 454
	if (first_soft_ack == 0)
		return rxrpc_proto_abort("AK0", call, 0);
455

456 457 458 459 460 461 462
	/* 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;
463
	default:
464 465
		return;
	}
466

467 468 469 470 471 472 473
	/* 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;
474

475 476 477 478 479
	if (test_bit(RXRPC_CALL_TX_LAST, &call->flags) &&
	    hard_ack == call->tx_top) {
		rxrpc_end_tx_phase(call, "ETA");
		return;
	}
480

481 482 483
	if (before(hard_ack, call->tx_hard_ack) ||
	    after(hard_ack, call->tx_top))
		return rxrpc_proto_abort("AKW", call, 0);
484

485 486
	if (after(hard_ack, call->tx_hard_ack))
		rxrpc_rotate_tx_window(call, hard_ack);
487

488 489
	if (after(first_soft_ack, call->tx_top))
		return;
490

491 492 493 494 495
	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);
496 497 498
}

/*
499
 * Process an ACKALL packet.
500
 */
501
static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
502
{
503
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
504

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

507 508
	rxrpc_end_tx_phase(call, "ETL");
}
509

510 511 512 513 514 515 516 517
/*
 * 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;
518

519
	_enter("");
520

521 522 523
	if (skb->len >= 4 &&
	    skb_copy_bits(skb, sp->offset, &wtmp, sizeof(wtmp)) >= 0)
		abort_code = ntohl(wtmp);
524

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

527 528 529
	if (rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
				      abort_code, ECONNABORTED))
		rxrpc_notify_socket(call);
530 531 532
}

/*
533
 * Process an incoming call packet.
534
 */
535 536
static void rxrpc_input_call_packet(struct rxrpc_call *call,
				    struct sk_buff *skb, u16 skew)
537
{
538
	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
539

540
	_enter("%p,%p", call, skb);
541

542 543 544 545
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_DATA:
		rxrpc_input_data(call, skb, skew);
		break;
546

547 548
	case RXRPC_PACKET_TYPE_ACK:
		rxrpc_input_ack(call, skb, skew);
549 550
		break;

551 552
	case RXRPC_PACKET_TYPE_BUSY:
		_proto("Rx BUSY %%%u", sp->hdr.serial);
553

554 555 556 557 558
		/* 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;
559

560 561 562
	case RXRPC_PACKET_TYPE_ABORT:
		rxrpc_input_abort(call, skb);
		break;
563

564 565 566
	case RXRPC_PACKET_TYPE_ACKALL:
		rxrpc_input_ackall(call, skb);
		break;
567

568 569 570
	default:
		_proto("Rx %s %%%u", rxrpc_pkts[sp->hdr.type], sp->hdr.serial);
		break;
571
	}
572

573 574 575 576 577
	_leave("");
}

/*
 * post connection-level events to the connection
578 579
 * - this includes challenges, responses, some aborts and call terminal packet
 *   retransmission.
580
 */
581
static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
582 583 584 585 586
				      struct sk_buff *skb)
{
	_enter("%p,%p", conn, skb);

	skb_queue_tail(&conn->rx_queue, skb);
587
	rxrpc_queue_conn(conn);
588 589
}

590 591 592 593 594 595 596 597 598 599
/*
 * 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);
600
	rxrpc_queue_local(local);
601 602
}

603 604 605 606 607 608 609 610 611 612 613
/*
 * 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);
}

614 615 616 617 618 619 620 621 622
/*
 * 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 */
623
	if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
624 625 626 627 628 629 630 631 632 633 634 635 636 637
		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);
638
	sp->offset = sizeof(whdr);
639 640 641
	return 0;
}

642 643 644
/*
 * handle data received on the local endpoint
 * - may be called in interrupt context
645 646 647 648
 *
 * 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.
649
 */
650
void rxrpc_data_ready(struct sock *udp_sk)
651
{
652
	struct rxrpc_connection *conn;
653 654
	struct rxrpc_channel *chan;
	struct rxrpc_call *call;
655
	struct rxrpc_skb_priv *sp;
656
	struct rxrpc_local *local = udp_sk->sk_user_data;
657
	struct sk_buff *skb;
658
	unsigned int channel;
659
	int ret, skew;
660

661
	_enter("%p", udp_sk);
662 663 664

	ASSERT(!irqs_disabled());

665
	skb = skb_recv_datagram(udp_sk, 0, 1, &ret);
666 667 668 669 670 671 672 673 674 675 676 677 678 679
	if (!skb) {
		if (ret == -EAGAIN)
			return;
		_debug("UDP socket error %d", ret);
		return;
	}

	rxrpc_new_skb(skb);

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

	/* we'll probably need to checksum it (didn't call sock_recvmsg) */
	if (skb_checksum_complete(skb)) {
		rxrpc_free_skb(skb);
680
		__UDP_INC_STATS(&init_net, UDP_MIB_INERRORS, 0);
681 682 683 684
		_leave(" [CSUM failed]");
		return;
	}

685
	__UDP_INC_STATS(&init_net, UDP_MIB_INDATAGRAMS, 0);
686

687 688 689
	/* The socket buffer we have is owned by UDP, with UDP's data all over
	 * it, but we really want our own data there.
	 */
690 691 692 693 694 695 696
	skb_orphan(skb);
	sp = rxrpc_skb(skb);

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

	/* dig out the RxRPC connection details */
697
	if (rxrpc_extract_header(sp, skb) < 0)
698
		goto bad_message;
699
	trace_rxrpc_rx_packet(sp);
700 701 702

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

705 706
	if (sp->hdr.type >= RXRPC_N_PACKET_TYPES ||
	    !((RXRPC_SUPPORTED_PACKET_TYPES >> sp->hdr.type) & 1)) {
707 708 709 710
		_proto("Rx Bad Packet Type %u", sp->hdr.type);
		goto bad_message;
	}

711 712
	switch (sp->hdr.type) {
	case RXRPC_PACKET_TYPE_VERSION:
713 714
		rxrpc_post_packet_to_local(local, skb);
		goto out;
715

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

729 730 731
	rcu_read_lock();

	conn = rxrpc_find_connection_rcu(local, skb);
732 733 734
	if (conn) {
		if (sp->hdr.securityIndex != conn->security_ix)
			goto wrong_security;
735

736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751
		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);
		}
752

753
		/* Call-bound packets are routed by connection channel. */
754 755
		channel = sp->hdr.cid & RXRPC_CHANNELMASK;
		chan = &conn->channels[channel];
756 757 758 759 760 761

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

		if (sp->hdr.callNumber == chan->last_call) {
762 763
			/* For the previous service call, if completed successfully, we
			 * discard all further packets.
764
			 */
D
David Howells 已提交
765
			if (rxrpc_conn_is_service(conn) &&
766 767 768 769
			    (chan->last_type == RXRPC_PACKET_TYPE_ACK ||
			     sp->hdr.type == RXRPC_PACKET_TYPE_ABORT))
				goto discard_unlock;

770 771
			/* But otherwise we need to retransmit the final packet from
			 * data cached in the connection record.
772 773 774 775
			 */
			rxrpc_post_packet_to_conn(conn, skb);
			goto out_unlock;
		}
776

777
		call = rcu_dereference(chan->call);
778 779 780 781
	} else {
		skew = 0;
		call = NULL;
	}
782

783 784 785 786 787 788 789 790 791 792 793 794
	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;
		}
795
	}
796

797 798 799
	rxrpc_input_call_packet(call, skb, skew);
	goto discard_unlock;

800
discard_unlock:
801
	rcu_read_unlock();
802 803
discard:
	rxrpc_free_skb(skb);
804
out:
805
	trace_rxrpc_rx_done(0, 0);
806 807
	return;

808
out_unlock:
809
	rcu_read_unlock();
810
	goto out;
811

812 813 814 815 816 817
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;
818

819 820
bad_message_unlock:
	rcu_read_unlock();
821
bad_message:
822 823
	trace_rxrpc_abort("BAD", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
			  RX_PROTOCOL_ERROR, EBADMSG);
824
	skb->priority = RX_PROTOCOL_ERROR;
825 826
post_abort:
	skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT;
827 828
reject_packet:
	trace_rxrpc_rx_done(skb->mark, skb->priority);
829 830 831
	rxrpc_reject_packet(local, skb);
	_leave(" [badmsg]");
}