Commit 27d0fc43 authored by David Howells's avatar David Howells

rxrpc: Don't transmit an ACK if there's no reason set

Don't transmit an ACK if call->ackr_reason in unset.  There's the
possibility of a race between recvmsg() sending an ACK and the background
processing thread trying to send the same one.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent dfa7d920
...@@ -137,6 +137,11 @@ int rxrpc_send_call_packet(struct rxrpc_call *call, u8 type) ...@@ -137,6 +137,11 @@ int rxrpc_send_call_packet(struct rxrpc_call *call, u8 type)
switch (type) { switch (type) {
case RXRPC_PACKET_TYPE_ACK: case RXRPC_PACKET_TYPE_ACK:
spin_lock_bh(&call->lock); spin_lock_bh(&call->lock);
if (!call->ackr_reason) {
spin_unlock_bh(&call->lock);
ret = 0;
goto out;
}
n = rxrpc_fill_out_ack(call, pkt); n = rxrpc_fill_out_ack(call, pkt);
call->ackr_reason = 0; call->ackr_reason = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment