| From 98a2139f4f4d7b5fcc3a54c7fddbe88612abed20 Mon Sep 17 00:00:00 2001 |
| From: Jan Kara <jack@suse.cz> |
| Date: Sat, 3 Sep 2011 01:09:43 +0200 |
| Subject: nfs: Enclose hostname in brackets when needed in |
| nfs_do_root_mount |
| |
| From: Jan Kara <jack@suse.cz> |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/super.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/fs/nfs/super.c |
| +++ b/fs/nfs/super.c |
| @@ -2694,11 +2694,15 @@ static struct vfsmount *nfs_do_root_moun |
| 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; |