Unverified Commit e7a10ed7 authored by Steve French's avatar Steve French Committed by GitHub
Browse files

Merge pull request #66 from namjaejeon/cifsd-for-next

ksmbd-fixes
parents 456af438 a9a27d4a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -84,7 +84,8 @@ SMB3 encryption(CCM, GCM) Supported. (CCM and GCM128 supported, GCM256 in
                               progress)
SMB direct(RDMA)               Partially Supported. SMB3 Multi-channel is
                               required to connect to Windows client.
SMB3 Multi-channel             In Progress.
SMB3 Multi-channel             Partially Supported. Planned to implement
                               replay/retry mechanisms for future.
SMB3.1.1 POSIX extension       Supported.
ACLs                           Partially Supported. only DACLs available, SACLs
                               (auditing) is planned for the future. For
+1 −0
Original line number Diff line number Diff line
@@ -9945,6 +9945,7 @@ M: Steve French <sfrench@samba.org>
M:	Hyunchul Lee <hyc.lee@gmail.com>
L:	linux-cifs@vger.kernel.org
S:	Maintained
T:	git git://git.samba.org/ksmbd.git
F:	fs/ksmbd/
KERNEL UNIT TESTING FRAMEWORK (KUnit)
+0 −1
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ config SMB_SERVER
	select CRYPTO_GCM
	select ASN1
	select OID_REGISTRY
	select FS_POSIX_ACL
	default n
	help
	  Choose Y here if you want to allow SMB3 compliant clients
+27 −23
Original line number Diff line number Diff line
@@ -58,18 +58,18 @@ static void __wbuf(struct ksmbd_work *work, void **req, void **rsp)
 *
 * Return:      1 if valid session id, otherwise 0
 */
static inline int check_session_id(struct ksmbd_conn *conn, u64 id)
static inline bool check_session_id(struct ksmbd_conn *conn, u64 id)
{
	struct ksmbd_session *sess;

	if (id == 0 || id == -1)
		return 0;
		return false;

	sess = ksmbd_session_lookup_all(conn, id);
	if (sess)
		return 1;
		return true;
	pr_err("Invalid user session id: %llu\n", id);
	return 0;
	return false;
}

struct channel *lookup_chann_list(struct ksmbd_session *sess, struct ksmbd_conn *conn)
@@ -85,10 +85,11 @@ struct channel *lookup_chann_list(struct ksmbd_session *sess, struct ksmbd_conn
}

/**
 * smb2_get_ksmbd_tcon() - get tree connection information for a tree id
 * smb2_get_ksmbd_tcon() - get tree connection information using a tree id.
 * @work:	smb work
 *
 * Return:      matching tree connection on success, otherwise error
 * Return:	0 if there is a tree connection matched or these are
 *		skipable commands, otherwise error
 */
int smb2_get_ksmbd_tcon(struct ksmbd_work *work)
{
@@ -105,14 +106,14 @@ int smb2_get_ksmbd_tcon(struct ksmbd_work *work)

	if (xa_empty(&work->sess->tree_conns)) {
		ksmbd_debug(SMB, "NO tree connected\n");
		return -1;
		return -ENOENT;
	}

	tree_id = le32_to_cpu(req_hdr->Id.SyncId.TreeId);
	work->tcon = ksmbd_tree_conn_lookup(work->sess, tree_id);
	if (!work->tcon) {
		pr_err("Invalid tid %d\n", tree_id);
		return -1;
		return -EINVAL;
	}

	return 1;
@@ -145,45 +146,45 @@ void smb2_set_err_rsp(struct ksmbd_work *work)
 * is_smb2_neg_cmd() - is it smb2 negotiation command
 * @work:	smb work containing smb header
 *
 * Return:      1 if smb2 negotiation command, otherwise 0
 * Return:      true if smb2 negotiation command, otherwise false
 */
int is_smb2_neg_cmd(struct ksmbd_work *work)
bool is_smb2_neg_cmd(struct ksmbd_work *work)
{
	struct smb2_hdr *hdr = work->request_buf;

	/* is it SMB2 header ? */
	if (hdr->ProtocolId != SMB2_PROTO_NUMBER)
		return 0;
		return false;

	/* make sure it is request not response message */
	if (hdr->Flags & SMB2_FLAGS_SERVER_TO_REDIR)
		return 0;
		return false;

	if (hdr->Command != SMB2_NEGOTIATE)
		return 0;
		return false;

	return 1;
	return true;
}

/**
 * is_smb2_rsp() - is it smb2 response
 * @work:	smb work containing smb response buffer
 *
 * Return:      1 if smb2 response, otherwise 0
 * Return:      true if smb2 response, otherwise false
 */
int is_smb2_rsp(struct ksmbd_work *work)
bool is_smb2_rsp(struct ksmbd_work *work)
{
	struct smb2_hdr *hdr = work->response_buf;

	/* is it SMB2 header ? */
	if (hdr->ProtocolId != SMB2_PROTO_NUMBER)
		return 0;
		return false;

	/* make sure it is response not request message */
	if (!(hdr->Flags & SMB2_FLAGS_SERVER_TO_REDIR))
		return 0;
		return false;

	return 1;
	return true;
}

/**
@@ -2385,12 +2386,15 @@ static void ksmbd_acls_fattr(struct smb_fattr *fattr, struct inode *inode)
	fattr->cf_uid = inode->i_uid;
	fattr->cf_gid = inode->i_gid;
	fattr->cf_mode = inode->i_mode;
	fattr->cf_acls = NULL;
	fattr->cf_dacls = NULL;

	if (IS_ENABLED(CONFIG_FS_POSIX_ACL)) {
		fattr->cf_acls = get_acl(inode, ACL_TYPE_ACCESS);
		if (S_ISDIR(inode->i_mode))
			fattr->cf_dacls = get_acl(inode, ACL_TYPE_DEFAULT);
	}
}

/**
 * smb2_open() - handler for smb file open request
@@ -8291,7 +8295,7 @@ int smb3_encrypt_resp(struct ksmbd_work *work)
	return rc;
}

int smb3_is_transform_hdr(void *buf)
bool smb3_is_transform_hdr(void *buf)
{
	struct smb2_transform_hdr *trhdr = buf;

+3 −3
Original line number Diff line number Diff line
@@ -1638,8 +1638,8 @@ void init_smb2_max_read_size(unsigned int sz);
void init_smb2_max_write_size(unsigned int sz);
void init_smb2_max_trans_size(unsigned int sz);

int is_smb2_neg_cmd(struct ksmbd_work *work);
int is_smb2_rsp(struct ksmbd_work *work);
bool is_smb2_neg_cmd(struct ksmbd_work *work);
bool is_smb2_rsp(struct ksmbd_work *work);

u16 get_smb2_cmd_val(struct ksmbd_work *work);
void set_smb2_rsp_status(struct ksmbd_work *work, __le32 err);
@@ -1664,7 +1664,7 @@ void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status);
struct channel *lookup_chann_list(struct ksmbd_session *sess,
				  struct ksmbd_conn *conn);
void smb3_preauth_hash_rsp(struct ksmbd_work *work);
int smb3_is_transform_hdr(void *buf);
bool smb3_is_transform_hdr(void *buf);
int smb3_decrypt_req(struct ksmbd_work *work);
int smb3_encrypt_resp(struct ksmbd_work *work);
bool smb3_11_final_sess_setup_resp(struct ksmbd_work *work);
Loading