aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifssmb.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/cifs/cifssmb.c')
-rw-r--r--fs/cifs/cifssmb.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
index df5276e628bf..b968e5bd7df3 100644
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -2451,16 +2451,20 @@ querySymLinkRetry:
2451 if (rc || (pSMBr->ByteCount < 2)) 2451 if (rc || (pSMBr->ByteCount < 2))
2452 rc = -EIO; 2452 rc = -EIO;
2453 else { 2453 else {
2454 bool is_unicode;
2454 u16 count = le16_to_cpu(pSMBr->t2.DataCount); 2455 u16 count = le16_to_cpu(pSMBr->t2.DataCount);
2455 2456
2456 data_start = ((char *) &pSMBr->hdr.Protocol) + 2457 data_start = ((char *) &pSMBr->hdr.Protocol) +
2457 le16_to_cpu(pSMBr->t2.DataOffset); 2458 le16_to_cpu(pSMBr->t2.DataOffset);
2458 2459
2460 if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE)
2461 is_unicode = true;
2462 else
2463 is_unicode = false;
2464
2459 /* BB FIXME investigate remapping reserved chars here */ 2465 /* BB FIXME investigate remapping reserved chars here */
2460 *symlinkinfo = cifs_strndup_from_ucs(data_start, count, 2466 *symlinkinfo = cifs_strndup_from_ucs(data_start, count,
2461 pSMBr->hdr.Flags2 & 2467 is_unicode, nls_codepage);
2462 SMBFLG2_UNICODE,
2463 nls_codepage);
2464 if (!symlinkinfo) 2468 if (!symlinkinfo)
2465 rc = -ENOMEM; 2469 rc = -ENOMEM;
2466 } 2470 }
@@ -3930,7 +3934,7 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
3930 3934
3931 cFYI(1, ("num_referrals: %d dfs flags: 0x%x ... \n", 3935 cFYI(1, ("num_referrals: %d dfs flags: 0x%x ... \n",
3932 *num_of_nodes, 3936 *num_of_nodes,
3933 le16_to_cpu(pSMBr->DFSFlags))); 3937 le32_to_cpu(pSMBr->DFSFlags)));
3934 3938
3935 *target_nodes = kzalloc(sizeof(struct dfs_info3_param) * 3939 *target_nodes = kzalloc(sizeof(struct dfs_info3_param) *
3936 *num_of_nodes, GFP_KERNEL); 3940 *num_of_nodes, GFP_KERNEL);
@@ -3946,7 +3950,7 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
3946 int max_len; 3950 int max_len;
3947 struct dfs_info3_param *node = (*target_nodes)+i; 3951 struct dfs_info3_param *node = (*target_nodes)+i;
3948 3952
3949 node->flags = le16_to_cpu(pSMBr->DFSFlags); 3953 node->flags = le32_to_cpu(pSMBr->DFSFlags);
3950 if (is_unicode) { 3954 if (is_unicode) {
3951 __le16 *tmp = kmalloc(strlen(searchName)*2 + 2, 3955 __le16 *tmp = kmalloc(strlen(searchName)*2 + 2,
3952 GFP_KERNEL); 3956 GFP_KERNEL);