• Jeffrey Altman's avatar
    rxrpc: Fix detection of out of order acks · 4d1f1f1c
    Jeffrey Altman authored
    [ Upstream commit 1a2391c3 ]
    
    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: 298bc15b ("rxrpc: Only take the rwind and mtu values from latest ACK")
    Signed-off-by: default avatarJeffrey Altman <jaltman@auristor.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Tested-by: default avatarMarc Dionne <marc.dionne@auristor.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    4d1f1f1c
ar-internal.h 41.7 KB