]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rxrpc: Fix UAF in rxgk_issue_challenge()
authorDavid Howells <dhowells@redhat.com>
Tue, 9 Jun 2026 14:09:07 +0000 (15:09 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 12 Jun 2026 23:48:54 +0000 (16:48 -0700)
Fix rxgk_issue_challenge() to free the page containing the challenge
content after invoking the tracepoint as the whdr passed to the tracepoint
points into the page just freed.

Fixes: 9d1d2b59341f ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
Reported-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260609140911.838677-4-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/rxgk.c

index a1ee102abae18a3109f76e64eb95a91cdd7a48f2..77a67ace1d2481397658f9d57c58d463a9862192 100644 (file)
@@ -687,16 +687,17 @@ static int rxgk_issue_challenge(struct rxrpc_connection *conn)
        ret = do_udp_sendmsg(conn->local->socket, &msg, len);
        if (ret > 0)
                rxrpc_peer_mark_tx(conn->peer);
-       __free_page(page);
 
        if (ret < 0) {
                trace_rxrpc_tx_fail(conn->debug_id, serial, ret,
                                    rxrpc_tx_point_rxgk_challenge);
+               __free_page(page);
                return -EAGAIN;
        }
 
        trace_rxrpc_tx_packet(conn->debug_id, whdr,
                              rxrpc_tx_point_rxgk_challenge);
+       __free_page(page);
        _leave(" = 0");
        return 0;
 }