mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 11:03:07 -04:00
nfsd: fix nfsd_file leak on inter-server COPY setup failure
When nfsd4_setup_inter_ssc() fails, nfsd4_copy() returns
nfserr_offload_denied directly, bypassing the out: label where
release_copy_files() would drop the nf_dst reference taken by
nfs4_preprocess_stateid_op(). Each failed inter-server COPY
leaks one nfsd_file, pinning file/inode/dentry/vfsmount.
Fix by setting status and jumping to out: instead of returning
directly.
Fixes: ce0887ac96 ("NFSD add nfs4 inter ssc to nfsd4_copy")
Cc: stable@vger.kernel.org
Assisted-by: kres:claude-opus-4-7
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260531-nfsd-testing-v1-3-7bfa481b0540@kernel.org
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -2159,16 +2159,14 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||
}
|
||||
status = nfsd4_setup_inter_ssc(rqstp, cstate, copy);
|
||||
if (status) {
|
||||
trace_nfsd_copy_done(copy, status);
|
||||
return nfserr_offload_denied;
|
||||
status = nfserr_offload_denied;
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
trace_nfsd_copy_intra(copy);
|
||||
status = nfsd4_setup_intra_ssc(rqstp, cstate, copy);
|
||||
if (status) {
|
||||
trace_nfsd_copy_done(copy, status);
|
||||
return status;
|
||||
}
|
||||
if (status)
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(©->fh, &cstate->current_fh.fh_handle,
|
||||
|
||||
Reference in New Issue
Block a user