NFSv4: Fix two infinite loops in the mount code
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 27 Mar 2012 22:13:02 +0000 (18:13 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 28 Mar 2012 01:53:14 +0000 (21:53 -0400)
We can currently loop forever in nfs4_lookup_root() and in
nfs41_proc_secinfo_no_name(), if the first iteration returns a
NFS4ERR_DELAY or something else that causes exception.retry to get
set.

Reported-by: Weston Andros Adamson <dros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@vger.kernel.org
fs/nfs/nfs4proc.c

index 45df7d4a3acc1f92e18822b5285eb9d603ebe52b..ee9ca19457aba1add9e226c07c2fcbd152df7ef0 100644 (file)
@@ -2290,11 +2290,12 @@ static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
                switch (err) {
                case 0:
                case -NFS4ERR_WRONGSEC:
-                       break;
+                       goto out;
                default:
                        err = nfs4_handle_exception(server, err, &exception);
                }
        } while (exception.retry);
+out:
        return err;
 }
 
@@ -6229,11 +6230,12 @@ nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
                case 0:
                case -NFS4ERR_WRONGSEC:
                case -NFS4ERR_NOTSUPP:
-                       break;
+                       goto out;
                default:
                        err = nfs4_handle_exception(server, err, &exception);
                }
        } while (exception.retry);
+out:
        return err;
 }