alistair23-linux/net/dccp
Andrea Bittau 709dd3aaf5 [DCCP]: Do not process a packet twice when it's not in state DCCP_OPEN.
When packets are received, the connection is either in DCCP_OPEN
[fast-path] or it isn't.  If it's not [e.g. DCCP_PARTOPEN] upper
layers will perform sanity checks and parse options.  If it is in
DCCP_OPEN, dccp_rcv_established() will do it.  It is important not to
re-parse options in dccp_rcv_established() when it is not called from
the fast-path.  Else, fore example, the ack vector will be added twice
and the CCID will see the packet twice.

The solution is to always enfore sanity checks from the upper layers.
When packets arrive in the fast-path, sanity checks will be performed
before calling dccp_rcv_established().

Note(acme): I rewrote the patch to achieve the same result but keeping
dccp_rcv_established with the previous semantics and having it split
into __dccp_rcv_established, that doesn't does do any sanity check,
code in state != DCCP_OPEN use this lighter version as they already do
the sanity checks.

Signed-off-by: Andrea Bittau <a.bittau@cs.ucl.ac.uk>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-01-03 14:25:17 -08:00
..
ccids [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
ackvec.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
ackvec.h [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
ccid.c [DCCP]: Initial implementation 2005-08-29 15:49:46 -07:00
ccid.h [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
dccp.h [DCCP]: Prepare the AF agnostic core for the introduction of DCCPv6 2006-01-03 13:10:50 -08:00
diag.c [IP_SOCKGLUE]: Remove most of the tcp specific calls 2006-01-03 13:10:58 -08:00
input.c [DCCP]: Do not process a packet twice when it's not in state DCCP_OPEN. 2006-01-03 14:25:17 -08:00
ipv4.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
ipv6.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
ipv6.h [DCCP]: Introduce DCCPv6 2006-01-03 13:10:52 -08:00
Kconfig [DCCP]: Make the Debug Menu available when DCCP is statically linked too 2005-08-29 16:11:27 -07:00
Makefile [DCCP]: Introduce DCCPv6 2006-01-03 13:10:52 -08:00
minisocks.c [DCCP]: Introduce DCCPv6 2006-01-03 13:10:52 -08:00
options.c [DCCP]: Don't use necessarily the same CCID for tx and rx 2005-09-18 00:18:52 -07:00
output.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
proto.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
timer.c [DCCP]: Fix the ACK and SEQ window variables settings 2005-08-29 16:03:42 -07:00