]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rxrpc: Fix socket notification race
authorDavid Howells <dhowells@redhat.com>
Wed, 24 Jun 2026 16:38:16 +0000 (17:38 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 25 Jun 2026 17:07:19 +0000 (10:07 -0700)
There's a race between rxrpc_recvmsg() and rxrpc_notify_socket(), whereby
the latter's attempt to avoid disabling interrupts and taking the socket's
recvmsg_lock if the call is already queued may happen simultaneously with
the former's discarding of a call that has nothing queued.

Fix this by removing the shortcut.  Note that this only affects userspace's
use of AF_RXRPC; the AFS filesystem driver doesn't use the socket queue.

Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
Link: https://sashiko.dev/#/patchset/20260616155749.2125907-1-dhowells%40redhat.com
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Jeffrey Altman <jaltman@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260624163819.3017002-10-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/recvmsg.c

index f382a47c6eb064a1f76e797d1464379fe187756f..9962e135cb73fcffa2436110583cf5a98f4fe42d 100644 (file)
@@ -27,8 +27,6 @@ void rxrpc_notify_socket(struct rxrpc_call *call)
 
        _enter("%d", call->debug_id);
 
-       if (!list_empty(&call->recvmsg_link))
-               return;
        if (test_bit(RXRPC_CALL_RELEASED, &call->flags)) {
                rxrpc_see_call(call, rxrpc_call_see_notify_released);
                return;