[CIFS] Fix final user of old string conversion code
Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
3410602732
commit
afe48c31ea
1 changed files with 38 additions and 42 deletions
|
@ -2564,7 +2564,6 @@ validate_ntransact(char *buf, char **ppparm, char **ppdata,
|
||||||
*pparmlen = parm_count;
|
*pparmlen = parm_count;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CIFS_EXPERIMENTAL */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
|
CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
|
||||||
|
@ -2611,14 +2610,14 @@ CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
|
||||||
} else { /* decode response */
|
} else { /* decode response */
|
||||||
__u32 data_offset = le32_to_cpu(pSMBr->DataOffset);
|
__u32 data_offset = le32_to_cpu(pSMBr->DataOffset);
|
||||||
__u32 data_count = le32_to_cpu(pSMBr->DataCount);
|
__u32 data_count = le32_to_cpu(pSMBr->DataCount);
|
||||||
if ((pSMBr->ByteCount < 2) || (data_offset > 512))
|
if ((pSMBr->ByteCount < 2) || (data_offset > 512)) {
|
||||||
/* BB also check enough total bytes returned */
|
/* BB also check enough total bytes returned */
|
||||||
rc = -EIO; /* bad smb */
|
rc = -EIO; /* bad smb */
|
||||||
else {
|
goto qreparse_out;
|
||||||
|
}
|
||||||
if (data_count && (data_count < 2048)) {
|
if (data_count && (data_count < 2048)) {
|
||||||
char *end_of_smb = 2 /* sizeof byte count */ +
|
char *end_of_smb = 2 /* sizeof byte count */ +
|
||||||
pSMBr->ByteCount +
|
pSMBr->ByteCount + (char *)&pSMBr->ByteCount;
|
||||||
(char *)&pSMBr->ByteCount;
|
|
||||||
|
|
||||||
struct reparse_data *reparse_buf =
|
struct reparse_data *reparse_buf =
|
||||||
(struct reparse_data *)
|
(struct reparse_data *)
|
||||||
|
@ -2630,23 +2629,19 @@ CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
|
||||||
}
|
}
|
||||||
if ((reparse_buf->LinkNamesBuf +
|
if ((reparse_buf->LinkNamesBuf +
|
||||||
reparse_buf->TargetNameOffset +
|
reparse_buf->TargetNameOffset +
|
||||||
reparse_buf->TargetNameLen) >
|
reparse_buf->TargetNameLen) > end_of_smb) {
|
||||||
end_of_smb) {
|
|
||||||
cFYI(1, ("reparse buf beyond SMB"));
|
cFYI(1, ("reparse buf beyond SMB"));
|
||||||
rc = -EIO;
|
rc = -EIO;
|
||||||
goto qreparse_out;
|
goto qreparse_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE) {
|
if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||||
name_len = UniStrnlen((wchar_t *)
|
cifs_from_ucs2(symlinkinfo, (__le16 *)
|
||||||
(reparse_buf->LinkNamesBuf +
|
(reparse_buf->LinkNamesBuf +
|
||||||
reparse_buf->TargetNameOffset),
|
reparse_buf->TargetNameOffset),
|
||||||
min(buflen/2,
|
buflen,
|
||||||
reparse_buf->TargetNameLen / 2));
|
reparse_buf->TargetNameLen,
|
||||||
cifs_strfromUCS_le(symlinkinfo,
|
nls_codepage, 0);
|
||||||
(__le16 *) (reparse_buf->LinkNamesBuf +
|
|
||||||
reparse_buf->TargetNameOffset),
|
|
||||||
name_len, nls_codepage);
|
|
||||||
} else { /* ASCII names */
|
} else { /* ASCII names */
|
||||||
strncpy(symlinkinfo,
|
strncpy(symlinkinfo,
|
||||||
reparse_buf->LinkNamesBuf +
|
reparse_buf->LinkNamesBuf +
|
||||||
|
@ -2663,7 +2658,7 @@ CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
|
||||||
does not go off the end of the buffer */
|
does not go off the end of the buffer */
|
||||||
cFYI(1, ("readlink result - %s", symlinkinfo));
|
cFYI(1, ("readlink result - %s", symlinkinfo));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
qreparse_out:
|
qreparse_out:
|
||||||
cifs_buf_release(pSMB);
|
cifs_buf_release(pSMB);
|
||||||
|
|
||||||
|
@ -2672,6 +2667,7 @@ qreparse_out:
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
#endif /* CIFS_EXPERIMENTAL */
|
||||||
|
|
||||||
#ifdef CONFIG_CIFS_POSIX
|
#ifdef CONFIG_CIFS_POSIX
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue