aboutsummaryrefslogtreecommitdiff
path: root/fs/nfs
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2011-09-03 01:09:43 +0200
committerBen Hutchings <ben@decadent.org.uk>2012-05-11 13:14:28 +0100
commitbcd008fcd3c3d6e50ffc4eb5cf6b7f25f3d1d1dd (patch)
tree1a87e259a87df85b8627bfe9d68edd050c2121d2 /fs/nfs
parent0d8421fee40cb7a579e3793957b6f74b259fb1b9 (diff)
nfs: Enclose hostname in brackets when needed in nfs_do_root_mount
commit 98a2139f4f4d7b5fcc3a54c7fddbe88612abed20 upstream. When hostname contains colon (e.g. when it is an IPv6 address) it needs to be enclosed in brackets to make parsing of NFS device string possible. Fix nfs_do_root_mount() to enclose hostname properly when needed. NFS code actually does not need this as it does not parse the string passed by nfs_do_root_mount() but the device string is exposed to userspace in /proc/mounts. CC: Josh Boyer <jwboyer@redhat.com> CC: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/super.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 3ada13c9986..376cd65e0ed 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -2708,11 +2708,15 @@ static struct vfsmount *nfs_do_root_mount(struct file_system_type *fs_type,
char *root_devname;
size_t len;
- len = strlen(hostname) + 3;
+ len = strlen(hostname) + 5;
root_devname = kmalloc(len, GFP_KERNEL);
if (root_devname == NULL)
return ERR_PTR(-ENOMEM);
- snprintf(root_devname, len, "%s:/", hostname);
+ /* Does hostname needs to be enclosed in brackets? */
+ if (strchr(hostname, ':'))
+ snprintf(root_devname, len, "[%s]:/", hostname);
+ else
+ snprintf(root_devname, len, "%s:/", hostname);
root_mnt = vfs_kern_mount(fs_type, flags, root_devname, data);
kfree(root_devname);
return root_mnt;