rxrpc: Fix oops due to non-existence of prealloc backlog struct
authorDavid Howells <dhowells@redhat.com>
Tue, 8 Jul 2025 21:15:04 +0000 (22:15 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 10 Jul 2025 02:41:44 +0000 (19:41 -0700)
If an AF_RXRPC service socket is opened and bound, but calls are
preallocated, then rxrpc_alloc_incoming_call() will oops because the
rxrpc_backlog struct doesn't get allocated until the first preallocation is
made.

Fix this by returning NULL from rxrpc_alloc_incoming_call() if there is no
backlog struct.  This will cause the incoming call to be aborted.

Reported-by: Junvyyang, Tencent Zhuque Lab <zhuque@tencent.com>
Suggested-by: Junvyyang, Tencent Zhuque Lab <zhuque@tencent.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: LePremierHomme <kwqcheii@proton.me>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Willy Tarreau <w@1wt.eu>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250708211506.2699012-3-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/call_accept.c

index 7271977b1683c255aa8f2994187d0407e081955f..49fccee1a7262c1b1de57478a90c3bdae3f95ac8 100644 (file)
@@ -255,6 +255,9 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
        unsigned short call_tail, conn_tail, peer_tail;
        unsigned short call_count, conn_count;
 
+       if (!b)
+               return NULL;
+
        /* #calls >= #conns >= #peers must hold true. */
        call_head = smp_load_acquire(&b->call_backlog_head);
        call_tail = b->call_backlog_tail;