Commit 29bb3158 authored by Daniel N Pettersson's avatar Daniel N Pettersson Committed by Steve French

cifs: fix IPv6 link local, with scope id, address parsing

When the IP address is gotten from the UNC, use only the address part
of the UNC. Else all after the percent sign in an IPv6 link local
address is interpreted as a scope id. This includes the slash and
share name. A scope id is expected to be an integer and any trailing
characters makes the conversion to integer fail.
Example of mount command that fails:
mount -i -t cifs //fe80::6a05:caff:fe3e:8ffc%2/test /mnt/t -o sec=none
Signed-off-by: default avatarDaniel N Pettersson <danielnp@axis.com>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
parent 564277ec
...@@ -1945,9 +1945,14 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, ...@@ -1945,9 +1945,14 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
} }
if (!got_ip) { if (!got_ip) {
int len;
const char *slash;
/* No ip= option specified? Try to get it from UNC */ /* No ip= option specified? Try to get it from UNC */
if (!cifs_convert_address(dstaddr, &vol->UNC[2], /* Use the address part of the UNC. */
strlen(&vol->UNC[2]))) { slash = strchr(&vol->UNC[2], '\\');
len = slash - &vol->UNC[2];
if (!cifs_convert_address(dstaddr, &vol->UNC[2], len)) {
pr_err("Unable to determine destination address.\n"); pr_err("Unable to determine destination address.\n");
goto cifs_parse_mount_err; goto cifs_parse_mount_err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment