NFSD enforce filehandle check for source file in COPY
authorOlga Kornievskaia <kolga@netapp.com>
Fri, 19 Aug 2022 19:16:36 +0000 (15:16 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 26 Sep 2022 18:02:20 +0000 (14:02 -0400)
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>
fs/nfsd/nfs4proc.c

index 0437210b9898d434613504d17574bb4faecd34f5..757d8959f9927d15525881c16487e4cb23f57f73 100644 (file)
@@ -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;
                }