linux/net/rxrpc
Jeffrey Altman 1a2391c30c rxrpc: Fix detection of out of order acks
The rxrpc packet serial number cannot be safely used to compute out of
order ack packets for several reasons:

 1. The allocation of serial numbers cannot be assumed to imply the order
    by which acks are populated and transmitted.  In some rxrpc
    implementations, delayed acks and ping acks are transmitted
    asynchronously to the receipt of data packets and so may be transmitted
    out of order.  As a result, they can race with idle acks.

 2. Serial numbers are allocated by the rxrpc connection and not the call
    and as such may wrap independently if multiple channels are in use.

In any case, what matters is whether the ack packet provides new
information relating to the bounds of the window (the firstPacket and
previousPacket in the ACK data).

Fix this by discarding packets that appear to wind back the window bounds
rather than on serial number procession.

Fixes: 298bc15b20 ("rxrpc: Only take the rwind and mtu values from latest ACK")
Signed-off-by: Jeffrey Altman <jaltman@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-04-12 16:57:23 -07:00
..
af_rxrpc.c rxrpc: Make rxrpc_kernel_check_life() indicate if call completed 2019-04-12 16:57:23 -07:00
ar-internal.h rxrpc: Fix detection of out of order acks 2019-04-12 16:57:23 -07:00
call_accept.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-10-19 11:03:06 -07:00
call_event.c rxrpc: Fix lockup due to no error backoff after ack transmit error 2018-11-02 23:59:26 -07:00
call_object.c Revert "rxrpc: Allow failed client calls to be retried" 2019-01-15 21:33:36 -08:00
conn_client.c rxrpc: Fix client call queueing, waiting for channel 2019-03-08 18:24:53 -08:00
conn_event.c rxrpc: Trace received connection aborts 2019-04-12 16:57:23 -07:00
conn_object.c rxrpc: Drop the local endpoint arg from rxrpc_extract_addr_from_skb() 2018-10-04 09:32:28 +01:00
conn_service.c rxrpc: Fix apparent leak of rxrpc_local objects 2018-03-30 21:05:33 +01:00
input.c rxrpc: Fix detection of out of order acks 2019-04-12 16:57:23 -07:00
insecure.c rxrpc: Trace protocol errors in received packets 2017-04-06 11:09:39 +01:00
Kconfig rxrpc: Add config to inject packet loss 2016-09-17 11:24:04 +01:00
key.c rxrpc: Use correct timestamp from Kerberos 5 ticket 2017-08-29 10:55:06 +01:00
local_event.c rxrpc: Drop the local endpoint arg from rxrpc_extract_addr_from_skb() 2018-10-04 09:32:28 +01:00
local_object.c sockopt: Rename SO_TIMESTAMP* to SO_TIMESTAMP*_OLD 2019-02-03 11:17:30 -08:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
misc.c rxrpc: Fix call timeouts 2017-11-24 10:18:41 +00:00
net_ns.c rxrpc: Add /proc/net/rxrpc/peers to display peer list 2018-10-15 22:52:58 -07:00
output.c rxrpc: avoid clang -Wuninitialized warning 2019-03-23 21:48:30 -04:00
peer_event.c rxrpc: Clear socket error 2019-04-12 16:57:23 -07:00
peer_object.c rxrpc: Fix the packet reception routine 2018-10-08 22:42:04 +01:00
proc.c rxrpc: Add /proc/net/rxrpc/peers to display peer list 2018-10-15 22:52:58 -07:00
protocol.h rxrpc: Improve up-front incoming packet checking 2018-09-28 10:32:31 +01:00
recvmsg.c rxrpc: bad unlock balance in rxrpc_recvmsg 2019-02-06 10:54:07 -08:00
rxkad.c rxrpc: Remove VLA usage of skcipher 2018-09-28 12:46:07 +08:00
security.c rxrpc: remove unused static variables 2018-03-30 21:04:44 +01:00
sendmsg.c rxrpc: Allow errors to be returned from rxrpc_queue_packet() 2019-04-12 16:57:23 -07:00
skbuff.c rxrpc: Use rxrpc_free_skb() rather than rxrpc_lose_skb() 2018-10-04 09:32:27 +01:00
sysctl.c rxrpc: remove redundant static int 'zero' 2018-08-11 11:25:18 -07:00
utils.c rxrpc: Drop the local endpoint arg from rxrpc_extract_addr_from_skb() 2018-10-04 09:32:28 +01:00