mirror of https://gitee.com/openkylin/linux.git
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: Jan Kara <jack@suse.cz> Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
8ccd271f7a
commit
98a2139f4f
|
@ -2767,11 +2767,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;
|
||||
|
|
Loading…
Reference in New Issue