All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Namjae Jeon <linkinjeon@kernel.org>,
	Hyunchul Lee <hyc.lee@gmail.com>,
	Steve French <stfrench@microsoft.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.15 115/134] ksmbd: fix racy issue while destroying session on multichannel
Date: Mon, 15 May 2023 18:29:52 +0200	[thread overview]
Message-ID: <20230515161706.964691943@linuxfoundation.org> (raw)
In-Reply-To: <20230515161702.887638251@linuxfoundation.org>

From: Namjae Jeon <linkinjeon@kernel.org>

[ Upstream commit af7c39d971e43cd0af488729bca362427ad99488 ]

After multi-channel connection with windows, Several channels of
session are connected. Among them, if there is a problem in one channel,
Windows connects again after disconnecting the channel. In this process,
the session is released and a kernel oop can occurs while processing
requests to other channels. When the channel is disconnected, if other
channels still exist in the session after deleting the channel from
the channel list in the session, the session should not be released.
Finally, the session will be released after all channels are disconnected.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Stable-dep-of: 7b4323373d84 ("ksmbd: fix deadlock in ksmbd_find_crypto_ctx()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/ksmbd/auth.c              | 56 ++++++++++++++++--------------
 fs/ksmbd/auth.h              | 11 +++---
 fs/ksmbd/connection.h        |  7 ----
 fs/ksmbd/mgmt/tree_connect.c |  5 +--
 fs/ksmbd/mgmt/tree_connect.h |  4 ++-
 fs/ksmbd/mgmt/user_session.c | 67 ++++++++++++++++++++++++------------
 fs/ksmbd/mgmt/user_session.h |  7 ++--
 fs/ksmbd/oplock.c            | 11 +++---
 fs/ksmbd/smb2pdu.c           | 21 +++++------
 fs/ksmbd/smb_common.h        |  2 +-
 fs/ksmbd/vfs.c               |  3 +-
 fs/ksmbd/vfs_cache.c         |  2 +-
 12 files changed, 110 insertions(+), 86 deletions(-)

diff --git a/fs/ksmbd/auth.c b/fs/ksmbd/auth.c
index 4867da417c23a..c1408e922fc6b 100644
--- a/fs/ksmbd/auth.c
+++ b/fs/ksmbd/auth.c
@@ -120,8 +120,8 @@ static int ksmbd_gen_sess_key(struct ksmbd_session *sess, char *hash,
 	return rc;
 }
 
-static int calc_ntlmv2_hash(struct ksmbd_session *sess, char *ntlmv2_hash,
-			    char *dname)
+static int calc_ntlmv2_hash(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+			    char *ntlmv2_hash, char *dname)
 {
 	int ret, len, conv_len;
 	wchar_t *domain = NULL;
@@ -157,7 +157,7 @@ static int calc_ntlmv2_hash(struct ksmbd_session *sess, char *ntlmv2_hash,
 	}
 
 	conv_len = smb_strtoUTF16(uniname, user_name(sess->user), len,
-				  sess->conn->local_nls);
+				  conn->local_nls);
 	if (conv_len < 0 || conv_len > len) {
 		ret = -EINVAL;
 		goto out;
@@ -181,7 +181,7 @@ static int calc_ntlmv2_hash(struct ksmbd_session *sess, char *ntlmv2_hash,
 	}
 
 	conv_len = smb_strtoUTF16((__le16 *)domain, dname, len,
-				  sess->conn->local_nls);
+				  conn->local_nls);
 	if (conv_len < 0 || conv_len > len) {
 		ret = -EINVAL;
 		goto out;
@@ -214,8 +214,9 @@ static int calc_ntlmv2_hash(struct ksmbd_session *sess, char *ntlmv2_hash,
  *
  * Return:	0 on success, error number on error
  */
-int ksmbd_auth_ntlmv2(struct ksmbd_session *sess, struct ntlmv2_resp *ntlmv2,
-		      int blen, char *domain_name, char *cryptkey)
+int ksmbd_auth_ntlmv2(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+		      struct ntlmv2_resp *ntlmv2, int blen, char *domain_name,
+		      char *cryptkey)
 {
 	char ntlmv2_hash[CIFS_ENCPWD_SIZE];
 	char ntlmv2_rsp[CIFS_HMAC_MD5_HASH_SIZE];
@@ -229,7 +230,7 @@ int ksmbd_auth_ntlmv2(struct ksmbd_session *sess, struct ntlmv2_resp *ntlmv2,
 		return -ENOMEM;
 	}
 
-	rc = calc_ntlmv2_hash(sess, ntlmv2_hash, domain_name);
+	rc = calc_ntlmv2_hash(conn, sess, ntlmv2_hash, domain_name);
 	if (rc) {
 		ksmbd_debug(AUTH, "could not get v2 hash rc %d\n", rc);
 		goto out;
@@ -333,7 +334,8 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob,
 	/* process NTLMv2 authentication */
 	ksmbd_debug(AUTH, "decode_ntlmssp_authenticate_blob dname%s\n",
 		    domain_name);
-	ret = ksmbd_auth_ntlmv2(sess, (struct ntlmv2_resp *)((char *)authblob + nt_off),
+	ret = ksmbd_auth_ntlmv2(conn, sess,
+				(struct ntlmv2_resp *)((char *)authblob + nt_off),
 				nt_len - CIFS_ENCPWD_SIZE,
 				domain_name, conn->ntlmssp.cryptkey);
 	kfree(domain_name);
@@ -633,8 +635,9 @@ struct derivation {
 	bool binding;
 };
 
-static int generate_key(struct ksmbd_session *sess, struct kvec label,
-			struct kvec context, __u8 *key, unsigned int key_size)
+static int generate_key(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+			struct kvec label, struct kvec context, __u8 *key,
+			unsigned int key_size)
 {
 	unsigned char zero = 0x0;
 	__u8 i[4] = {0, 0, 0, 1};
@@ -694,8 +697,8 @@ static int generate_key(struct ksmbd_session *sess, struct kvec label,
 		goto smb3signkey_ret;
 	}
 
-	if (sess->conn->cipher_type == SMB2_ENCRYPTION_AES256_CCM ||
-	    sess->conn->cipher_type == SMB2_ENCRYPTION_AES256_GCM)
+	if (conn->cipher_type == SMB2_ENCRYPTION_AES256_CCM ||
+	    conn->cipher_type == SMB2_ENCRYPTION_AES256_GCM)
 		rc = crypto_shash_update(CRYPTO_HMACSHA256(ctx), L256, 4);
 	else
 		rc = crypto_shash_update(CRYPTO_HMACSHA256(ctx), L128, 4);
@@ -730,17 +733,17 @@ static int generate_smb3signingkey(struct ksmbd_session *sess,
 	if (!chann)
 		return 0;
 
-	if (sess->conn->dialect >= SMB30_PROT_ID && signing->binding)
+	if (conn->dialect >= SMB30_PROT_ID && signing->binding)
 		key = chann->smb3signingkey;
 	else
 		key = sess->smb3signingkey;
 
-	rc = generate_key(sess, signing->label, signing->context, key,
+	rc = generate_key(conn, sess, signing->label, signing->context, key,
 			  SMB3_SIGN_KEY_SIZE);
 	if (rc)
 		return rc;
 
-	if (!(sess->conn->dialect >= SMB30_PROT_ID && signing->binding))
+	if (!(conn->dialect >= SMB30_PROT_ID && signing->binding))
 		memcpy(chann->smb3signingkey, key, SMB3_SIGN_KEY_SIZE);
 
 	ksmbd_debug(AUTH, "dumping generated AES signing keys\n");
@@ -794,30 +797,31 @@ struct derivation_twin {
 	struct derivation decryption;
 };
 
-static int generate_smb3encryptionkey(struct ksmbd_session *sess,
+static int generate_smb3encryptionkey(struct ksmbd_conn *conn,
+				      struct ksmbd_session *sess,
 				      const struct derivation_twin *ptwin)
 {
 	int rc;
 
-	rc = generate_key(sess, ptwin->encryption.label,
+	rc = generate_key(conn, sess, ptwin->encryption.label,
 			  ptwin->encryption.context, sess->smb3encryptionkey,
 			  SMB3_ENC_DEC_KEY_SIZE);
 	if (rc)
 		return rc;
 
-	rc = generate_key(sess, ptwin->decryption.label,
+	rc = generate_key(conn, sess, ptwin->decryption.label,
 			  ptwin->decryption.context,
 			  sess->smb3decryptionkey, SMB3_ENC_DEC_KEY_SIZE);
 	if (rc)
 		return rc;
 
 	ksmbd_debug(AUTH, "dumping generated AES encryption keys\n");
-	ksmbd_debug(AUTH, "Cipher type   %d\n", sess->conn->cipher_type);
+	ksmbd_debug(AUTH, "Cipher type   %d\n", conn->cipher_type);
 	ksmbd_debug(AUTH, "Session Id    %llu\n", sess->id);
 	ksmbd_debug(AUTH, "Session Key   %*ph\n",
 		    SMB2_NTLMV2_SESSKEY_SIZE, sess->sess_key);
-	if (sess->conn->cipher_type == SMB2_ENCRYPTION_AES256_CCM ||
-	    sess->conn->cipher_type == SMB2_ENCRYPTION_AES256_GCM) {
+	if (conn->cipher_type == SMB2_ENCRYPTION_AES256_CCM ||
+	    conn->cipher_type == SMB2_ENCRYPTION_AES256_GCM) {
 		ksmbd_debug(AUTH, "ServerIn Key  %*ph\n",
 			    SMB3_GCM256_CRYPTKEY_SIZE, sess->smb3encryptionkey);
 		ksmbd_debug(AUTH, "ServerOut Key %*ph\n",
@@ -831,7 +835,8 @@ static int generate_smb3encryptionkey(struct ksmbd_session *sess,
 	return 0;
 }
 
-int ksmbd_gen_smb30_encryptionkey(struct ksmbd_session *sess)
+int ksmbd_gen_smb30_encryptionkey(struct ksmbd_conn *conn,
+				  struct ksmbd_session *sess)
 {
 	struct derivation_twin twin;
 	struct derivation *d;
@@ -848,10 +853,11 @@ int ksmbd_gen_smb30_encryptionkey(struct ksmbd_session *sess)
 	d->context.iov_base = "ServerIn ";
 	d->context.iov_len = 10;
 
-	return generate_smb3encryptionkey(sess, &twin);
+	return generate_smb3encryptionkey(conn, sess, &twin);
 }
 
-int ksmbd_gen_smb311_encryptionkey(struct ksmbd_session *sess)
+int ksmbd_gen_smb311_encryptionkey(struct ksmbd_conn *conn,
+				   struct ksmbd_session *sess)
 {
 	struct derivation_twin twin;
 	struct derivation *d;
@@ -868,7 +874,7 @@ int ksmbd_gen_smb311_encryptionkey(struct ksmbd_session *sess)
 	d->context.iov_base = sess->Preauth_HashValue;
 	d->context.iov_len = 64;
 
-	return generate_smb3encryptionkey(sess, &twin);
+	return generate_smb3encryptionkey(conn, sess, &twin);
 }
 
 int ksmbd_gen_preauth_integrity_hash(struct ksmbd_conn *conn, char *buf,
diff --git a/fs/ksmbd/auth.h b/fs/ksmbd/auth.h
index 95629651cf266..25b772653de0a 100644
--- a/fs/ksmbd/auth.h
+++ b/fs/ksmbd/auth.h
@@ -38,8 +38,9 @@ struct kvec;
 int ksmbd_crypt_message(struct ksmbd_conn *conn, struct kvec *iov,
 			unsigned int nvec, int enc);
 void ksmbd_copy_gss_neg_header(void *buf);
-int ksmbd_auth_ntlmv2(struct ksmbd_session *sess, struct ntlmv2_resp *ntlmv2,
-		      int blen, char *domain_name, char *cryptkey);
+int ksmbd_auth_ntlmv2(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+		      struct ntlmv2_resp *ntlmv2, int blen, char *domain_name,
+		      char *cryptkey);
 int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob,
 				   int blob_len, struct ksmbd_conn *conn,
 				   struct ksmbd_session *sess);
@@ -58,8 +59,10 @@ int ksmbd_gen_smb30_signingkey(struct ksmbd_session *sess,
 			       struct ksmbd_conn *conn);
 int ksmbd_gen_smb311_signingkey(struct ksmbd_session *sess,
 				struct ksmbd_conn *conn);
-int ksmbd_gen_smb30_encryptionkey(struct ksmbd_session *sess);
-int ksmbd_gen_smb311_encryptionkey(struct ksmbd_session *sess);
+int ksmbd_gen_smb30_encryptionkey(struct ksmbd_conn *conn,
+				  struct ksmbd_session *sess);
+int ksmbd_gen_smb311_encryptionkey(struct ksmbd_conn *conn,
+				   struct ksmbd_session *sess);
 int ksmbd_gen_preauth_integrity_hash(struct ksmbd_conn *conn, char *buf,
 				     __u8 *pi_hash);
 int ksmbd_gen_sd_hash(struct ksmbd_conn *conn, char *sd_buf, int len,
diff --git a/fs/ksmbd/connection.h b/fs/ksmbd/connection.h
index 7838cc46497d6..89eb41bbd1601 100644
--- a/fs/ksmbd/connection.h
+++ b/fs/ksmbd/connection.h
@@ -20,13 +20,6 @@
 
 #define KSMBD_SOCKET_BACKLOG		16
 
-/*
- * WARNING
- *
- * This is nothing but a HACK. Session status should move to channel
- * or to session. As of now we have 1 tcp_conn : 1 ksmbd_session, but
- * we need to change it to 1 tcp_conn : N ksmbd_sessions.
- */
 enum {
 	KSMBD_SESS_NEW = 0,
 	KSMBD_SESS_GOOD,
diff --git a/fs/ksmbd/mgmt/tree_connect.c b/fs/ksmbd/mgmt/tree_connect.c
index 940385c6a9135..dd262daa2c4a5 100644
--- a/fs/ksmbd/mgmt/tree_connect.c
+++ b/fs/ksmbd/mgmt/tree_connect.c
@@ -16,7 +16,8 @@
 #include "user_session.h"
 
 struct ksmbd_tree_conn_status
-ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name)
+ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+			char *share_name)
 {
 	struct ksmbd_tree_conn_status status = {-ENOENT, NULL};
 	struct ksmbd_tree_connect_response *resp = NULL;
@@ -41,7 +42,7 @@ ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name)
 		goto out_error;
 	}
 
-	peer_addr = KSMBD_TCP_PEER_SOCKADDR(sess->conn);
+	peer_addr = KSMBD_TCP_PEER_SOCKADDR(conn);
 	resp = ksmbd_ipc_tree_connect_request(sess,
 					      sc,
 					      tree_conn,
diff --git a/fs/ksmbd/mgmt/tree_connect.h b/fs/ksmbd/mgmt/tree_connect.h
index 18e2a996e0aab..71e50271dccf0 100644
--- a/fs/ksmbd/mgmt/tree_connect.h
+++ b/fs/ksmbd/mgmt/tree_connect.h
@@ -12,6 +12,7 @@
 
 struct ksmbd_share_config;
 struct ksmbd_user;
+struct ksmbd_conn;
 
 struct ksmbd_tree_connect {
 	int				id;
@@ -40,7 +41,8 @@ static inline int test_tree_conn_flag(struct ksmbd_tree_connect *tree_conn,
 struct ksmbd_session;
 
 struct ksmbd_tree_conn_status
-ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name);
+ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess,
+			char *share_name);
 
 int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess,
 			       struct ksmbd_tree_connect *tree_conn);
diff --git a/fs/ksmbd/mgmt/user_session.c b/fs/ksmbd/mgmt/user_session.c
index 9c4a9c8c02795..92b1603b5abeb 100644
--- a/fs/ksmbd/mgmt/user_session.c
+++ b/fs/ksmbd/mgmt/user_session.c
@@ -153,9 +153,6 @@ void ksmbd_session_destroy(struct ksmbd_session *sess)
 	if (!sess)
 		return;
 
-	if (!atomic_dec_and_test(&sess->refcnt))
-		return;
-
 	down_write(&sessions_table_lock);
 	hash_del(&sess->hlist);
 	up_write(&sessions_table_lock);
@@ -186,16 +183,58 @@ static struct ksmbd_session *__session_lookup(unsigned long long id)
 int ksmbd_session_register(struct ksmbd_conn *conn,
 			   struct ksmbd_session *sess)
 {
-	sess->conn = conn;
+	sess->dialect = conn->dialect;
+	memcpy(sess->ClientGUID, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE);
 	return xa_err(xa_store(&conn->sessions, sess->id, sess, GFP_KERNEL));
 }
 
+static int ksmbd_chann_del(struct ksmbd_conn *conn, struct ksmbd_session *sess)
+{
+	struct channel *chann, *tmp;
+
+	write_lock(&sess->chann_lock);
+	list_for_each_entry_safe(chann, tmp, &sess->ksmbd_chann_list,
+				 chann_list) {
+		if (chann->conn == conn) {
+			list_del(&chann->chann_list);
+			kfree(chann);
+			write_unlock(&sess->chann_lock);
+			return 0;
+		}
+	}
+	write_unlock(&sess->chann_lock);
+
+	return -ENOENT;
+}
+
 void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
 {
 	struct ksmbd_session *sess;
-	unsigned long id;
 
-	xa_for_each(&conn->sessions, id, sess) {
+	if (conn->binding) {
+		int bkt;
+
+		down_write(&sessions_table_lock);
+		hash_for_each(sessions_table, bkt, sess, hlist) {
+			if (!ksmbd_chann_del(conn, sess)) {
+				up_write(&sessions_table_lock);
+				goto sess_destroy;
+			}
+		}
+		up_write(&sessions_table_lock);
+	} else {
+		unsigned long id;
+
+		xa_for_each(&conn->sessions, id, sess) {
+			if (!ksmbd_chann_del(conn, sess))
+				goto sess_destroy;
+		}
+	}
+
+	return;
+
+sess_destroy:
+	if (list_empty(&sess->ksmbd_chann_list)) {
 		xa_erase(&conn->sessions, sess->id);
 		ksmbd_session_destroy(sess);
 	}
@@ -207,27 +246,12 @@ struct ksmbd_session *ksmbd_session_lookup(struct ksmbd_conn *conn,
 	return xa_load(&conn->sessions, id);
 }
 
-int get_session(struct ksmbd_session *sess)
-{
-	return atomic_inc_not_zero(&sess->refcnt);
-}
-
-void put_session(struct ksmbd_session *sess)
-{
-	if (atomic_dec_and_test(&sess->refcnt))
-		pr_err("get/%s seems to be mismatched.", __func__);
-}
-
 struct ksmbd_session *ksmbd_session_lookup_slowpath(unsigned long long id)
 {
 	struct ksmbd_session *sess;
 
 	down_read(&sessions_table_lock);
 	sess = __session_lookup(id);
-	if (sess) {
-		if (!get_session(sess))
-			sess = NULL;
-	}
 	up_read(&sessions_table_lock);
 
 	return sess;
@@ -308,7 +332,6 @@ static struct ksmbd_session *__session_create(int protocol)
 	INIT_LIST_HEAD(&sess->ksmbd_chann_list);
 	INIT_LIST_HEAD(&sess->rpc_handle_list);
 	sess->sequence_number = 1;
-	atomic_set(&sess->refcnt, 1);
 	rwlock_init(&sess->chann_lock);
 
 	switch (protocol) {
diff --git a/fs/ksmbd/mgmt/user_session.h b/fs/ksmbd/mgmt/user_session.h
index 1ec659f0151bf..8934b8ee275ba 100644
--- a/fs/ksmbd/mgmt/user_session.h
+++ b/fs/ksmbd/mgmt/user_session.h
@@ -33,8 +33,10 @@ struct preauth_session {
 struct ksmbd_session {
 	u64				id;
 
+	__u16				dialect;
+	char				ClientGUID[SMB2_CLIENT_GUID_SIZE];
+
 	struct ksmbd_user		*user;
-	struct ksmbd_conn		*conn;
 	unsigned int			sequence_number;
 	unsigned int			flags;
 
@@ -59,7 +61,6 @@ struct ksmbd_session {
 	__u8				smb3signingkey[SMB3_SIGN_KEY_SIZE];
 
 	struct ksmbd_file_table		file_table;
-	atomic_t			refcnt;
 };
 
 static inline int test_session_flag(struct ksmbd_session *sess, int bit)
@@ -100,6 +101,4 @@ void ksmbd_release_tree_conn_id(struct ksmbd_session *sess, int id);
 int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name);
 void ksmbd_session_rpc_close(struct ksmbd_session *sess, int id);
 int ksmbd_session_rpc_method(struct ksmbd_session *sess, int id);
-int get_session(struct ksmbd_session *sess);
-void put_session(struct ksmbd_session *sess);
 #endif /* __USER_SESSION_MANAGEMENT_H__ */
diff --git a/fs/ksmbd/oplock.c b/fs/ksmbd/oplock.c
index f9dae6ef21150..3f759f9123ea7 100644
--- a/fs/ksmbd/oplock.c
+++ b/fs/ksmbd/oplock.c
@@ -30,6 +30,7 @@ static DEFINE_RWLOCK(lease_list_lock);
 static struct oplock_info *alloc_opinfo(struct ksmbd_work *work,
 					u64 id, __u16 Tid)
 {
+	struct ksmbd_conn *conn = work->conn;
 	struct ksmbd_session *sess = work->sess;
 	struct oplock_info *opinfo;
 
@@ -38,7 +39,7 @@ static struct oplock_info *alloc_opinfo(struct ksmbd_work *work,
 		return NULL;
 
 	opinfo->sess = sess;
-	opinfo->conn = sess->conn;
+	opinfo->conn = conn;
 	opinfo->level = SMB2_OPLOCK_LEVEL_NONE;
 	opinfo->op_state = OPLOCK_STATE_NONE;
 	opinfo->pending_break = 0;
@@ -972,7 +973,7 @@ int find_same_lease_key(struct ksmbd_session *sess, struct ksmbd_inode *ci,
 	}
 
 	list_for_each_entry(lb, &lease_table_list, l_entry) {
-		if (!memcmp(lb->client_guid, sess->conn->ClientGUID,
+		if (!memcmp(lb->client_guid, sess->ClientGUID,
 			    SMB2_CLIENT_GUID_SIZE))
 			goto found;
 	}
@@ -988,7 +989,7 @@ int find_same_lease_key(struct ksmbd_session *sess, struct ksmbd_inode *ci,
 		rcu_read_unlock();
 		if (opinfo->o_fp->f_ci == ci)
 			goto op_next;
-		err = compare_guid_key(opinfo, sess->conn->ClientGUID,
+		err = compare_guid_key(opinfo, sess->ClientGUID,
 				       lctx->lease_key);
 		if (err) {
 			err = -EINVAL;
@@ -1122,7 +1123,7 @@ int smb_grant_oplock(struct ksmbd_work *work, int req_op_level, u64 pid,
 		struct oplock_info *m_opinfo;
 
 		/* is lease already granted ? */
-		m_opinfo = same_client_has_lease(ci, sess->conn->ClientGUID,
+		m_opinfo = same_client_has_lease(ci, sess->ClientGUID,
 						 lctx);
 		if (m_opinfo) {
 			copy_lease(m_opinfo, opinfo);
@@ -1240,7 +1241,7 @@ void smb_break_all_levII_oplock(struct ksmbd_work *work, struct ksmbd_file *fp,
 {
 	struct oplock_info *op, *brk_op;
 	struct ksmbd_inode *ci;
-	struct ksmbd_conn *conn = work->sess->conn;
+	struct ksmbd_conn *conn = work->conn;
 
 	if (!test_share_config_flag(work->tcon->share_conf,
 				    KSMBD_SHARE_FLAG_OPLOCKS))
diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 8bfe2a6c05f92..61d6d4b6b56ac 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -610,12 +610,9 @@ static void destroy_previous_session(struct ksmbd_conn *conn,
 	if (!prev_user ||
 	    strcmp(user->name, prev_user->name) ||
 	    user->passkey_sz != prev_user->passkey_sz ||
-	    memcmp(user->passkey, prev_user->passkey, user->passkey_sz)) {
-		put_session(prev_sess);
+	    memcmp(user->passkey, prev_user->passkey, user->passkey_sz))
 		return;
-	}
 
-	put_session(prev_sess);
 	prev_sess->state = SMB2_SESSION_EXPIRED;
 	write_lock(&prev_sess->chann_lock);
 	list_for_each_entry(chann, &prev_sess->ksmbd_chann_list, chann_list)
@@ -1512,7 +1509,7 @@ static int ntlm_authenticate(struct ksmbd_work *work)
 
 	if (smb3_encryption_negotiated(conn) &&
 			!(req->Flags & SMB2_SESSION_REQ_FLAG_BINDING)) {
-		rc = conn->ops->generate_encryptionkey(sess);
+		rc = conn->ops->generate_encryptionkey(conn, sess);
 		if (rc) {
 			ksmbd_debug(SMB,
 					"SMB3 encryption key generation failed\n");
@@ -1604,7 +1601,7 @@ static int krb5_authenticate(struct ksmbd_work *work)
 		sess->sign = true;
 
 	if (smb3_encryption_negotiated(conn)) {
-		retval = conn->ops->generate_encryptionkey(sess);
+		retval = conn->ops->generate_encryptionkey(conn, sess);
 		if (retval) {
 			ksmbd_debug(SMB,
 				    "SMB3 encryption key generation failed\n");
@@ -1692,7 +1689,7 @@ int smb2_sess_setup(struct ksmbd_work *work)
 			goto out_err;
 		}
 
-		if (conn->dialect != sess->conn->dialect) {
+		if (conn->dialect != sess->dialect) {
 			rc = -EINVAL;
 			goto out_err;
 		}
@@ -1702,7 +1699,7 @@ int smb2_sess_setup(struct ksmbd_work *work)
 			goto out_err;
 		}
 
-		if (strncmp(conn->ClientGUID, sess->conn->ClientGUID,
+		if (strncmp(conn->ClientGUID, sess->ClientGUID,
 			    SMB2_CLIENT_GUID_SIZE)) {
 			rc = -ENOENT;
 			goto out_err;
@@ -1907,7 +1904,7 @@ int smb2_tree_connect(struct ksmbd_work *work)
 	ksmbd_debug(SMB, "tree connect request for tree %s treename %s\n",
 		    name, treename);
 
-	status = ksmbd_tree_conn_connect(sess, name);
+	status = ksmbd_tree_conn_connect(conn, sess, name);
 	if (status.ret == KSMBD_TREE_CONN_STATUS_OK)
 		rsp->hdr.Id.SyncId.TreeId = cpu_to_le32(status.tree_conn->id);
 	else
@@ -4895,7 +4892,7 @@ static int smb2_get_info_filesystem(struct ksmbd_work *work,
 				    struct smb2_query_info_rsp *rsp, void *rsp_org)
 {
 	struct ksmbd_session *sess = work->sess;
-	struct ksmbd_conn *conn = sess->conn;
+	struct ksmbd_conn *conn = work->conn;
 	struct ksmbd_share_config *share = work->tcon->share_conf;
 	int fsinfoclass = 0;
 	struct kstatfs stfs;
@@ -5831,7 +5828,7 @@ static int set_rename_info(struct ksmbd_work *work, struct ksmbd_file *fp,
 	}
 next:
 	return smb2_rename(work, fp, user_ns, rename_info,
-			   work->sess->conn->local_nls);
+			   work->conn->local_nls);
 }
 
 static int set_file_disposition_info(struct ksmbd_file *fp,
@@ -5965,7 +5962,7 @@ static int smb2_set_info_file(struct ksmbd_work *work, struct ksmbd_file *fp,
 		return smb2_create_link(work, work->tcon->share_conf,
 					(struct smb2_file_link_info *)req->Buffer,
 					buf_len, fp->filp,
-					work->sess->conn->local_nls);
+					work->conn->local_nls);
 	}
 	case FILE_DISPOSITION_INFORMATION:
 	{
diff --git a/fs/ksmbd/smb_common.h b/fs/ksmbd/smb_common.h
index b9fe3fa149c2e..48cbaa0321400 100644
--- a/fs/ksmbd/smb_common.h
+++ b/fs/ksmbd/smb_common.h
@@ -454,7 +454,7 @@ struct smb_version_ops {
 	int (*check_sign_req)(struct ksmbd_work *work);
 	void (*set_sign_rsp)(struct ksmbd_work *work);
 	int (*generate_signingkey)(struct ksmbd_session *sess, struct ksmbd_conn *conn);
-	int (*generate_encryptionkey)(struct ksmbd_session *sess);
+	int (*generate_encryptionkey)(struct ksmbd_conn *conn, struct ksmbd_session *sess);
 	bool (*is_transform_hdr)(void *buf);
 	int (*decrypt_req)(struct ksmbd_work *work);
 	int (*encrypt_resp)(struct ksmbd_work *work);
diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 5d40a00fbce50..52cc6a9627ed7 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -483,12 +483,11 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,
 		    char *buf, size_t count, loff_t *pos, bool sync,
 		    ssize_t *written)
 {
-	struct ksmbd_session *sess = work->sess;
 	struct file *filp;
 	loff_t	offset = *pos;
 	int err = 0;
 
-	if (sess->conn->connection_type) {
+	if (work->conn->connection_type) {
 		if (!(fp->daccess & FILE_WRITE_DATA_LE)) {
 			pr_err("no right to write(%pd)\n",
 			       fp->filp->f_path.dentry);
diff --git a/fs/ksmbd/vfs_cache.c b/fs/ksmbd/vfs_cache.c
index 8b873d92d7854..0df8467af39af 100644
--- a/fs/ksmbd/vfs_cache.c
+++ b/fs/ksmbd/vfs_cache.c
@@ -570,7 +570,7 @@ struct ksmbd_file *ksmbd_open_fd(struct ksmbd_work *work, struct file *filp)
 	atomic_set(&fp->refcount, 1);
 
 	fp->filp		= filp;
-	fp->conn		= work->sess->conn;
+	fp->conn		= work->conn;
 	fp->tcon		= work->tcon;
 	fp->volatile_id		= KSMBD_NO_FID;
 	fp->persistent_id	= KSMBD_NO_FID;
-- 
2.39.2




  parent reply	other threads:[~2023-05-15 17:32 UTC|newest]

Thread overview: 148+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-15 16:27 [PATCH 5.15 000/134] 5.15.112-rc1 review Greg Kroah-Hartman
2023-05-15 16:27 ` [PATCH 5.15 001/134] ring-buffer: Ensure proper resetting of atomic variables in ring_buffer_reset_online_cpus Greg Kroah-Hartman
2023-05-15 16:27 ` [PATCH 5.15 002/134] crypto: ccp - Clear PSP interrupt status register before calling handler Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 003/134] ubifs: Fix AA deadlock when setting xattr for encrypted file Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 004/134] ubifs: Fix memory leak in do_rename Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 005/134] bus: mhi: Move host MHI code to "host" directory Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 006/134] bus: mhi: host: Remove duplicate ee check for syserr Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 007/134] bus: mhi: host: Use mhi_tryset_pm_state() for setting fw error state Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 008/134] bus: mhi: host: Range check CHDBOFF and ERDBOFF Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 009/134] mailbox: zynq: Switch to flexible array to simplify code Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 010/134] mailbox: zynqmp: Fix counts of child nodes Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 011/134] ASoC: soc-pcm: use GFP_ATOMIC for dpcm structure Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 012/134] ASoC: soc-pcm: align BE atomicity with that of the FE Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 013/134] ASoC: soc-pcm: Fix and cleanup DPCM locking Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 014/134] ASoC: soc-pcm: serialize BE triggers Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 015/134] ASoC: soc-pcm: test refcount before triggering Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 016/134] ASoC: soc-pcm: fix BE handling of PAUSE_RELEASE Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 017/134] fs/ntfs3: Fix null-ptr-deref on inode->i_op in ntfs_lookup() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 018/134] drm/hyperv: Dont overwrite dirt_needed value set by host Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 019/134] scsi: qedi: Fix use after free bug in qedi_remove() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 020/134] net/ncsi: clear Tx enable mode when handling a Config required AEN Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 021/134] net/sched: cls_api: remove block_cb from driver_list before freeing Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 022/134] sit: update dev->needed_headroom in ipip6_tunnel_bind_dev() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 023/134] selftests: srv6: make srv6_end_dt46_l3vpn_test more robust Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 024/134] net: dsa: mv88e6xxx: add mv88e6321 rsvd2cpu Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 025/134] writeback: fix call of incorrect macro Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 026/134] watchdog: dw_wdt: Fix the error handling path of dw_wdt_drv_probe() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 027/134] RISC-V: mm: Enable huge page support to kernel_page_present() function Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 028/134] net/sched: act_mirred: Add carrier check Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 029/134] r8152: fix flow control issue of RTL8156A Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 030/134] r8152: fix the poor throughput for 2.5G devices Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 031/134] r8152: move setting r8153b_rx_agg_chg_indicate() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 032/134] sfc: Fix module EEPROM reporting for QSFP modules Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 033/134] rxrpc: Fix hard call timeout units Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 034/134] octeontx2-af: Secure APR table update with the lock Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 035/134] octeontx2-af: Skip PFs if not enabled Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 036/134] octeontx2-pf: Disable packet I/O for graceful exit Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 037/134] octeontx2-vf: Detach LF resources on probe cleanup Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 038/134] ionic: remove noise from ethtool rxnfc error msg Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 039/134] ethtool: Fix uninitialized number of lanes Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 040/134] ionic: catch failure from devlink_alloc Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 041/134] af_packet: Dont send zero-byte data in packet_sendmsg_spkt() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 042/134] drm/amdgpu: add a missing lock for AMDGPU_SCHED Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 043/134] ALSA: caiaq: input: Add error handling for unsupported input methods in `snd_usb_caiaq_input_init` Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 044/134] net: dsa: mt7530: fix corrupt frames using trgmii on 40 MHz XTAL MT7621 Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 045/134] virtio_net: split free_unused_bufs() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 046/134] virtio_net: suppress cpu stall when free_unused_bufs Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 047/134] net: enetc: check the index of the SFI rather than the handle Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 048/134] net: bcmgenet: Remove phy_stop() from bcmgenet_netif_stop() Greg Kroah-Hartman
2023-05-16  3:41   ` Florian Fainelli
2023-05-15 16:28 ` [PATCH 5.15 049/134] perf scripts intel-pt-events.py: Fix IPC output for Python 2 Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 050/134] perf vendor events power9: Remove UTF-8 characters from JSON files Greg Kroah-Hartman
2023-05-15 16:28   ` Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 051/134] perf pmu: zfree() expects a pointer to a pointer to zero it after freeing its contents Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 052/134] perf map: Delete two variable initialisations before null pointer checks in sort__sym_from_cmp() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 053/134] crypto: sun8i-ss - Fix a test in sun8i_ss_setup_ivs() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 054/134] crypto: engine - check if BH is disabled during completion Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 055/134] crypto: api - Add scaffolding to change completion function signature Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 056/134] crypto: engine - Use crypto_request_complete Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 057/134] crypto: engine - fix crypto_queue backlog handling Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 058/134] perf symbols: Fix return incorrect build_id size in elf_read_build_id() Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 059/134] perf evlist: Refactor evlist__for_each_cpu() Greg Kroah-Hartman
2023-05-15 16:28   ` Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 060/134] perf stat: Separate bperf from bpf_profiler Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 061/134] btrfs: fix btrfs_prev_leaf() to not return the same key twice Greg Kroah-Hartman
2023-05-15 16:28 ` [PATCH 5.15 062/134] btrfs: zoned: fix wrong use of bitops API in btrfs_ensure_empty_zones Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 063/134] btrfs: fix encoded write i_size corruption with no-holes Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 064/134] btrfs: dont free qgroup space unless specified Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 065/134] btrfs: zero the buffer before marking it dirty in btrfs_redirty_list_add Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 066/134] btrfs: print-tree: parent bytenr must be aligned to sector size Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 067/134] btrfs: fix space cache inconsistency after error loading it from disk Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 068/134] cifs: fix pcchunk length type in smb2_copychunk_range Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 069/134] cifs: release leases for deferred close handles when freezing Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 070/134] platform/x86: touchscreen_dmi: Add upside-down quirk for GDIX1002 ts on the Juno Tablet Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 071/134] platform/x86: touchscreen_dmi: Add info for the Dexp Ursus KX210i Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 072/134] inotify: Avoid reporting event with invalid wd Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 073/134] smb3: fix problem remounting a share after shutdown Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 074/134] SMB3: force unmount was failing to close deferred close files Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 075/134] sh: math-emu: fix macro redefined warning Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 076/134] sh: mcount.S: fix build error when PRINTK is not enabled Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 077/134] sh: init: use OF_EARLY_FLATTREE for early init Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 078/134] sh: nmi_debug: fix return value of __setup handler Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 079/134] remoteproc: stm32: Call of_node_put() on iteration error Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 080/134] remoteproc: st: " Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 081/134] remoteproc: imx_rproc: " Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 082/134] ARM: dts: exynos: fix WM8960 clock name in Itop Elite Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 083/134] ARM: dts: s5pv210: correct MIPI CSIS clock name Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 084/134] drm/bridge: lt8912b: Fix DSI Video Mode Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 085/134] drm/msm: fix NULL-deref on snapshot tear down Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 086/134] drm/msm: fix NULL-deref on irq uninstall Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 087/134] f2fs: fix potential corruption when moving a directory Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 088/134] drm/panel: otm8009a: Set backlight parent to panel device Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 089/134] drm/amd/display: fix flickering caused by S/G mode Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 090/134] drm/amdgpu: fix an amdgpu_irq_put() issue in gmc_v9_0_hw_fini() Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 091/134] drm/amdgpu/gfx: disable gfx9 cp_ecc_error_irq only when enabling legacy gfx ras Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 092/134] drm/amdgpu: Fix vram recover doesnt work after whole GPU reset (v2) Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 093/134] drm/amdgpu: disable sdma ecc irq only when sdma RAS is enabled in suspend Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 094/134] HID: wacom: Set a default resolution for older tablets Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 095/134] HID: wacom: insert timestamp to packed Bluetooth (BT) events Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 096/134] fs/ntfs3: Refactoring of various minor issues Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 097/134] ASoC: soc-pcm: Fix DPCM lockdep warning due to nested stream locks Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 098/134] ASoC: soc-compress: Inherit atomicity from DAI link for Compress FE Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 099/134] ASoC: soc-pcm: Move debugfs removal out of spinlock Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 100/134] ASoC: DPCM: Dont pick up BE without substream Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 101/134] ASoC: soc-pcm.c: call __soc_pcm_close() in soc_pcm_close() Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 102/134] drm/i915/dg2: Support 4k@30 on HDMI Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 103/134] drm/i915/dg2: Add additional HDMI pixel clock frequencies Greg Kroah-Hartman
2023-05-15 16:29   ` Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 104/134] drm/i915/dg2: Add HDMI pixel clock frequencies 267.30 and 319.89 MHz Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 105/134] drm/msm: Remove struct_mutex usage Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 106/134] drm/msm/adreno: fix runtime PM imbalance at gpu load Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 107/134] drm/amd/display: Refine condition of cursor visibility for pipe-split Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 108/134] drm/amd/display: Add NULL plane_state check for cursor disable logic Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 109/134] wifi: rtw88: rtw8821c: Fix rfe_option field width Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 110/134] ksmbd: set RSS capable in FSCTL_QUERY_NETWORK_INTERFACE_INFO Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 111/134] ksmbd: fix multi session connection failure Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 112/134] ksmbd: replace sessions list in connection with xarray Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 113/134] ksmbd: add channel rwlock Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 114/134] ksmbd: fix kernel oops from idr_remove() Greg Kroah-Hartman
2023-05-15 16:29 ` Greg Kroah-Hartman [this message]
2023-05-15 16:29 ` [PATCH 5.15 116/134] ksmbd: fix deadlock in ksmbd_find_crypto_ctx() Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 117/134] ksmbd: not allow guest user on multichannel Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 118/134] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 119/134] ext4: fix WARNING in mb_find_extent Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 120/134] ext4: avoid a potential slab-out-of-bounds in ext4_group_desc_csum Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 121/134] ext4: fix data races when using cached status extents Greg Kroah-Hartman
2023-05-15 16:29 ` [PATCH 5.15 122/134] ext4: check iomap type only if ext4_iomap_begin() does not fail Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 123/134] ext4: improve error recovery code paths in __ext4_remount() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 124/134] ext4: improve error handling from ext4_dirhash() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 125/134] ext4: fix deadlock when converting an inline directory in nojournal mode Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 126/134] ext4: add bounds checking in get_max_inline_xattr_value_size() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 127/134] ext4: bail out of ext4_xattr_ibody_get() fails for any reason Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 128/134] ext4: remove a BUG_ON in ext4_mb_release_group_pa() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 129/134] ext4: fix invalid free tracking in ext4_xattr_move_to_block() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 130/134] drm/msm/adreno: adreno_gpu: Use suspend() instead of idle() on load error Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 131/134] serial: 8250: Fix serial8250_tx_empty() race with DMA Tx Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 132/134] drbd: correctly submit flush bio on barrier Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 133/134] RISC-V: Fix up a cherry-pick warning in setup_vm_final() Greg Kroah-Hartman
2023-05-15 16:30 ` [PATCH 5.15 134/134] drm/amd/display: Fix hang when skipping modeset Greg Kroah-Hartman
2023-05-15 20:11 ` [PATCH 5.15 000/134] 5.15.112-rc1 review Chris Paterson
2023-05-16  1:27 ` Shuah Khan
2023-05-16  9:16 ` Sudip Mukherjee (Codethink)
2023-05-16  9:25 ` Ron Economos
2023-05-16 12:53 ` Bagas Sanjaya
2023-05-16 16:46 ` Harshit Mogalapalli
2023-05-16 17:33 ` Naresh Kamboju
2023-05-17  2:57 ` Guenter Roeck
2023-05-17  7:55 ` Jon Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230515161706.964691943@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=hyc.lee@gmail.com \
    --cc=linkinjeon@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=stfrench@microsoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.