Files
linux/include/trace/events
David Howells 2fd895842d rxrpc: Fix notification vs call-release vs recvmsg
When a call is released, rxrpc takes the spinlock and removes it from
->recvmsg_q in an effort to prevent racing recvmsg() invocations from
seeing the same call.  Now, rxrpc_recvmsg() only takes the spinlock when
actually removing a call from the queue; it doesn't, however, take it in
the lead up to that when it checks to see if the queue is empty.  It *does*
hold the socket lock, which prevents a recvmsg/recvmsg race - but this
doesn't prevent sendmsg from ending the call because sendmsg() drops the
socket lock and relies on the call->user_mutex.

Fix this by firstly removing the bit in rxrpc_release_call() that dequeues
the released call and, instead, rely on recvmsg() to simply discard
released calls (done in a preceding fix).

Secondly, rxrpc_notify_socket() is abandoned if the call is already marked
as released rather than trying to be clever by setting both pointers in
call->recvmsg_link to NULL to trick list_empty().  This isn't perfect and
can still race, resulting in a released call on the queue, but recvmsg()
will now clean that up.

Fixes: 17926a7932 ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Junvyyang, Tencent Zhuque Lab <zhuque@tencent.com>
cc: LePremierHomme <kwqcheii@proton.me>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250717074350.3767366-4-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-07-17 07:50:48 -07:00
..
2024-11-22 11:43:27 -07:00
2024-10-29 08:54:06 +01:00
2025-05-08 15:22:45 +00:00
2023-07-04 19:40:16 +01:00
2024-05-08 10:39:26 +01:00
2023-03-24 11:01:29 +01:00
2023-12-29 11:58:27 -08:00
2023-07-17 08:18:17 -06:00
2024-11-11 00:26:46 -08:00
2025-05-22 14:55:37 -07:00
2024-05-14 07:22:35 -06:00
2024-09-11 20:44:31 -07:00
2024-09-28 15:13:56 +02:00
2024-06-19 12:44:22 +01:00
2025-04-11 18:58:10 -07:00
2023-07-17 08:18:17 -06:00
2023-09-19 07:04:49 +02:00