Commit 15bc77f9 authored by Aurelien Aptel's avatar Aurelien Aptel Committed by Steve French

cifs: move large array from stack to heap

This addresses some compile warnings that you can
see depending on configuration settings.
Signed-off-by: default avatarAurelien Aptel <aaptel@suse.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent ee13919c
...@@ -128,24 +128,31 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc, ...@@ -128,24 +128,31 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc,
int rc; int rc;
struct dfs_cache_tgt_list tl; struct dfs_cache_tgt_list tl;
struct dfs_cache_tgt_iterator *it = NULL; struct dfs_cache_tgt_iterator *it = NULL;
char tree[MAX_TREE_SIZE + 1]; char *tree;
const char *tcp_host; const char *tcp_host;
size_t tcp_host_len; size_t tcp_host_len;
const char *dfs_host; const char *dfs_host;
size_t dfs_host_len; size_t dfs_host_len;
tree = kzalloc(MAX_TREE_SIZE, GFP_KERNEL);
if (!tree)
return -ENOMEM;
if (tcon->ipc) { if (tcon->ipc) {
snprintf(tree, sizeof(tree), "\\\\%s\\IPC$", snprintf(tree, MAX_TREE_SIZE, "\\\\%s\\IPC$",
tcon->ses->server->hostname); tcon->ses->server->hostname);
return CIFSTCon(0, tcon->ses, tree, tcon, nlsc); rc = CIFSTCon(0, tcon->ses, tree, tcon, nlsc);
goto out;
} }
if (!tcon->dfs_path) if (!tcon->dfs_path) {
return CIFSTCon(0, tcon->ses, tcon->treeName, tcon, nlsc); rc = CIFSTCon(0, tcon->ses, tcon->treeName, tcon, nlsc);
goto out;
}
rc = dfs_cache_noreq_find(tcon->dfs_path + 1, NULL, &tl); rc = dfs_cache_noreq_find(tcon->dfs_path + 1, NULL, &tl);
if (rc) if (rc)
return rc; goto out;
extract_unc_hostname(tcon->ses->server->hostname, &tcp_host, extract_unc_hostname(tcon->ses->server->hostname, &tcp_host,
&tcp_host_len); &tcp_host_len);
...@@ -165,7 +172,7 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc, ...@@ -165,7 +172,7 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc,
continue; continue;
} }
snprintf(tree, sizeof(tree), "\\%s", tgt); snprintf(tree, MAX_TREE_SIZE, "\\%s", tgt);
rc = CIFSTCon(0, tcon->ses, tree, tcon, nlsc); rc = CIFSTCon(0, tcon->ses, tree, tcon, nlsc);
if (!rc) if (!rc)
...@@ -182,6 +189,8 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc, ...@@ -182,6 +189,8 @@ static int __cifs_reconnect_tcon(const struct nls_table *nlsc,
rc = -ENOENT; rc = -ENOENT;
} }
dfs_cache_free_tgts(&tl); dfs_cache_free_tgts(&tl);
out:
kfree(tree);
return rc; return rc;
} }
#else #else
......
...@@ -162,24 +162,31 @@ static int __smb2_reconnect(const struct nls_table *nlsc, ...@@ -162,24 +162,31 @@ static int __smb2_reconnect(const struct nls_table *nlsc,
int rc; int rc;
struct dfs_cache_tgt_list tl; struct dfs_cache_tgt_list tl;
struct dfs_cache_tgt_iterator *it = NULL; struct dfs_cache_tgt_iterator *it = NULL;
char tree[MAX_TREE_SIZE + 1]; char *tree;
const char *tcp_host; const char *tcp_host;
size_t tcp_host_len; size_t tcp_host_len;
const char *dfs_host; const char *dfs_host;
size_t dfs_host_len; size_t dfs_host_len;
tree = kzalloc(MAX_TREE_SIZE, GFP_KERNEL);
if (!tree)
return -ENOMEM;
if (tcon->ipc) { if (tcon->ipc) {
snprintf(tree, sizeof(tree), "\\\\%s\\IPC$", snprintf(tree, MAX_TREE_SIZE, "\\\\%s\\IPC$",
tcon->ses->server->hostname); tcon->ses->server->hostname);
return SMB2_tcon(0, tcon->ses, tree, tcon, nlsc); rc = SMB2_tcon(0, tcon->ses, tree, tcon, nlsc);
goto out;
} }
if (!tcon->dfs_path) if (!tcon->dfs_path) {
return SMB2_tcon(0, tcon->ses, tcon->treeName, tcon, nlsc); rc = SMB2_tcon(0, tcon->ses, tcon->treeName, tcon, nlsc);
goto out;
}
rc = dfs_cache_noreq_find(tcon->dfs_path + 1, NULL, &tl); rc = dfs_cache_noreq_find(tcon->dfs_path + 1, NULL, &tl);
if (rc) if (rc)
return rc; goto out;
extract_unc_hostname(tcon->ses->server->hostname, &tcp_host, extract_unc_hostname(tcon->ses->server->hostname, &tcp_host,
&tcp_host_len); &tcp_host_len);
...@@ -199,7 +206,7 @@ static int __smb2_reconnect(const struct nls_table *nlsc, ...@@ -199,7 +206,7 @@ static int __smb2_reconnect(const struct nls_table *nlsc,
continue; continue;
} }
snprintf(tree, sizeof(tree), "\\%s", tgt); snprintf(tree, MAX_TREE_SIZE, "\\%s", tgt);
rc = SMB2_tcon(0, tcon->ses, tree, tcon, nlsc); rc = SMB2_tcon(0, tcon->ses, tree, tcon, nlsc);
if (!rc) if (!rc)
...@@ -216,6 +223,8 @@ static int __smb2_reconnect(const struct nls_table *nlsc, ...@@ -216,6 +223,8 @@ static int __smb2_reconnect(const struct nls_table *nlsc,
rc = -ENOENT; rc = -ENOENT;
} }
dfs_cache_free_tgts(&tl); dfs_cache_free_tgts(&tl);
out:
kfree(tree);
return rc; return rc;
} }
#else #else
......
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