提交 98a2139f 编写于 作者: J Jan Kara 提交者: Trond Myklebust

nfs: Enclose hostname in brackets when needed in nfs_do_root_mount

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: NJan Kara <jack@suse.cz>
Cc: stable@vger.kernel.org
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 8ccd271f
...@@ -2767,11 +2767,15 @@ static struct vfsmount *nfs_do_root_mount(struct file_system_type *fs_type, ...@@ -2767,11 +2767,15 @@ static struct vfsmount *nfs_do_root_mount(struct file_system_type *fs_type,
char *root_devname; char *root_devname;
size_t len; size_t len;
len = strlen(hostname) + 3; len = strlen(hostname) + 5;
root_devname = kmalloc(len, GFP_KERNEL); root_devname = kmalloc(len, GFP_KERNEL);
if (root_devname == NULL) if (root_devname == NULL)
return ERR_PTR(-ENOMEM); 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); root_mnt = vfs_kern_mount(fs_type, flags, root_devname, data);
kfree(root_devname); kfree(root_devname);
return root_mnt; return root_mnt;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册