[PATCH net v11 1/5] rxrpc: release challenge reference after aborted event
Zihan Xi
zihanx at nebusec.ai
Wed Oct 21 00:37:12 PDT 2026
A queued CHALLENGE holds a connection reference in sp->chall.conn.
When rxrpc_process_event() sees an already-aborted connection, it returns
before the CHALLENGE case releases that reference. Drop it after event
processing if the pointer is still set; the normal CHALLENGE path clears
the pointer when it releases the reference.
The leak was identified during AI-assisted review of the receive-queue
lifetime.
Fixes: 5800b1cf3fd8 ("rxrpc: Allow CHALLENGEs to the passed to the app for a RESPONSE")
Cc: stable at vger.kernel.org
Link: https://lore.kernel.org/all/cover.1792168462.git.zihanx@nebusec.ai/
Reported-by: Vega <vega at nebusec.ai>
Assisted-by: LLM
Co-developed-by: Luxing Yin <root at tr0jan.top>
Signed-off-by: Luxing Yin <root at tr0jan.top>
Signed-off-by: Zihan Xi <zihanx at nebusec.ai>
---
changes in v11:
- Split aborted-connection CHALLENGE reference cleanup into a standalone
patch.
- v10 Link: https://lore.kernel.org/all/cover.1792168462.git.zihanx@nebusec.ai/
---
net/rxrpc/conn_event.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c
index 611c790bc6d0c..02e9b18ee534d 100644
--- a/net/rxrpc/conn_event.c
+++ b/net/rxrpc/conn_event.c
@@ -391,8 +391,15 @@ static void rxrpc_do_process_connection(struct rxrpc_connection *conn)
/* go through the conn-level event packets, releasing the ref on this
* connection that each one has when we've finished with it */
while ((skb = skb_dequeue(&conn->rx_queue))) {
+ struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
+
rxrpc_see_skb(skb, rxrpc_skb_see_conn_work);
rxrpc_process_event(conn, skb);
+ if (sp->hdr.type == RXRPC_PACKET_TYPE_CHALLENGE && sp->chall.conn) {
+ rxrpc_put_connection(sp->chall.conn,
+ rxrpc_conn_put_challenge_input);
+ sp->chall.conn = NULL;
+ }
rxrpc_free_skb(skb, rxrpc_skb_put_conn_work);
}
}
--
2.43.0
More information about the linux-afs
mailing list