summaryrefslogtreecommitdiff
path: root/fs/nfs/super.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-09-24 15:39:50 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2007-10-09 17:18:14 -0400
commit6e88e0618cb1e354a44cc49a996df4dd89511039 (patch)
treee5da37374d186cf3b6bd91ba2349675abe9d0a6d /fs/nfs/super.c
parent113632d00acb569420b14eb7575833ac7e2eb311 (diff)
NFS: Verify server address before invoking in-kernel mount client
Re-order mount option sanity checking slightly to ensure we have a valid server address *before* trying to do the mountd RPC call. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/super.c')
-rw-r--r--fs/nfs/super.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 11ab7ff6e087..13a3ab30b143 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -1100,6 +1100,10 @@ static int nfs_validate_mount_data(void *options,
if (mntfh->size < sizeof(mntfh->data))
memset(mntfh->data + mntfh->size, 0,
sizeof(mntfh->data) - mntfh->size);
+
+ if (!nfs_verify_server_address((struct sockaddr *) &data->addr))
+ goto out_no_address;
+
/*
* Translate to nfs_parsed_mount_data, which nfs_fill_super
* can deal with.
@@ -1131,6 +1135,10 @@ static int nfs_validate_mount_data(void *options,
if (nfs_parse_mount_options((char *)options, args) == 0)
return -EINVAL;
+ if (!nfs_verify_server_address((struct sockaddr *)
+ &args->nfs_server.address))
+ goto out_no_address;
+
c = strchr(dev_name, ':');
if (c == NULL)
return -EINVAL;
@@ -1159,10 +1167,6 @@ static int nfs_validate_mount_data(void *options,
goto out_v3_not_compiled;
#endif /* !CONFIG_NFS_V3 */
- if (!nfs_verify_server_address((struct sockaddr *)
- &args->nfs_server.address))
- goto out_no_address;
-
return 0;
out_no_data: