3.16.62-rc1 review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Werschlein thomas.werschlein@geo.uzh.ch
commit 395a2076b4064f97d3fce03af15210ff2a7bb7f9 upstream.
This patch is required allows access to a Microsoft fileserver failover cluster behind a 1:1 NAT firewall.
The change also provides stronger context for authentication and share connection (see MS-SMB2 3.3.5.7 and MS-SRVS 3.1.6.8) as noted by Tom Talpey, and addresses comments about the buffer size for the UNC made by Aurélien Aptel.
Signed-off-by: Thomas Werschlein thomas.werschlein@geo.uzh.ch Signed-off-by: Steve French stfrench@microsoft.com CC: Tom Talpey ttalpey@microsoft.com Reviewed-by: Aurelien Aptel aaptel@suse.com [bwh: Backported to 3.16: The IPC$ path is generated in get_dfs_path() in a rather fragile way. Rather than replacing all instances of ses->serverName here, switch to using kasprintf() so the new code is close to that used upstream.] Signed-off-by: Ben Hutchings ben@decadent.org.uk --- --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -2829,15 +2829,10 @@ get_dfs_path(const unsigned int xid, str *referrals = NULL;
if (ses->ipc_tid == 0) { - temp_unc = kmalloc(2 /* for slashes */ + - strnlen(ses->serverName, SERVER_NAME_LEN_WITH_NULL * 2) - + 1 + 4 /* slash IPC$ */ + 2, GFP_KERNEL); + temp_unc = kasprintf(GFP_KERNEL, "\\%s\IPC$", + ses->server->hostname); if (temp_unc == NULL) return -ENOMEM; - temp_unc[0] = '\'; - temp_unc[1] = '\'; - strcpy(temp_unc + 2, ses->serverName); - strcpy(temp_unc + 2 + strlen(ses->serverName), "\IPC$"); rc = ses->server->ops->tree_connect(xid, ses, temp_unc, NULL, nls_codepage); cifs_dbg(FYI, "Tcon rc = %d ipc_tid = %d\n", rc, ses->ipc_tid);