diff options
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r-- | fs/cifs/connect.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index ddefddeffd06..5299effa6f7d 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -4231,16 +4231,19 @@ build_unc_path_to_root(const struct smb_vol *vol, | |||
4231 | strlen(vol->prepath) + 1 : 0; | 4231 | strlen(vol->prepath) + 1 : 0; |
4232 | unsigned int unc_len = strnlen(vol->UNC, MAX_TREE_SIZE + 1); | 4232 | unsigned int unc_len = strnlen(vol->UNC, MAX_TREE_SIZE + 1); |
4233 | 4233 | ||
4234 | if (unc_len > MAX_TREE_SIZE) | ||
4235 | return ERR_PTR(-EINVAL); | ||
4236 | |||
4234 | full_path = kmalloc(unc_len + pplen + 1, GFP_KERNEL); | 4237 | full_path = kmalloc(unc_len + pplen + 1, GFP_KERNEL); |
4235 | if (full_path == NULL) | 4238 | if (full_path == NULL) |
4236 | return ERR_PTR(-ENOMEM); | 4239 | return ERR_PTR(-ENOMEM); |
4237 | 4240 | ||
4238 | strncpy(full_path, vol->UNC, unc_len); | 4241 | memcpy(full_path, vol->UNC, unc_len); |
4239 | pos = full_path + unc_len; | 4242 | pos = full_path + unc_len; |
4240 | 4243 | ||
4241 | if (pplen) { | 4244 | if (pplen) { |
4242 | *pos = CIFS_DIR_SEP(cifs_sb); | 4245 | *pos = CIFS_DIR_SEP(cifs_sb); |
4243 | strncpy(pos + 1, vol->prepath, pplen); | 4246 | memcpy(pos + 1, vol->prepath, pplen); |
4244 | pos += pplen; | 4247 | pos += pplen; |
4245 | } | 4248 | } |
4246 | 4249 | ||