linux/net/rxrpc
David Howells fc9de52de3 rxrpc: Fix missing locking causing hanging calls
If a call gets aborted (e.g. because kafs saw a signal) between it being
queued for connection and the I/O thread picking up the call, the abort
will be prioritised over the connection and it will be removed from
local->new_client_calls by rxrpc_disconnect_client_call() without a lock
being held.  This may cause other calls on the list to disappear if a race
occurs.

Fix this by taking the client_call_lock when removing a call from whatever
list its ->wait_link happens to be on.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: linux-afs@lists.infradead.org
Reported-by: Marc Dionne <marc.dionne@auristor.com>
Fixes: 9d35d880e0 ("rxrpc: Move client call connection to the I/O thread")
Link: https://patch.msgid.link/726660.1730898202@warthog.procyon.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-11-07 11:30:34 -08:00
..
af_rxrpc.c
ar-internal.h
call_accept.c
call_event.c
call_object.c
call_state.c
conn_client.c rxrpc: Fix missing locking causing hanging calls 2024-11-07 11:30:34 -08:00
conn_event.c
conn_object.c
conn_service.c
input.c
insecure.c
io_thread.c
Kconfig
key.c
local_event.c
local_object.c
Makefile
misc.c
net_ns.c
output.c
peer_event.c
peer_object.c
proc.c
protocol.h
recvmsg.c
rtt.c
rxkad.c
rxperf.c
security.c
sendmsg.c rxrpc: Fix uninitialised variable in rxrpc_send_data() 2024-10-03 16:23:21 -07:00
server_key.c
skbuff.c
sysctl.c
txbuf.c
utils.c