5 cifs/smb3 fixes, one for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmMBX5YACgkQiiy9cAdy T1GNGgv/bH2tKQ+xOSoHgAUB8x5C1qWCba1KqmF/1e86QWkEaOy3APPH0D4whm2T KsO9bI2xLAO7TnsGjr+llPRWLE4uyL3tg4PRuoHJdLlq0UibvWcd7crtRfJtyNOm E8S0ouJ0+0Dv026c3KKovYrnHtin/I/KLZp57W1qmslyJEaHflxW4RqEOROLYTjK FpEtKyMO1/ivcK6s8l2RcNMcHqkx+HZvzNub4hAdUJOTf8DJ2lLc/PjfDtB4HQlE d+Pant1zdZaehZcymzk6x8oq1LIgfVgkFTWJyrr/FLJq2S8E/XbC54tdzTfIySsY F5So874fBm6Eal+0qxdm4cYbrE+YjeKwyTHlY836D0InOHxT2noE8i0KSNCP9sfj K/gt4SmxkxMASUycZ5rmOvhw/RghOSWtTNTQeiU1fheuXBaCe+dKgdAEQXdqQ0Kt I4gCuT6eGRdz9J6AVVIzsaYZFODRlBh50AMS3xkrRlqJ1jxn0E3Zuu3DTTleeknW IgGiZ7LC =dod2 -----END PGP SIGNATURE----- Merge tag '6.0-rc1-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull cifs client fixes from Steve French: - memory leak fix - two small cleanups - trivial strlcpy removal - update missing entry for cifs headers in MAINTAINERS file * tag '6.0-rc1-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: move from strlcpy with unused retval to strscpy cifs: Fix memory leak on the deferred close cifs: remove useless parameter 'is_fsctl' from SMB2_ioctl() cifs: remove unused server parameter from calc_smb_size() cifs: missing directory in MAINTAINERS file
This commit is contained in:
commit
367bcbc5b5
|
@ -5145,6 +5145,7 @@ T: git git://git.samba.org/sfrench/cifs-2.6.git
|
|||
F: Documentation/admin-guide/cifs/
|
||||
F: fs/cifs/
|
||||
F: fs/smbfs_common/
|
||||
F: include/uapi/linux/cifs
|
||||
|
||||
COMPACTPCI HOTPLUG CORE
|
||||
M: Scott Murray <scott@spiteful.org>
|
||||
|
|
|
@ -42,7 +42,7 @@ void cifs_dump_detail(void *buf, struct TCP_Server_Info *server)
|
|||
smb->Command, smb->Status.CifsError,
|
||||
smb->Flags, smb->Flags2, smb->Mid, smb->Pid);
|
||||
cifs_dbg(VFS, "smb buf %p len %u\n", smb,
|
||||
server->ops->calc_smb_size(smb, server));
|
||||
server->ops->calc_smb_size(smb));
|
||||
#endif /* CONFIG_CIFS_DEBUG2 */
|
||||
}
|
||||
|
||||
|
|
|
@ -417,7 +417,7 @@ struct smb_version_operations {
|
|||
int (*close_dir)(const unsigned int, struct cifs_tcon *,
|
||||
struct cifs_fid *);
|
||||
/* calculate a size of SMB message */
|
||||
unsigned int (*calc_smb_size)(void *buf, struct TCP_Server_Info *ptcpi);
|
||||
unsigned int (*calc_smb_size)(void *buf);
|
||||
/* check for STATUS_PENDING and process the response if yes */
|
||||
bool (*is_status_pending)(char *buf, struct TCP_Server_Info *server);
|
||||
/* check for STATUS_NETWORK_SESSION_EXPIRED */
|
||||
|
|
|
@ -151,7 +151,7 @@ extern int cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
|
|||
extern struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *, bool);
|
||||
extern int cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
|
||||
struct cifsFileInfo **ret_file);
|
||||
extern unsigned int smbCalcSize(void *buf, struct TCP_Server_Info *server);
|
||||
extern unsigned int smbCalcSize(void *buf);
|
||||
extern int decode_negTokenInit(unsigned char *security_blob, int length,
|
||||
struct TCP_Server_Info *server);
|
||||
extern int cifs_convert_address(struct sockaddr *dst, const char *src, int len);
|
||||
|
|
|
@ -59,7 +59,7 @@ static int __init cifs_root_setup(char *line)
|
|||
pr_err("Root-CIFS: UNC path too long\n");
|
||||
return 1;
|
||||
}
|
||||
strlcpy(root_dev, line, len);
|
||||
strscpy(root_dev, line, len);
|
||||
srvaddr = parse_srvaddr(&line[2], s);
|
||||
if (*s) {
|
||||
int n = snprintf(root_opts,
|
||||
|
|
|
@ -3994,7 +3994,7 @@ CIFSTCon(const unsigned int xid, struct cifs_ses *ses,
|
|||
}
|
||||
bcc_ptr += length + 1;
|
||||
bytes_left -= (length + 1);
|
||||
strlcpy(tcon->treeName, tree, sizeof(tcon->treeName));
|
||||
strscpy(tcon->treeName, tree, sizeof(tcon->treeName));
|
||||
|
||||
/* mostly informational -- no need to fail on error here */
|
||||
kfree(tcon->nativeFileSystem);
|
||||
|
|
|
@ -354,7 +354,7 @@ checkSMB(char *buf, unsigned int total_read, struct TCP_Server_Info *server)
|
|||
/* otherwise, there is enough to get to the BCC */
|
||||
if (check_smb_hdr(smb))
|
||||
return -EIO;
|
||||
clc_len = smbCalcSize(smb, server);
|
||||
clc_len = smbCalcSize(smb);
|
||||
|
||||
if (4 + rfclen != total_read) {
|
||||
cifs_dbg(VFS, "Length read does not match RFC1001 length %d\n",
|
||||
|
@ -737,6 +737,8 @@ cifs_close_deferred_file(struct cifsInodeInfo *cifs_inode)
|
|||
list_for_each_entry(cfile, &cifs_inode->openFileList, flist) {
|
||||
if (delayed_work_pending(&cfile->deferred)) {
|
||||
if (cancel_delayed_work(&cfile->deferred)) {
|
||||
cifs_del_deferred_close(cfile);
|
||||
|
||||
tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
|
||||
if (tmp_list == NULL)
|
||||
break;
|
||||
|
@ -766,6 +768,8 @@ cifs_close_all_deferred_files(struct cifs_tcon *tcon)
|
|||
list_for_each_entry(cfile, &tcon->openFileList, tlist) {
|
||||
if (delayed_work_pending(&cfile->deferred)) {
|
||||
if (cancel_delayed_work(&cfile->deferred)) {
|
||||
cifs_del_deferred_close(cfile);
|
||||
|
||||
tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
|
||||
if (tmp_list == NULL)
|
||||
break;
|
||||
|
@ -799,6 +803,8 @@ cifs_close_deferred_file_under_dentry(struct cifs_tcon *tcon, const char *path)
|
|||
if (strstr(full_path, path)) {
|
||||
if (delayed_work_pending(&cfile->deferred)) {
|
||||
if (cancel_delayed_work(&cfile->deferred)) {
|
||||
cifs_del_deferred_close(cfile);
|
||||
|
||||
tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
|
||||
if (tmp_list == NULL)
|
||||
break;
|
||||
|
|
|
@ -909,7 +909,7 @@ map_and_check_smb_error(struct mid_q_entry *mid, bool logErr)
|
|||
* portion, the number of word parameters and the data portion of the message
|
||||
*/
|
||||
unsigned int
|
||||
smbCalcSize(void *buf, struct TCP_Server_Info *server)
|
||||
smbCalcSize(void *buf)
|
||||
{
|
||||
struct smb_hdr *ptr = buf;
|
||||
return (sizeof(struct smb_hdr) + (2 * ptr->WordCount) +
|
||||
|
|
|
@ -806,8 +806,7 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,
|
|||
|
||||
end_of_smb = cfile->srch_inf.ntwrk_buf_start +
|
||||
server->ops->calc_smb_size(
|
||||
cfile->srch_inf.ntwrk_buf_start,
|
||||
server);
|
||||
cfile->srch_inf.ntwrk_buf_start);
|
||||
|
||||
cur_ent = cfile->srch_inf.srch_entries_start;
|
||||
first_entry_in_buffer = cfile->srch_inf.index_of_last_entry
|
||||
|
@ -1161,8 +1160,7 @@ int cifs_readdir(struct file *file, struct dir_context *ctx)
|
|||
cifs_dbg(FYI, "loop through %d times filling dir for net buf %p\n",
|
||||
num_to_fill, cifsFile->srch_inf.ntwrk_buf_start);
|
||||
max_len = tcon->ses->server->ops->calc_smb_size(
|
||||
cifsFile->srch_inf.ntwrk_buf_start,
|
||||
tcon->ses->server);
|
||||
cifsFile->srch_inf.ntwrk_buf_start);
|
||||
end_of_smb = cifsFile->srch_inf.ntwrk_buf_start + max_len;
|
||||
|
||||
tmp_buf = kmalloc(UNICODE_NAME_MAX, GFP_KERNEL);
|
||||
|
|
|
@ -61,7 +61,6 @@ smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms,
|
|||
nr_ioctl_req.Reserved = 0;
|
||||
rc = SMB2_ioctl(xid, oparms->tcon, fid->persistent_fid,
|
||||
fid->volatile_fid, FSCTL_LMR_REQUEST_RESILIENCY,
|
||||
true /* is_fsctl */,
|
||||
(char *)&nr_ioctl_req, sizeof(nr_ioctl_req),
|
||||
CIFSMaxBufSize, NULL, NULL /* no return info */);
|
||||
if (rc == -EOPNOTSUPP) {
|
||||
|
|
|
@ -222,7 +222,7 @@ smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *server)
|
|||
}
|
||||
}
|
||||
|
||||
calc_len = smb2_calc_size(buf, server);
|
||||
calc_len = smb2_calc_size(buf);
|
||||
|
||||
/* For SMB2_IOCTL, OutputOffset and OutputLength are optional, so might
|
||||
* be 0, and not a real miscalculation */
|
||||
|
@ -410,7 +410,7 @@ smb2_get_data_area_len(int *off, int *len, struct smb2_hdr *shdr)
|
|||
* portion, the number of word parameters and the data portion of the message.
|
||||
*/
|
||||
unsigned int
|
||||
smb2_calc_size(void *buf, struct TCP_Server_Info *srvr)
|
||||
smb2_calc_size(void *buf)
|
||||
{
|
||||
struct smb2_pdu *pdu = buf;
|
||||
struct smb2_hdr *shdr = &pdu->hdr;
|
||||
|
|
|
@ -387,7 +387,7 @@ smb2_dump_detail(void *buf, struct TCP_Server_Info *server)
|
|||
shdr->Command, shdr->Status, shdr->Flags, shdr->MessageId,
|
||||
shdr->Id.SyncId.ProcessId);
|
||||
cifs_server_dbg(VFS, "smb buf %p len %u\n", buf,
|
||||
server->ops->calc_smb_size(buf, server));
|
||||
server->ops->calc_smb_size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -681,7 +681,7 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon)
|
|||
struct cifs_ses *ses = tcon->ses;
|
||||
|
||||
rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
|
||||
FSCTL_QUERY_NETWORK_INTERFACE_INFO, true /* is_fsctl */,
|
||||
FSCTL_QUERY_NETWORK_INTERFACE_INFO,
|
||||
NULL /* no data input */, 0 /* no data input */,
|
||||
CIFSMaxBufSize, (char **)&out_buf, &ret_data_len);
|
||||
if (rc == -EOPNOTSUPP) {
|
||||
|
@ -1323,9 +1323,8 @@ SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
struct resume_key_req *res_key;
|
||||
|
||||
rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,
|
||||
FSCTL_SRV_REQUEST_RESUME_KEY, true /* is_fsctl */,
|
||||
NULL, 0 /* no input */, CIFSMaxBufSize,
|
||||
(char **)&res_key, &ret_data_len);
|
||||
FSCTL_SRV_REQUEST_RESUME_KEY, NULL, 0 /* no input */,
|
||||
CIFSMaxBufSize, (char **)&res_key, &ret_data_len);
|
||||
|
||||
if (rc == -EOPNOTSUPP) {
|
||||
pr_warn_once("Server share %s does not support copy range\n", tcon->treeName);
|
||||
|
@ -1467,7 +1466,7 @@ smb2_ioctl_query_info(const unsigned int xid,
|
|||
rqst[1].rq_nvec = SMB2_IOCTL_IOV_SIZE;
|
||||
|
||||
rc = SMB2_ioctl_init(tcon, server, &rqst[1], COMPOUND_FID, COMPOUND_FID,
|
||||
qi.info_type, true, buffer, qi.output_buffer_length,
|
||||
qi.info_type, buffer, qi.output_buffer_length,
|
||||
CIFSMaxBufSize - MAX_SMB2_CREATE_RESPONSE_SIZE -
|
||||
MAX_SMB2_CLOSE_RESPONSE_SIZE);
|
||||
free_req1_func = SMB2_ioctl_free;
|
||||
|
@ -1643,9 +1642,8 @@ smb2_copychunk_range(const unsigned int xid,
|
|||
retbuf = NULL;
|
||||
rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,
|
||||
trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE,
|
||||
true /* is_fsctl */, (char *)pcchunk,
|
||||
sizeof(struct copychunk_ioctl), CIFSMaxBufSize,
|
||||
(char **)&retbuf, &ret_data_len);
|
||||
(char *)pcchunk, sizeof(struct copychunk_ioctl),
|
||||
CIFSMaxBufSize, (char **)&retbuf, &ret_data_len);
|
||||
if (rc == 0) {
|
||||
if (ret_data_len !=
|
||||
sizeof(struct copychunk_ioctl_rsp)) {
|
||||
|
@ -1805,7 +1803,6 @@ static bool smb2_set_sparse(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid, FSCTL_SET_SPARSE,
|
||||
true /* is_fctl */,
|
||||
&setsparse, 1, CIFSMaxBufSize, NULL, NULL);
|
||||
if (rc) {
|
||||
tcon->broken_sparse_sup = true;
|
||||
|
@ -1888,7 +1885,6 @@ smb2_duplicate_extents(const unsigned int xid,
|
|||
rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,
|
||||
trgtfile->fid.volatile_fid,
|
||||
FSCTL_DUPLICATE_EXTENTS_TO_FILE,
|
||||
true /* is_fsctl */,
|
||||
(char *)&dup_ext_buf,
|
||||
sizeof(struct duplicate_extents_to_file),
|
||||
CIFSMaxBufSize, NULL,
|
||||
|
@ -1923,7 +1919,6 @@ smb3_set_integrity(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
return SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid,
|
||||
FSCTL_SET_INTEGRITY_INFORMATION,
|
||||
true /* is_fsctl */,
|
||||
(char *)&integr_info,
|
||||
sizeof(struct fsctl_set_integrity_information_req),
|
||||
CIFSMaxBufSize, NULL,
|
||||
|
@ -1976,7 +1971,6 @@ smb3_enum_snapshots(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid,
|
||||
FSCTL_SRV_ENUMERATE_SNAPSHOTS,
|
||||
true /* is_fsctl */,
|
||||
NULL, 0 /* no input data */, max_response_size,
|
||||
(char **)&retbuf,
|
||||
&ret_data_len);
|
||||
|
@ -2699,7 +2693,6 @@ smb2_get_dfs_refer(const unsigned int xid, struct cifs_ses *ses,
|
|||
do {
|
||||
rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
|
||||
FSCTL_DFS_GET_REFERRALS,
|
||||
true /* is_fsctl */,
|
||||
(char *)dfs_req, dfs_req_size, CIFSMaxBufSize,
|
||||
(char **)&dfs_rsp, &dfs_rsp_size);
|
||||
if (!is_retryable_error(rc))
|
||||
|
@ -2906,8 +2899,7 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
|
||||
rc = SMB2_ioctl_init(tcon, server,
|
||||
&rqst[1], fid.persistent_fid,
|
||||
fid.volatile_fid, FSCTL_GET_REPARSE_POINT,
|
||||
true /* is_fctl */, NULL, 0,
|
||||
fid.volatile_fid, FSCTL_GET_REPARSE_POINT, NULL, 0,
|
||||
CIFSMaxBufSize -
|
||||
MAX_SMB2_CREATE_RESPONSE_SIZE -
|
||||
MAX_SMB2_CLOSE_RESPONSE_SIZE);
|
||||
|
@ -3087,8 +3079,7 @@ smb2_query_reparse_tag(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
|
||||
rc = SMB2_ioctl_init(tcon, server,
|
||||
&rqst[1], COMPOUND_FID,
|
||||
COMPOUND_FID, FSCTL_GET_REPARSE_POINT,
|
||||
true /* is_fctl */, NULL, 0,
|
||||
COMPOUND_FID, FSCTL_GET_REPARSE_POINT, NULL, 0,
|
||||
CIFSMaxBufSize -
|
||||
MAX_SMB2_CREATE_RESPONSE_SIZE -
|
||||
MAX_SMB2_CLOSE_RESPONSE_SIZE);
|
||||
|
@ -3358,7 +3349,7 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
|
|||
fsctl_buf.BeyondFinalZero = cpu_to_le64(offset + len);
|
||||
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA, true,
|
||||
cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,
|
||||
(char *)&fsctl_buf,
|
||||
sizeof(struct file_zero_data_information),
|
||||
0, NULL, NULL);
|
||||
|
@ -3421,7 +3412,7 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
|
|||
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,
|
||||
true /* is_fctl */, (char *)&fsctl_buf,
|
||||
(char *)&fsctl_buf,
|
||||
sizeof(struct file_zero_data_information),
|
||||
CIFSMaxBufSize, NULL, NULL);
|
||||
free_xid(xid);
|
||||
|
@ -3481,7 +3472,7 @@ static int smb3_simple_fallocate_range(unsigned int xid,
|
|||
in_data.length = cpu_to_le64(len);
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES, true,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES,
|
||||
(char *)&in_data, sizeof(in_data),
|
||||
1024 * sizeof(struct file_allocated_range_buffer),
|
||||
(char **)&out_data, &out_data_len);
|
||||
|
@ -3802,7 +3793,7 @@ static loff_t smb3_llseek(struct file *file, struct cifs_tcon *tcon, loff_t offs
|
|||
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES, true,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES,
|
||||
(char *)&in_data, sizeof(in_data),
|
||||
sizeof(struct file_allocated_range_buffer),
|
||||
(char **)&out_data, &out_data_len);
|
||||
|
@ -3862,7 +3853,7 @@ static int smb3_fiemap(struct cifs_tcon *tcon,
|
|||
|
||||
rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
|
||||
cfile->fid.volatile_fid,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES, true,
|
||||
FSCTL_QUERY_ALLOCATED_RANGES,
|
||||
(char *)&in_data, sizeof(in_data),
|
||||
1024 * sizeof(struct file_allocated_range_buffer),
|
||||
(char **)&out_data, &out_data_len);
|
||||
|
|
|
@ -1173,7 +1173,7 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)
|
|||
}
|
||||
|
||||
rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
|
||||
FSCTL_VALIDATE_NEGOTIATE_INFO, true /* is_fsctl */,
|
||||
FSCTL_VALIDATE_NEGOTIATE_INFO,
|
||||
(char *)pneg_inbuf, inbuflen, CIFSMaxBufSize,
|
||||
(char **)&pneg_rsp, &rsplen);
|
||||
if (rc == -EOPNOTSUPP) {
|
||||
|
@ -1928,7 +1928,7 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
|
|||
tcon->capabilities = rsp->Capabilities; /* we keep caps little endian */
|
||||
tcon->maximal_access = le32_to_cpu(rsp->MaximalAccess);
|
||||
tcon->tid = le32_to_cpu(rsp->hdr.Id.SyncId.TreeId);
|
||||
strlcpy(tcon->treeName, tree, sizeof(tcon->treeName));
|
||||
strscpy(tcon->treeName, tree, sizeof(tcon->treeName));
|
||||
|
||||
if ((rsp->Capabilities & SMB2_SHARE_CAP_DFS) &&
|
||||
((tcon->share_flags & SHI1005_FLAGS_DFS) == 0))
|
||||
|
@ -3056,7 +3056,7 @@ int
|
|||
SMB2_ioctl_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||
struct smb_rqst *rqst,
|
||||
u64 persistent_fid, u64 volatile_fid, u32 opcode,
|
||||
bool is_fsctl, char *in_data, u32 indatalen,
|
||||
char *in_data, u32 indatalen,
|
||||
__u32 max_response_size)
|
||||
{
|
||||
struct smb2_ioctl_req *req;
|
||||
|
@ -3131,10 +3131,8 @@ SMB2_ioctl_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
|||
req->hdr.CreditCharge =
|
||||
cpu_to_le16(DIV_ROUND_UP(max(indatalen, max_response_size),
|
||||
SMB2_MAX_BUFFER_SIZE));
|
||||
if (is_fsctl)
|
||||
req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);
|
||||
else
|
||||
req->Flags = 0;
|
||||
/* always an FSCTL (for now) */
|
||||
req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);
|
||||
|
||||
/* validate negotiate request must be signed - see MS-SMB2 3.2.5.5 */
|
||||
if (opcode == FSCTL_VALIDATE_NEGOTIATE_INFO)
|
||||
|
@ -3161,9 +3159,9 @@ SMB2_ioctl_free(struct smb_rqst *rqst)
|
|||
*/
|
||||
int
|
||||
SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,
|
||||
u64 volatile_fid, u32 opcode, bool is_fsctl,
|
||||
char *in_data, u32 indatalen, u32 max_out_data_len,
|
||||
char **out_data, u32 *plen /* returned data len */)
|
||||
u64 volatile_fid, u32 opcode, char *in_data, u32 indatalen,
|
||||
u32 max_out_data_len, char **out_data,
|
||||
u32 *plen /* returned data len */)
|
||||
{
|
||||
struct smb_rqst rqst;
|
||||
struct smb2_ioctl_rsp *rsp = NULL;
|
||||
|
@ -3205,7 +3203,7 @@ SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,
|
|||
|
||||
rc = SMB2_ioctl_init(tcon, server,
|
||||
&rqst, persistent_fid, volatile_fid, opcode,
|
||||
is_fsctl, in_data, indatalen, max_out_data_len);
|
||||
in_data, indatalen, max_out_data_len);
|
||||
if (rc)
|
||||
goto ioctl_exit;
|
||||
|
||||
|
@ -3297,7 +3295,7 @@ SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
|
|||
cpu_to_le16(COMPRESSION_FORMAT_DEFAULT);
|
||||
|
||||
rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,
|
||||
FSCTL_SET_COMPRESSION, true /* is_fsctl */,
|
||||
FSCTL_SET_COMPRESSION,
|
||||
(char *)&fsctl_input /* data input */,
|
||||
2 /* in data len */, CIFSMaxBufSize /* max out data */,
|
||||
&ret_data /* out data */, NULL);
|
||||
|
|
|
@ -23,7 +23,7 @@ struct smb_rqst;
|
|||
extern int map_smb2_to_linux_error(char *buf, bool log_err);
|
||||
extern int smb2_check_message(char *buf, unsigned int length,
|
||||
struct TCP_Server_Info *server);
|
||||
extern unsigned int smb2_calc_size(void *buf, struct TCP_Server_Info *server);
|
||||
extern unsigned int smb2_calc_size(void *buf);
|
||||
extern char *smb2_get_data_area_len(int *off, int *len,
|
||||
struct smb2_hdr *shdr);
|
||||
extern __le16 *cifs_convert_path_to_utf16(const char *from,
|
||||
|
@ -137,13 +137,13 @@ extern int SMB2_open_init(struct cifs_tcon *tcon,
|
|||
extern void SMB2_open_free(struct smb_rqst *rqst);
|
||||
extern int SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
u64 persistent_fid, u64 volatile_fid, u32 opcode,
|
||||
bool is_fsctl, char *in_data, u32 indatalen, u32 maxoutlen,
|
||||
char *in_data, u32 indatalen, u32 maxoutlen,
|
||||
char **out_data, u32 *plen /* returned data len */);
|
||||
extern int SMB2_ioctl_init(struct cifs_tcon *tcon,
|
||||
struct TCP_Server_Info *server,
|
||||
struct smb_rqst *rqst,
|
||||
u64 persistent_fid, u64 volatile_fid, u32 opcode,
|
||||
bool is_fsctl, char *in_data, u32 indatalen,
|
||||
char *in_data, u32 indatalen,
|
||||
__u32 max_response_size);
|
||||
extern void SMB2_ioctl_free(struct smb_rqst *rqst);
|
||||
extern int SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
|
|
Loading…
Reference in New Issue