[NFS]: Check that the server returns a valid regular file to our OPEN request
[deliverable/linux.git] / fs / nfs / nfs4proc.c
index c9ecb81196326633f420cdb26c70bda3bc1e5cb2..3db1c9f0b09c9d6e5e5c0802e29dbe5b03f51060 100644 (file)
@@ -419,6 +419,22 @@ static int _nfs4_proc_open(struct inode *dir, struct nfs4_state_owner  *sp, stru
        o_arg->clientid = sp->so_client->cl_clientid;
 
        status = rpc_call_sync(server->client, &msg, RPC_TASK_NOINTR);
+       if (status == 0) {
+               /* OPEN on anything except a regular file is disallowed in NFSv4 */
+               switch (o_res->f_attr->mode & S_IFMT) {
+                       case S_IFREG:
+                               break;
+                       case S_IFLNK:
+                               status = -ELOOP;
+                               break;
+                       case S_IFDIR:
+                               status = -EISDIR;
+                               break;
+                       default:
+                               status = -ENOTDIR;
+               }
+       }
+
        nfs_increment_open_seqid(status, o_arg->seqid);
        if (status != 0)
                goto out;
This page took 0.02393 seconds and 5 git commands to generate.