aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlga Kornievskaia2022-08-19 15:16:36 -0400
committerChuck Lever2022-09-26 14:02:20 -0400
commit754035ff79a14886e68c0c9f6fa80adb21f12b53 (patch)
tree080b5afd81c377e6eb4a5568a6d2d1ab87e31b39
parent97f8e62572555f8ad578d7b1739ba64d5d2cac0f (diff)
NFSD enforce filehandle check for source file in COPY
If the passed in filehandle for the source file in the COPY operation is not a regular file, the server MUST return NFS4ERR_WRONG_TYPE. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-rw-r--r--fs/nfsd/nfs4proc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index 0437210b9898..757d8959f992 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -1768,7 +1768,13 @@ static int nfsd4_do_async_copy(void *data)
filp = nfs42_ssc_open(copy->ss_mnt, &copy->c_fh,
&copy->stateid);
if (IS_ERR(filp)) {
- nfserr = nfserr_offload_denied;
+ switch (PTR_ERR(filp)) {
+ case -EBADF:
+ nfserr = nfserr_wrong_type;
+ break;
+ default:
+ nfserr = nfserr_offload_denied;
+ }
nfsd4_interssc_disconnect(copy->ss_mnt);
goto do_callback;
}