]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
lockd: Do not monitor when looking up the LOCK_MSG callback host
authorChuck Lever <chuck.lever@oracle.com>
Tue, 12 May 2026 18:13:40 +0000 (14:13 -0400)
committerChuck Lever <cel@kernel.org>
Tue, 9 Jun 2026 20:32:59 +0000 (16:32 -0400)
A LOCK_MSG handler that fails to obtain a host returns
rpc_system_err, which causes the dispatcher to send an RPC-level
error rather than an NLM LOCK_RES denial. Before the xdrgen
conversion, the outer host lookup was unmonitored, so an NSM
upcall failure was reported back to the client through LOCK_RES
with status nlm_lck_denied_nolocks generated by the inner helper.

The xdrgen conversion replaced the unmonitored lookup with
nlm4svc_lookup_host(..., true). When nsm_monitor() fails, the
outer lookup now returns NULL, so the procedure short-circuits to
rpc_system_err and __nlm4svc_proc_lock_msg() never runs. The
client therefore receives no LOCK_RES, regressing the legacy
behavior.

The inner helper still performs a monitored lookup while building
the LOCK_RES, so the outer call only needs an unmonitored host
reference for the callback path. Pass false here to restore the
previous semantics.

Fixes: b2be4e28c23a ("lockd: Use xdrgen XDR functions for the NLMv4 LOCK_MSG procedure")
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/lockd/svc4proc.c

index 886b56317e5fd3bc289c1b1dff7632ac1bfb6b06..e3a6d69c1fa6686d0249f8313ffc24aad39cace7 100644 (file)
@@ -698,7 +698,7 @@ static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp)
        struct nlm4_lockargs_wrapper *argp = rqstp->rq_argp;
        struct nlm_host *host;
 
-       host = nlm4svc_lookup_host(rqstp, argp->xdrgen.alock.caller_name, true);
+       host = nlm4svc_lookup_host(rqstp, argp->xdrgen.alock.caller_name, false);
        if (!host)
                return rpc_system_err;