diff options
author | Jeff Layton <jlayton@redhat.com> | 2007-07-18 11:28:43 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-07-19 15:21:40 -0400 |
commit | 0a87cf128f3d3bc6aa7b1040e73109c974ed875a (patch) | |
tree | 07bfeee89a7df2377cdb2b7d6770d66edd8bb308 | |
parent | f9d888fcd9665b863fa042212a3ee7b4c51399f6 (diff) |
NFSv4: handle lack of clientaddr in option string
If a NFSv4 mount is attempted with string based options, and the
option string doesn't contain a clientaddr= option, the kernel will
currently oops. Check for this situation and return a proper error.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | fs/nfs/super.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index adffe1615c51..b34b7a711d5b 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -1685,6 +1685,9 @@ static int nfs4_validate_mount_data(struct nfs4_mount_data **options, | |||
1685 | 1685 | ||
1686 | dprintk("MNTPATH: %s\n", *mntpath); | 1686 | dprintk("MNTPATH: %s\n", *mntpath); |
1687 | 1687 | ||
1688 | if (args.client_address == NULL) | ||
1689 | goto out_no_client_address; | ||
1690 | |||
1688 | *ip_addr = args.client_address; | 1691 | *ip_addr = args.client_address; |
1689 | 1692 | ||
1690 | break; | 1693 | break; |
@@ -1705,6 +1708,10 @@ out_inval_auth: | |||
1705 | out_no_address: | 1708 | out_no_address: |
1706 | dfprintk(MOUNT, "NFS4: mount program didn't pass remote address\n"); | 1709 | dfprintk(MOUNT, "NFS4: mount program didn't pass remote address\n"); |
1707 | return -EINVAL; | 1710 | return -EINVAL; |
1711 | |||
1712 | out_no_client_address: | ||
1713 | dfprintk(MOUNT, "NFS4: mount program didn't pass callback address\n"); | ||
1714 | return -EINVAL; | ||
1708 | } | 1715 | } |
1709 | 1716 | ||
1710 | /* | 1717 | /* |