forked from Minki/linux
SMB3: passthru query info doesn't check for SMB3 FSCTL passthru
The passthrough queries from user space tools like smbinfo can be either SMB3 QUERY_INFO or SMB3 FSCTL, but we are not checking for the latter. Temporarily we return EOPNOTSUPP for SMB3 FSCTL passthrough requests but once compounding fsctls is fixed can enable. Signed-off-by: Steve French <stfrench@microsoft.com> Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
This commit is contained in:
parent
779ede040d
commit
31ba4331d5
@ -43,6 +43,9 @@ struct smb_snapshot_array {
|
||||
/* snapshots[]; */
|
||||
} __packed;
|
||||
|
||||
/* query_info flags */
|
||||
#define PASSTHRU_QUERY_INFO 0x00000000
|
||||
#define PASSTHRU_FSCTL 0x00000001
|
||||
struct smb_query_info {
|
||||
__u32 info_type;
|
||||
__u32 file_info_class;
|
||||
|
@ -1390,15 +1390,27 @@ smb2_ioctl_query_info(const unsigned int xid,
|
||||
smb2_set_next_command(tcon, &rqst[0]);
|
||||
|
||||
/* Query */
|
||||
memset(&qi_iov, 0, sizeof(qi_iov));
|
||||
rqst[1].rq_iov = qi_iov;
|
||||
rqst[1].rq_nvec = 1;
|
||||
if (qi.flags & PASSTHRU_FSCTL) {
|
||||
/* Can eventually relax perm check since server enforces too */
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
rc = -EPERM;
|
||||
else /* TBD: Add code to compound FSCTL */
|
||||
rc = -EOPNOTSUPP;
|
||||
} else if (qi.flags == PASSTHRU_QUERY_INFO) {
|
||||
memset(&qi_iov, 0, sizeof(qi_iov));
|
||||
rqst[1].rq_iov = qi_iov;
|
||||
rqst[1].rq_nvec = 1;
|
||||
|
||||
rc = SMB2_query_info_init(tcon, &rqst[1], COMPOUND_FID, COMPOUND_FID,
|
||||
qi.file_info_class, qi.info_type,
|
||||
qi.additional_information,
|
||||
rc = SMB2_query_info_init(tcon, &rqst[1], COMPOUND_FID,
|
||||
COMPOUND_FID, qi.file_info_class,
|
||||
qi.info_type, qi.additional_information,
|
||||
qi.input_buffer_length,
|
||||
qi.output_buffer_length, buffer);
|
||||
} else { /* unknown flags */
|
||||
cifs_dbg(VFS, "invalid passthru query flags: 0x%x\n", qi.flags);
|
||||
rc = -EINVAL;
|
||||
}
|
||||
|
||||
if (rc)
|
||||
goto iqinf_exit;
|
||||
smb2_set_next_command(tcon, &rqst[1]);
|
||||
|
Loading…
Reference in New Issue
Block a user