Re: [PATCH] rxrpc: Correctly handle ack at end of client call transmit phase

From: David Miller
Date: Tue Nov 24 2015 - 17:15:22 EST


From: David Howells <dhowells@xxxxxxxxxx>
Date: Tue, 24 Nov 2015 14:41:59 +0000

> Normally, the transmit phase of a client call is implicitly ack'd by the
> reception of the first data packet of the response being received.
> However, if a security negotiation happens, the transmit phase, if it is
> entirely contained in a single packet, may get an ack packet in response
> and then may get aborted due to security negotiation failure.
>
> Because the client has shifted state to RXRPC_CALL_CLIENT_AWAIT_REPLY due
> to having transmitted all the data, the code that handles processing of the
> received ack packet doesn't note the hard ack the data packet.
>
> The following abort packet in the case of security negotiation failure then
> incurs an assertion failure when it tries to drain the Tx queue because the
> hard ack state is out of sync (hard ack means the packets have been
> processed and can be discarded by the sender; a soft ack means that the
> packets are received but could still be discarded and rerequested by the
> receiver).
>
> To fix this, we should record the hard ack we received for the ack packet.
>
> The assertion failure looks like:
...
> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>

Applied, thanks David.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/