From 47917093d18b555ee9bc32a3fd9f3fc3a6fde6ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Atte=20Heikkil=C3=A4?= <atteh.mailbox@gmail.com>
Date: Sun, 15 Oct 2023 22:36:49 +0300
Subject: [PATCH] Revert "ksmbd-lib: release user when connection is removed"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 0b87a71a0d9ebb8f21f86e5355bad28a2e7d5e55.

The changes result in use-after-frees on tree disconnects of existing
connections after a config reload. This may be reproduced on Windows,
but not with smbclient or cifs-utils.

Signed-off-by: Atte Heikkilä <atteh.mailbox@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
---
 lib/management/session.c   | 1 -
 lib/management/tree_conn.c | 5 +----
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/lib/management/session.c b/lib/management/session.c
index a25a33d29007..ab4e749be0b0 100644
--- a/lib/management/session.c
+++ b/lib/management/session.c
@@ -197,7 +197,6 @@ int sm_handle_tree_disconnect(unsigned long long sess_id,
 	}
 	g_rw_lock_writer_unlock(&sess->update_lock);
 
-	put_ksmbd_user(sess->user);
 	__put_session(sess);
 	return 0;
 }
diff --git a/lib/management/tree_conn.c b/lib/management/tree_conn.c
index c34470106734..ae3ece27d8e9 100644
--- a/lib/management/tree_conn.c
+++ b/lib/management/tree_conn.c
@@ -207,11 +207,8 @@ bind:
 	resp->status = KSMBD_TREE_CONN_STATUS_OK;
 	resp->connection_flags = conn->flags;
 
-	if (sm_handle_tree_connect(req->session_id, user, conn)) {
+	if (sm_handle_tree_connect(req->session_id, user, conn))
 		pr_err("treecon: Unable to bind tree connection\n");
-		tcm_tree_conn_free(conn);
-		put_ksmbd_user(user);
-	}
 
 	g_rw_lock_writer_lock(&share->update_lock);
 	clear_share_flag(share, KSMBD_SHARE_FLAG_UPDATE);
-- 
2.34.1

