| From 05e9cfb408b24debb3a85fd98edbfd09dd148881 Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Date: Tue, 27 Mar 2012 18:13:02 -0400 |
| Subject: NFSv4: Fix two infinite loops in the mount code |
| |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| |
| commit 05e9cfb408b24debb3a85fd98edbfd09dd148881 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/nfs4proc.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/fs/nfs/nfs4proc.c |
| +++ b/fs/nfs/nfs4proc.c |
| @@ -2242,11 +2242,12 @@ static int nfs4_lookup_root(struct nfs_s |
| switch (err) { |
| case 0: |
| case -NFS4ERR_WRONGSEC: |
| - break; |
| + goto out; |
| default: |
| err = nfs4_handle_exception(server, err, &exception); |
| } |
| } while (exception.retry); |
| +out: |
| return err; |
| } |
| |
| @@ -6099,11 +6100,12 @@ nfs41_proc_secinfo_no_name(struct nfs_se |
| 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; |
| } |
| |