]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
NFSv4.1: protect destroying and nullifying bc_serv structure
authorOlga Kornievskaia <okorniev@redhat.com>
Tue, 4 Nov 2025 22:29:27 +0000 (17:29 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 23 Nov 2025 20:30:12 +0000 (15:30 -0500)
When we are shutting down the client, we free the callback
server structure and then at a later pointer we free the
transport used by the client. Yet, it's possible that after
the callback server is freed, the transport receives a
backchannel request at which point we can dereferene freed
memory. Instead, do the freeing the bc server and nullying
bc_serv under the lock.

Signed-off-by: Olga Kornievskaia <okorniev@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/callback.c

index 8b674ee093a6065df7f1fce15068a85742371cb8..fabda0f6ec1a8ab1017553b755693a4a371f578d 100644 (file)
@@ -270,7 +270,7 @@ void nfs_callback_down(int minorversion, struct net *net, struct rpc_xprt *xprt)
        if (cb_info->users == 0) {
                svc_set_num_threads(serv, NULL, 0);
                dprintk("nfs_callback_down: service destroyed\n");
-               svc_destroy(&cb_info->serv);
+               xprt_svc_destroy_nullify_bc(xprt, &cb_info->serv);
        }
        mutex_unlock(&nfs_callback_mutex);
 }